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