/** * Test SQL generation with many elements * * @return void */ public function testSqlGenerationMultipleClauses() { $expr = new QueryExpression(); $binder = new ValueBinder(); $expr->add(['Users.username' => 'sally', 'Users.active' => 1], ['Users.username' => 'string', 'Users.active' => 'boolean']); $result = $expr->sql($binder); $this->assertEquals('(Users.username = :c0 AND Users.active = :c1)', $result); }
/** * Test sql generation with 0 case. * * @return void */ public function testSqlOutputZero() { $expression = new QueryExpression(); $expression->add(['id' => 'test']); $caseExpression = new CaseExpression([$expression], [0], ['integer']); $expected = 'CASE WHEN id = :c0 THEN :c1 END'; $binder = new ValueBinder(); $this->assertSame($expected, $caseExpression->sql($binder)); $expected = [':c0' => ['value' => 'test', 'type' => null, 'placeholder' => 'c0'], ':c1' => ['value' => 0, 'type' => 'integer', 'placeholder' => 'c1']]; $this->assertEquals($expected, $binder->bindings()); }
/** * Returns a new QueryExpression object. This is a handy function when * building complex queries using a fluent interface. You can also override * this function in subclasses to use a more specialized QueryExpression class * if required. * * You can optionally pass a single raw SQL string or an array or expressions in * any format accepted by \Cake\Database\Expression\QueryExpression: * * ``` * $expression = $query->newExpr(); // Returns an empty expression object * $expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression * ``` * * @param mixed $rawExpression A string, array or anything you want wrapped in an expression object * @return \Cake\Database\Expression\QueryExpression */ public function newExpr($rawExpression = null) { $expression = new QueryExpression([], $this->typeMap()); if ($rawExpression !== null) { $expression->add($rawExpression); } return $expression; }
/** * Test magic findAllByXX method. * * @return void */ public function testMagicFindAllOr() { $table = TableRegistry::get('Users'); $result = $table->findAllByAuthorIdOrPublished(1, 'Y'); $this->assertInstanceOf('Cake\\ORM\\Query', $result); $this->assertNull($result->clause('limit')); $expected = new QueryExpression(); $expected->typeMap()->defaults($this->usersTypeMap->toArray()); $expected->add(['or' => ['Users.author_id' => 1, 'Users.published' => 'Y']]); $this->assertEquals($expected, $result->clause('where')); $this->assertNull($result->clause('order')); }
/** * Test magic findAllByXX method. * * @return void */ public function testMagicFindAllOr() { $table = TableRegistry::get('Users'); $result = $table->findAllByAuthorIdOrPublished(1, 'Y'); $this->assertInstanceOf('Cake\\ORM\\Query', $result); $this->assertNull($result->clause('limit')); $expected = new QueryExpression(); $expected->typeMap()->defaults(['Users.id' => 'integer', 'id' => 'integer', 'Users.username' => 'string', 'username' => 'string', 'Users.password' => 'string', 'password' => 'string', 'Users.created' => 'timestamp', 'created' => 'timestamp', 'Users.updated' => 'timestamp', 'updated' => 'timestamp']); $expected->add(['or' => ['Users.author_id' => 1, 'Users.published' => 'Y']]); $this->assertEquals($expected, $result->clause('where')); $this->assertNull($result->clause('order')); }
/** * Tests the hasNestedExpression() function * * @return void */ public function testHasNestedExpression() { $expr = new QueryExpression(); $this->assertFalse($expr->hasNestedExpression()); $expr->add(['a' => 'b']); $this->assertTrue($expr->hasNestedExpression()); $expr = new QueryExpression(); $expr->add('a = b'); $this->assertFalse($expr->hasNestedExpression()); $expr->add(new QueryExpression('1 = 1')); $this->assertTrue($expr->hasNestedExpression()); }