示例#1
0
 /**
  * {@inheritdoc}
  *
  * {@inheritdoc}
  */
 public function query(Query $query)
 {
     $limitNode = $query->getLimit();
     $limit = !$limitNode ? self::LIMIT_INFINITY : $query->getLimit()->getLimit();
     $offset = !$limitNode ? 0 : $query->getLimit()->getOffset();
     if (isset($limitNode) && $query->getSort() !== null) {
         $data = $this->queryWhere($query, self::LIMIT_INFINITY, 0);
         $sortedData = $this->querySort($data, $query);
         $result = array_slice($sortedData, $offset, $limit == self::LIMIT_INFINITY ? null : $limit);
     } else {
         $data = $this->queryWhere($query, $limit, $offset);
         $result = $this->querySort($data, $query);
     }
     return $this->querySelect($result, $query);
 }
示例#2
0
 /**
  * {@inheritdoc}
  *
  * {@inheritdoc}
  */
 public function query(Query $query)
 {
     $limits = $query->getLimit();
     $limit = !$limits ? self::LIMIT_INFINITY : $query->getLimit()->getLimit();
     $offset = !$limits ? 0 : $query->getLimit()->getOffset();
     $sort = $query->getSort();
     $sortFilds = !$sort ? [$this->getIdentifier() => SortNode::SORT_ASC] : $sort->getFields();
     $select = $query->getSelect();
     //What filds will return
     $selectFilds = !$select ? [] : $select->getFields();
     $selectSQL = $this->dbTable->getSql()->select();
     // ***********************   where   ***********************
     $conditionBuilder = $this->conditionBuilder;
     $where = $conditionBuilder($query->getQuery());
     $selectSQL->where($where);
     // ***********************   order   ***********************
     foreach ($sortFilds as $ordKey => $ordVal) {
         if ((int) $ordVal === SortNode::SORT_DESC) {
             $selectSQL->order($ordKey . ' ' . Select::ORDER_DESCENDING);
         } else {
             $selectSQL->order($ordKey . ' ' . Select::ORDER_ASCENDING);
         }
     }
     // *********************  limit, offset   ***********************
     if ($limit != self::LIMIT_INFINITY) {
         $selectSQL->limit($limit);
     }
     if ($offset != 0) {
         $selectSQL->offset($offset);
     }
     // *********************  filds  ***********************
     if (!empty($selectFilds)) {
         $selectSQL->columns($selectFilds);
     }
     // ***********************   return   ***********************
     $rowset = $this->dbTable->selectWith($selectSQL);
     return $rowset->toArray();
 }
示例#3
0
 protected function makeLimit(Query $query)
 {
     $limitNode = $query->getLimit();
     $limit = !$limitNode ? DataStoreAbstract::LIMIT_INFINITY : $limitNode->getLimit();
     $offset = !$limitNode ? 0 : $limitNode->getOffset();
     if ($limit == DataStoreAbstract::LIMIT_INFINITY && $offset == 0) {
         return '';
     } else {
         return sprintf('&limit(%s,%s)', $limit, $offset);
     }
 }
 public function visit(Query $query, SqlBuilder $sqlBuilder)
 {
     if ($query->getSelect() !== null) {
         $this->visitSelectNode($query->getSelect(), $sqlBuilder);
     }
     if ($query->getQuery() !== null) {
         $this->visitQueryNode($query->getQuery(), $sqlBuilder);
     }
     if ($query->getSort() !== null) {
         $this->visitSortNode($query->getSort(), $sqlBuilder);
     }
     if ($query->getLimit() !== null) {
         $this->visitLimitNode($query->getLimit(), $sqlBuilder);
     }
 }
示例#5
0
 protected function setSelectLimitOffset(Select $selectSQL, Query $query)
 {
     $limits = $query->getLimit();
     $limit = !$limits ? self::LIMIT_INFINITY : $limits->getLimit();
     $offset = !$limits ? 0 : $limits->getOffset();
     if ($limit != self::LIMIT_INFINITY) {
         $selectSQL->limit($limit);
     }
     if ($offset != 0) {
         $selectSQL->offset($offset);
     }
     return $selectSQL;
 }
 /**
  * @param Query $query top level query that needs visiting
  *
  * @return void
  */
 public function visitQuery(Query $query)
 {
     if ($query->getSort()) {
         $this->visitSort($query->getSort());
     }
     if ($query->getLimit()) {
         $this->visitLimit($query->getLimit());
     }
 }
 /**
  * @param \Xiag\Rql\Parser\Query $query
  *
  * @throws \AndreasGlaser\DoctrineRql\Visitor\VisitorException
  * @author Andreas Glaser
  */
 protected function visitQuery(RqlQuery $query)
 {
     if ($selectNode = $query->getSelect()) {
         // todo: Implement this
     }
     if ($abstractQueryNode = $query->getQuery()) {
         $this->qb->andWhere($this->walkNodes($abstractQueryNode));
     }
     if ($query->getSort()) {
         $this->visitSort($query->getSort());
     }
     if ($query->getLimit()) {
         $this->visitLimit($query->getLimit());
     }
 }