/**
  * 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());
 }
Exemple #3
0
 /**
  * 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'));
 }
Exemple #5
0
 /**
  * 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());
 }