From aebb7c96cdb08b008e377799b92ea4cbc1e4532b Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Fri, 5 Dec 2014 05:36:17 +0000
Subject: [PATCH] orm: Add bitwise op. support to SqlExpression

---
 include/class.orm.php      | 22 ++++++++++++++++++++++
 setup/test/tests/stubs.php |  2 ++
 2 files changed, 24 insertions(+)

diff --git a/include/class.orm.php b/include/class.orm.php
index ce074a887..de3434cc1 100644
--- a/include/class.orm.php
+++ b/include/class.orm.php
@@ -491,6 +491,24 @@ class SqlFunction {
     }
 }
 
+class SqlExpr extends SqlFunction {
+    function __construct($args) {
+        $this->args = $args;
+    }
+
+    function toSql($compiler, $model=false, $alias=false) {
+        $O = array();
+        foreach ($this->args as $field=>$value) {
+            list($field, $op) = $compiler->getField($field, $model);
+            if (is_callable($op))
+                $O[] = call_user_func($op, $field, $value, $model);
+            else
+                $O[] = sprintf($op, $field, $compiler->input($value));
+        }
+        return implode(' ', $O) . ($alias ? ' AS ' . $alias : '');
+    }
+}
+
 class SqlExpression extends SqlFunction {
     var $operator;
     var $operands;
@@ -515,6 +533,10 @@ class SqlExpression extends SqlFunction {
                 $operator = '+'; break;
             case 'times':
                 $operator = '*'; break;
+            case 'bitand':
+                $operator = '&'; break;
+            case 'bitor':
+                $operator = '|'; break;
             default:
                 throw new InvalidArgumentException('Invalid operator specified');
         }
diff --git a/setup/test/tests/stubs.php b/setup/test/tests/stubs.php
index 4b0ef139d..4a1f8db34 100644
--- a/setup/test/tests/stubs.php
+++ b/setup/test/tests/stubs.php
@@ -126,6 +126,8 @@ class SqlFunction {
 
 class SqlExpression {
     static function plus() {}
+    static function bitor() {}
+    static function bitand() {}
 }
 
 class SqlInterval {
-- 
GitLab