public function testAssemble() { $statement = new DeleteStatement(); $update = new DeleteClause(); $update->setTable('tbl'); $statement->addClause($update); $this->assertEquals('DELETE FROM tbl', QueryAssembler::stringify($statement)); $where = new WhereClause(); $where->addPredicate((new NotEqualPredicate())->setField('username')); $statement->addClause($where); $this->assertEquals('DELETE FROM tbl WHERE username IS NOT NULL', QueryAssembler::stringify($statement)); $where->addPredicate((new LikePredicate())->setField('name')->setExpression(EndsWithExpression::create('Joh'))); $this->assertEquals('DELETE FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "%Joh"', QueryAssembler::stringify($statement)); }
public function joinWithPredicates($table, ...$predicates) { if (empty($predicates)) { throw new \RuntimeException('No predicates specified for join'); } $join = new JoinClause(); $join->setTableName($table); $join->setPredicates(WhereClause::buildPredicates($predicates, $table)); $this->addClause($join); return $this; }
private function _getNewSet(...$expressions) { $newPredicates = WhereClause::buildPredicates($expressions); if (count($newPredicates) === 1) { $newSet = Arrays::first($newPredicates); } else { $newSet = new PredicateSet(); $newSet->setPredicates($newPredicates); } return $newSet; }
public function testAssemble() { $statement = new QueryStatement(); $select = new SelectClause(); $select->addExpression(new AllSelectExpression()); $statement->addClause($select); $this->assertEquals('SELECT *', QueryAssembler::stringify($statement)); $from = new FromClause(); $from->setTable('tbl'); $statement->addClause($from); $this->assertEquals('SELECT * FROM tbl', QueryAssembler::stringify($statement)); $where = new WhereClause(); $where->addPredicate((new NotEqualPredicate())->setField('username')); $statement->addClause($where); $this->assertEquals('SELECT * FROM tbl WHERE username IS NOT NULL', QueryAssembler::stringify($statement)); $where->addPredicate((new LikePredicate())->setField('name')->setExpression(StartsWithExpression::create('Joh'))); $this->assertEquals('SELECT * FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "Joh%"', QueryAssembler::stringify($statement)); $orderBy = new OrderByClause(); $statement->addClause($orderBy); $orderBy->addField((new FieldExpression())->setField('user_id')); $this->assertEquals('SELECT * FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "Joh%" ' . 'ORDER BY user_id', QueryAssembler::stringify($statement)); $orderBy->addField((new FieldExpression())->setField('age'), 'DESC'); $this->assertEquals('SELECT * FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "Joh%" ' . 'ORDER BY user_id, age DESC', QueryAssembler::stringify($statement)); $groupBy = new GroupByClause(); $statement->addClause($groupBy); $groupBy->addField((new FieldExpression())->setField('role')); $this->assertEquals('SELECT * FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "Joh%" ' . 'GROUP BY role ' . 'ORDER BY user_id, age DESC', QueryAssembler::stringify($statement)); $having = new HavingClause(); $statement->addClause($having); $having->addPredicate((new LessThanPredicate())->setField('tasks')->setExpression((new NumericExpression())->setValue(4))); $this->assertEquals('SELECT * FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "Joh%" ' . 'GROUP BY role ' . 'HAVING tasks < 4 ' . 'ORDER BY user_id, age DESC', QueryAssembler::stringify($statement)); $limit = new LimitClause(); $limit->setLimit(10); $limit->setOffset(20); $statement->addClause($limit); $this->assertEquals('SELECT * FROM tbl ' . 'WHERE username IS NOT NULL AND name LIKE "Joh%" ' . 'GROUP BY role ' . 'HAVING tasks < 4 ' . 'ORDER BY user_id, age DESC ' . 'LIMIT 20,10', QueryAssembler::stringify($statement)); }
public function testNullBuilder() { $this->assertEquals("WHERE name IS NULL AND description IS NOT NULL", QueryAssembler::stringify(WhereClause::create(['name' => null, 'NOT' => ['description' => null]]))); }
public function testNoPredicates() { $where = WhereClause::create(); $where->addPredicate(new PredicateSet()); $this->assertEquals('WHERE ', CqlAssembler::stringify($where)); }
public function testInPredicate() { $this->assertEquals('WHERE field1 IN ("value1","value2")', QueryAssembler::stringify(WhereClause::create(['field1' => ['value1', 'value2']]))); $this->setExpectedException('\\Packaged\\QueryBuilder\\Exceptions\\Assembler\\QueryBuilderAssemblerException', 'Cannot assemble an empty ArrayExpression'); QueryAssembler::stringify(WhereClause::create(['field1' => []])); }