diff --git a/include/class.orm.php b/include/class.orm.php index ce074a88787a4947e212cae42e635ad5fa943b75..de3434cc1cedc228406905811676651924e4e38e 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 4b0ef139d73f36f3162c0b8c9fadc67fdfe92f4b..4a1f8db340525ffe775fda0d2a29c9e2a120a4ff 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 {