public function testAssemble() { $predicate = new NotInPredicate(); $predicate->setField('field'); $this->assertEquals('field NOT IN NULL', QueryAssembler::stringify($predicate)); $predicate->setExpression((new NumericExpression())->setValue(1)); $this->assertEquals('field NOT IN 1', QueryAssembler::stringify($predicate)); $predicate->setExpression(ArrayExpression::create(['1', 2, 3])); $this->assertEquals('field NOT IN ("1",2,3)', QueryAssembler::stringify($predicate)); $predicate->setExpression(ValueExpression::create([4])); $this->assertEquals('field NOT IN (4)', QueryAssembler::stringify($predicate)); }
public static function buildPredicates(array $input, $table = null, $inverse = false) { $predicates = []; foreach ($input as $key => $value) { if ($value === null || is_scalar($value) || $value instanceof ValueExpression) { $pred = $inverse ? new NotEqualPredicate() : new EqualPredicate(); $pred->setField(FieldExpression::createWithTable($key, $table)); if (!$value instanceof ValueExpression) { $value = ValueExpression::create($value); } $pred->setExpression($value); $predicates[] = $pred; } else { if ($value instanceof IPredicate) { $predicates[] = $value; } else { if (is_array($value)) { if (is_int($key)) { $predicates = array_merge($predicates, static::buildPredicates($value, $table, $inverse)); } else { if (static::_isControlKeyword($key)) { switch ($key) { case 'NOT': $predicates = array_merge($predicates, static::buildPredicates($value, $table, true)); break; case 'OR': $pred = new OrPredicateSet(); $pred->setPredicates(static::buildPredicates($value, $table, $inverse)); $predicates[] = $pred; break; case 'AND': $pred = new PredicateSet(); $pred->setPredicates(static::buildPredicates($value, $table, $inverse)); $predicates[] = $pred; break; } } else { $pred = $inverse ? new NotInPredicate() : new InPredicate(); $pred->setField(FieldExpression::createWithTable($key, $table)); $pred->setExpression(ArrayExpression::create($value)); $predicates[] = $pred; } } } } } } return $predicates; }
public function testAssemble() { $predicate = new InPredicate(); $predicate->setField('field'); $this->assertEquals('field IN NULL', QueryAssembler::stringify($predicate)); $predicate->setExpression((new NumericExpression())->setValue(1)); $this->assertEquals('field IN 1', QueryAssembler::stringify($predicate)); $predicate->setExpression(ArrayExpression::create(['1', 'my "quoted" test', 3])); $this->assertEquals('field IN ("1","my \\"quoted\\" test",3)', QueryAssembler::stringify($predicate)); $predicate->setExpression(ValueExpression::create([4])); $this->assertEquals('field IN (4)', QueryAssembler::stringify($predicate)); $changeExpr = StringExpression::create('my "quoted" test'); $predicate->setExpression(ArrayExpression::create(['1', $changeExpr, 3])); $stmt = QueryBuilder::select(AllSelectExpression::create()); $stmt->where($predicate); $assembler = new QueryAssembler($stmt); $this->assertEquals('SELECT * WHERE field IN (?,?,?)', $assembler->getQuery()); $this->assertEquals(['1', 'my "quoted" test', 3], $assembler->getParameters()); $changeExpr->setValue('changed text'); $this->assertEquals(['1', 'changed text', 3], $assembler->getParameters()); }
public function assembleValueExpression(ValueExpression $expression) { $value = $expression->getValue(); if ($value === null) { return $this->_assemblePrepared() ?: 'NULL'; } else { if (is_scalar($value)) { if (!is_string($value) && is_numeric($value)) { return $this->assembleNumericExpression(NumericExpression::create($value)); } else { if (is_bool($value)) { return $this->assembleBooleanExpression(BooleanExpression::create($value)); } } } else { if (is_array($value)) { return $this->assembleArrayExpression(ArrayExpression::create($value)); } } } return $this->assembleStringExpression(StringExpression::create($value)); }