コード例 #1
0
 public function testBoolean()
 {
     $this->create();
     foreach (DBTestPool::me()->getPool() as $connector => $db) {
         DBPool::me()->setDefault($db);
         //creating moscow
         $moscow = TestCity::create()->setName('Moscow');
         $moscow = $moscow->dao()->add($moscow);
         $moscowId = $moscow->getId();
         /* @var $moscow TestCity */
         //now moscow capital
         $moscow->dao()->merge($moscow->setCapital(true));
         TestCity::dao()->dropIdentityMap();
         Criteria::create(TestCity::dao())->setSilent(false)->add(Expression::isTrue('capital'))->get();
         TestCity::dao()->dropIdentityMap();
         $moscow = Criteria::create(TestCity::dao())->setSilent(false)->add(Expression::isNull('large'))->get();
         TestCity::dao()->dropIdentityMap();
         //now moscow large
         $moscow = $moscow->dao()->merge($moscow->setLarge(true));
         TestCity::dao()->dropIdentityMap();
         $moscow = TestCity::dao()->getById($moscowId);
         $this->assertTrue($moscow->getCapital());
         $this->assertTrue($moscow->getLarge());
         Criteria::create(TestCity::dao())->setSilent(false)->add(Expression::not(Expression::isFalse('large')))->get();
         TestCity::dao()->dropIdentityMap();
     }
     $this->drop();
 }
コード例 #2
0
 /**
  * @throws WrongArgumentException
  * @return LogicalChain
  **/
 public static function getOpenPoint($left, $right, $point)
 {
     Assert::isFalse($point === null, 'how can i build logic from emptyness?');
     $point = new DBValue($point);
     $chain = new LogicalChain();
     $chain->expOr(Expression::orBlock(Expression::andBlock(Expression::notNull($left), Expression::notNull($right), Expression::between($point, $left, $right)), Expression::andBlock(Expression::isNull($left), Expression::ltEq($point, $right)), Expression::andBlock(Expression::isNull($right), Expression::ltEq($left, $point)), Expression::andBlock(Expression::isNull($left), Expression::isNull($right))));
     return $chain;
 }
コード例 #3
0
 public function testBaseSqlGeneration()
 {
     $dialect = ImaginaryDialect::me();
     $pgDialect = $this->getDbByType('PgSQL')->getDialect();
     $this->assertRegExp('/^\\(a (AND|and) b\\)$/', Expression::expAnd('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a (OR|or) b\\)$/', Expression::expOr('a', 'b')->toDialectString($dialect));
     $this->assertEquals(Expression::eq('a', 'b')->toDialectString($dialect), '(a = b)');
     $some = IdentifiableObject::wrap(123);
     $this->assertEquals(Expression::eqId('a', $some)->toDialectString($dialect), '(a = 123)');
     $this->assertEquals(Expression::notEq('a', 'b')->toDialectString($dialect), '(a != b)');
     $this->assertEquals(Expression::gt('a', 'b')->toDialectString($dialect), '(a > b)');
     $this->assertEquals(Expression::gtEq('a', 'b')->toDialectString($dialect), '(a >= b)');
     $this->assertEquals(Expression::lt('a', 'b')->toDialectString($dialect), '(a < b)');
     $this->assertEquals(Expression::ltEq('a', 'b')->toDialectString($dialect), '(a <= b)');
     $this->assertRegExp('/^\\(a ((IS NOT NULL)|(is not null)) *\\)$/', Expression::notNull('a')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((IS NULL)|(is null)) *\\)$/', Expression::isNull('a')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((IS TRUE)|(is true)) *\\)$/', Expression::isTrue('a')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((IS FALSE)|(is false)) *\\)$/', Expression::isFalse('a')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a (LIKE|like) b\\)$/', Expression::like('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((NOT LIKE)|(not like)) b\\)$/', Expression::notLike('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a (ILIKE|ilike) b\\)$/', Expression::ilike('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((NOT ILIKE)|(not like)) b\\)$/', Expression::notIlike('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((SIMILAR TO)|(similar to)) b\\)$/', Expression::similar('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((NOT SIMILAR TO)|(not similar to)) b\\)$/', Expression::notSimilar('a', 'b')->toDialectString($dialect));
     $this->assertEquals('(lower(a) = b)', Expression::eqLower('a', 'b')->toDialectString($dialect));
     $this->assertEquals('(lower(a) = lower(b))', Expression::eqLower(new DBValue('a'), new DBValue('b'))->toDialectString($dialect));
     $this->assertEquals('(lower(\'a\') = lower(\'b\'))', Expression::eqLower(new DBValue('a'), new DBValue('b'))->toDialectString($pgDialect));
     $this->assertEquals('(lower(\'a\') = lower("b"))', Expression::eqLower(new DBValue('a'), new DBField('b'))->toDialectString($pgDialect));
     $this->assertEquals('(lower("a") = lower(\'b\'))', Expression::eqLower(new DBField('a'), new DBValue('b'))->toDialectString($pgDialect));
     $this->assertRegExp('/^\\(a (BETWEEN|between) b (AND|and) c\\)$/', Expression::between('a', 'b', 'c')->toDialectString($dialect));
     $this->assertEquals('(a = 123)', Expression::in('a', 123)->toDialectString($dialect));
     $this->assertEquals('(a = 123)', Expression::in('a', array(123))->toDialectString($dialect));
     $this->assertRegExp('/^\\(a (in|IN) \\(123, 456\\)\\)$/', Expression::in('a', array(123, 456))->toDialectString($dialect));
     $this->assertEquals('(a != 123)', Expression::notIn('a', 123)->toDialectString($dialect));
     $this->assertEquals('(a != 123)', Expression::notIn('a', array(123))->toDialectString($dialect));
     $this->assertRegExp('/^\\(a ((not in)|(NOT IN)) \\(123, 456\\)\\)$/', Expression::notIn('a', array(123, 456))->toDialectString($dialect));
     $this->assertEquals('(a + b)', Expression::add('a', 'b')->toDialectString($dialect));
     $this->assertEquals('(a - b)', Expression::sub('a', 'b')->toDialectString($dialect));
     $this->assertEquals('(a * b)', Expression::mul('a', 'b')->toDialectString($dialect));
     $this->assertEquals('(a / b)', Expression::div('a', 'b')->toDialectString($dialect));
     $this->assertRegExp('/^\\(a (between|BETWEEN) b (and|AND) c\\)$/', Expression::between('a', 'b', 'c')->toDialectString($dialect));
     $this->assertEquals('(-1 IS NULL)', Expression::isNull(-1)->toDialectString($dialect));
     $this->assertEquals('(NOT a)', Expression::not('a')->toDialectString($dialect));
     $this->assertEquals('(- a)', Expression::minus('a')->toDialectString($dialect));
     try {
         Expression::eq('id', null)->toDialectString($dialect);
         $this->fail();
     } catch (WrongArgumentException $e) {
         //it's Ok
     }
 }
コード例 #4
0
 public static function orderDataProvider()
 {
     return array(array(OrderBy::create('id'), 'test_user.id'), array(OrderChain::create()->add(OrderBy::create('id')->asc())->add(OrderBy::create('id')), 'test_user.id ASC, test_user.id'), array(OrderBy::create('id')->asc(), 'test_user.id ASC'), array(OrderBy::create('id')->desc(), 'test_user.id DESC'), array(OrderBy::create('id')->nullsFirst(), 'test_user.id NULLS FIRST'), array(OrderBy::create('id')->nullsLast(), 'test_user.id NULLS LAST'), array(OrderBy::create('id')->asc()->nullsLast(), 'test_user.id ASC NULLS LAST'), array(OrderBy::create('id')->desc()->nullsFirst(), 'test_user.id DESC NULLS FIRST'), array(OrderBy::create(Expression::isNull('id'))->asc()->nullsFirst(), '((test_user.id IS NULL)) ASC NULLS FIRST'));
 }
コード例 #5
0
 public function testOrderBy()
 {
     $this->assertCriteria('from TestUser order by id', Criteria::create(TestUser::dao())->addOrder(OrderBy::create('id')))->assertCriteria('from TestUser order by id asc, nickname desc', Criteria::create(TestUser::dao())->addOrder(OrderChain::create()->add(OrderBy::create('id')->asc())->add(OrderBy::create('nickname')->desc())))->assertCriteria('from TestUser order by $1, nickname is null, -id/2 + 1 asc ', Criteria::create(TestUser::dao())->addOrder(OrderChain::create()->add(OrderBy::create(SQLFunction::create('rand')))->add(OrderBy::create(Expression::isNull('nickname')))->add(OrderBy::create(Expression::add(Expression::div(Expression::minus('id'), 2), 1))->asc())), array(1 => SQLFunction::create('rand')));
 }