/** * {@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); }
/** * {@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(); }
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); } }
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()); } }