コード例 #1
0
 public static function selectDistinct(...$expressions)
 {
     $select = new SelectClause();
     $select->setDistinct(true);
     $select->addFields($expressions);
     $statement = static::_getQueryStatement();
     $statement->addClause($select);
     return $statement;
 }
コード例 #2
0
 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));
 }
コード例 #3
0
ファイル: QlDaoCollection.php プロジェクト: packaged/dal
 /**
  * Find all distinct values of a property in the collection
  *
  * @param $property
  *
  * @return array
  */
 public function distinct($property)
 {
     if ($this->isEmpty()) {
         $select = new SelectClause();
         $select->setDistinct(true);
         $select->addField($property);
         $originalClause = $this->_query->getClause('SELECT');
         $this->_query->addClause($select);
         $results = $this->_getDataStore()->getData($this->_query);
         $this->_query->addClause($originalClause);
         if (empty($results)) {
             return [];
         }
         return Arrays::ipull($results, $property);
     }
     return parent::distinct($property);
 }
コード例 #4
0
 public function testGettersAndSetters()
 {
     $clause = new SelectClause();
     $field = new FieldSelectExpression();
     $now = new NowSelectExpression();
     $this->assertFalse($clause->hasExpressions());
     $clause->addExpression($field);
     $this->assertTrue($clause->hasExpressions());
     $this->assertSame([$field], $clause->getExpressions());
     $clause->clearExpressions();
     $clause->setExpressions([$field, $now]);
     $this->assertTrue($clause->hasExpressions());
     $clause->clearExpressions();
     $this->assertFalse($clause->hasExpressions());
     $this->setExpectedException("InvalidArgumentException");
     $clause->setExpressions([$field, $now, 'abc']);
 }
コード例 #5
0
 public function assembleSelectClause(SelectClause $clause)
 {
     $return = $clause->getAction() . ($clause->isDistinct() ? ' DISTINCT' : '');
     if (!$clause->hasExpressions()) {
         return $return . ' *';
     }
     return $return . ' ' . implode(', ', $this->assembleSegments($clause->getExpressions()));
 }