public function testAssemble()
 {
     $clause = new LimitClause();
     $clause->setLimit(10);
     $this->assertEquals('LIMIT 10', QueryAssembler::stringify($clause));
     $clause->setOffset(5);
     $this->assertEquals('LIMIT 5,10', QueryAssembler::stringify($clause));
     $stmt = QueryBuilder::select(AllSelectExpression::create())->limit(3);
     $assembler = new QueryAssembler($stmt);
     $this->assertEquals('SELECT * LIMIT ?', $assembler->getQuery());
     $this->assertEquals([3], $assembler->getParameters());
     $stmt = QueryBuilder::select(AllSelectExpression::create())->limitWithOffset(0, 3);
     $assembler = new QueryAssembler($stmt);
     $this->assertEquals('SELECT * LIMIT ?,?', $assembler->getQuery());
     $this->assertEquals([0, 3], $assembler->getParameters());
     $offset = NumericExpression::create(0);
     $limit = NumericExpression::create(3);
     $stmt = QueryBuilder::select(AllSelectExpression::create())->limitWithOffset($offset, $limit);
     $assembler = new QueryAssembler($stmt);
     $this->assertEquals('SELECT * LIMIT ?,?', $assembler->getQuery());
     $this->assertEquals([0, 3], $assembler->getParameters());
     $offset->setValue(25);
     $limit->setValue(38);
     $this->assertEquals('SELECT * LIMIT ?,?', $assembler->getQuery());
     $this->assertEquals([25, 38], $assembler->getParameters());
 }
 public function testNull()
 {
     $expression = ValueExpression::create(null);
     $this->assertNull($expression->getValue());
     $this->assertEquals('NULL', QueryAssembler::stringify($expression));
     $stmt = QueryBuilder::update('tbl', ['field' => $expression]);
     $assembler = new QueryAssembler($stmt);
     $this->assertEquals('UPDATE tbl SET field = ?', $assembler->getQuery());
     $this->assertEquals([null], $assembler->getParameters());
 }
 public function testAssemble()
 {
     $statement = QueryBuilder::insertInto('tbl');
     $this->assertEquals('INSERT INTO tbl ()', QueryAssembler::stringify($statement));
     $statement = QueryBuilder::insertInto('tbl', 'field');
     $this->assertEquals('INSERT INTO tbl (field)', QueryAssembler::stringify($statement));
     $statement->insertInto('tbl', FieldExpression::create('id'), 'name');
     $this->assertEquals('INSERT INTO tbl (id, name)', QueryAssembler::stringify($statement));
     $statement->values(null, ValueExpression::create('Test'));
     $this->assertEquals('INSERT INTO tbl (id, name) ' . 'VALUES (NULL, "Test")', QueryAssembler::stringify($statement));
     $statement->values('row2v1', 'row2v2');
     $this->assertEquals('INSERT INTO tbl (id, name) ' . 'VALUES (NULL, "Test"), ("row2v1", "row2v2")', QueryAssembler::stringify($statement));
     $statement = QueryBuilder::insertInto('tbl', 'field1', 'field2')->values('value1', 'value2')->onDuplicateKeyUpdate('field1', IncrementExpression::create('field2', 1));
     $assembler = new QueryAssembler($statement);
     $this->assertEquals('INSERT INTO tbl (field1, field2) VALUES (?, ?) ON DUPLICATE KEY UPDATE field1 = field2 + ?', $assembler->getQuery());
     $this->assertEquals(['value1', 'value2', 1], $assembler->getParameters());
 }
 public function testAssemble()
 {
     $expression = new IncrementExpression();
     $expression->setField(FieldExpression::create('new_field'));
     $this->assertEquals('new_field + 0', QueryAssembler::stringify($expression));
     $expression->setIncrementValue('abc');
     $this->assertEquals('new_field + 0', QueryAssembler::stringify($expression));
     $expression->setIncrementValue('1');
     $this->assertEquals('new_field + 1', QueryAssembler::stringify($expression));
     $expression->setIncrementValue(1);
     $this->assertEquals('new_field + 1', QueryAssembler::stringify($expression));
     $stmt = QueryBuilder::update('tbl');
     $stmt->set('inc_field', $expression);
     $qa = new QueryAssembler($stmt);
     $this->assertEquals('UPDATE tbl SET inc_field = new_field + ?', $qa->getQuery());
     $this->assertEquals([1], $qa->getParameters());
 }
 public function testBoolean()
 {
     $expression = new BooleanExpression();
     $expression->setValue(true);
     $this->assertEquals('true', QueryAssembler::stringify($expression));
     $expression->setValue(1);
     $this->assertEquals('true', QueryAssembler::stringify($expression));
     $expression->setValue('abc');
     $this->assertEquals('true', QueryAssembler::stringify($expression));
     $expression->setValue(false);
     $this->assertEquals('false', QueryAssembler::stringify($expression));
     $expression->setValue(0);
     $this->assertEquals('false', QueryAssembler::stringify($expression));
     $expression->setValue('');
     $this->assertEquals('false', QueryAssembler::stringify($expression));
     $stmt = QueryBuilder::update('tbl', ['field' => $expression]);
     $assembler = new QueryAssembler($stmt);
     $this->assertEquals('UPDATE tbl SET field = ?', $assembler->getQuery());
     $this->assertEquals([false], $assembler->getParameters());
 }
 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 testAssembler()
 {
     $assembler = new QueryAssembler(QueryBuilder::insertInto(TableExpression::create('tbl'), 'field')->values('value'));
     $this->assertEquals('INSERT INTO tbl (field) VALUES (?)', $assembler->getQuery());
 }