protected function preQuery(Query &$query) { $scriptNameNode = new EqNode('scriptName', $this->scriptName); if ($query->getQuery()) { $query->setQuery(new AndNode([$scriptNameNode, $query->getQuery()])); } else { $query->setQuery($scriptNameNode); } }
/** * @param AbstractQueryNode $query * @return $this */ public function addQuery(AbstractQueryNode $query) { $current = $this->query->getQuery(); if ($current === null) { $this->query->setQuery($query); } elseif ($current instanceof AndNode) { $current->addQuery($query); } else { $this->query->setQuery(new AndNode([$current, $query])); } return $this; }
/** * Adds limits to query for limiting time range * * @param Query $query * @param $tickId * @param $step * @return Query */ protected function addTickLimit(Query $query, $tickId, $step) { $field = $step < 1 ? 'id' : 'timestamp'; $andNode = new LogicOperator\AndNode([$query->getQuery(), new ScalarOperator\GeNode($field, $tickId), new ScalarOperator\LtNode($field, $tickId + $step)]); $query->setQuery($andNode); return $query; }
protected function postQuery(&$result, Query $query) { if ($query->getQuery()) { if (count($result) === 0) { $queryStr = urldecode(RqlParser::rqlEncode($query)); $pattern = '/^and\\(eq\\(tableName\\,([a-zA-Z0-9_]+)\\)\\,eq\\(name\\,_default\\)\\)/'; $match = []; if (preg_match($pattern, $queryStr, $match)) { $requestName = isset($match[1]) ? $match[1] : ""; $configuration = $this->configureGeneratorFactory->__invoke($requestName)->getConfiguration(); $res = ['table_name' => $requestName, 'name' => '_default', 'preference' => json_encode($configuration)]; foreach ($res as $key => $item) { $result[0][$key] = $item; } } } } }
/** * {@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 queryWhere(Query $query, $limit, $offset) { $conditionBuilder = $this->conditionBuilder; $conditioon = $conditionBuilder($query->getQuery()); $whereFunctionBody = PHP_EOL . '$result = ' . PHP_EOL . rtrim($conditioon, PHP_EOL) . ';' . PHP_EOL . 'return $result;'; $whereFunction = create_function('$item', $whereFunctionBody); $suitableItemsNumber = 0; $result = []; foreach ($this as $value) { switch (true) { case !$whereFunction($value): break; // skip! // skip! case $suitableItemsNumber < $offset: $suitableItemsNumber = $suitableItemsNumber + 1; break; // increment! // increment! case $limit != self::LIMIT_INFINITY && $suitableItemsNumber >= $limit + $offset: return $result; //enough! //enough! default: $result[] = $value; // write! $suitableItemsNumber = $suitableItemsNumber + 1; } } return $result; }
/** * Determines step size from rql query finding all time labels and find min weight from them * @param Query $query * @throws TimelineDataStoreException */ public function determineStep(Query $query) { // TODO: When Query-class will have a method which will build rql-string from rql-object this vethod will require refactoring $timeWeights = $this->collectAllTimeWeights($query->getQuery()); if (!count($timeWeights)) { $step = self::DEFAULT_STEP; } else { $step = min($timeWeights); } return $step; }
public function encode(Query $query) { $conditionBuilder = $this->conditionBuilder; $rqlQueryString = $conditionBuilder($query->getQuery()); $rqlQueryString = $rqlQueryString . $this->makeLimit($query); $rqlQueryString = $rqlQueryString . $this->makeSort($query); $rqlQueryString = $rqlQueryString . $this->makeSelect($query); return ltrim($rqlQueryString, '&'); }
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); } }
public function getSqlQuery(Query $query) { $conditionBuilder = new SqlConditionBuilder($this->dbTable->getAdapter(), $this->dbTable->getTable()); $selectSQL = $this->dbTable->getSql()->select(); $selectSQL->where($conditionBuilder($query->getQuery())); $selectSQL = $this->setSelectOrder($selectSQL, $query); $selectSQL = $this->setSelectLimitOffset($selectSQL, $query); $selectSQL = $this->setSelectColumns($selectSQL, $query); $selectSQL = $this->setSelectJoin($selectSQL, $query); $selectSQL = $this->makeExternalSql($selectSQL); //build sql string $sql = $this->dbTable->getSql()->buildSqlString($selectSQL); //replace double ` char to single. $sql = str_replace(["`(", ")`", "``"], ['(', ')', "`"], $sql); return $sql; }
protected function getData($scriptName, Query $query) { $reqQuery = new Query(); if ($query->getQuery() !== null) { $reqQuery->setQuery(new AndNode([new EqNode('scriptName', $scriptName), $query->getQuery()])); } else { $reqQuery->setQuery(new EqNode('scriptName', $scriptName)); } return $this->dataStore->query($reqQuery); }
/** * build a querybuilder from the AST * * @param Query|Node $query or node * @param bool $expr wrap in expr? * * @return Builder|Expr */ private function recurse($query, $expr = false) { if ($expr) { $node = $query; } else { $node = $query->getQuery(); } list($node, $this->builder) = $this->dispatchNodeEvent($node); if ($query instanceof Query) { $this->visitQuery($query); } if (in_array(get_class($node), array_keys($this->internalMap))) { $method = $this->internalMap[get_class($node)]; return $this->{$method}($node, $expr); } elseif ($node instanceof AbstractScalarOperatorNode) { return $this->visitScalar($node, $expr); } elseif ($node instanceof AbstractArrayOperatorNode) { return $this->visitArray($node, $expr); } elseif ($node instanceof AbstractLogicOperatorNode) { $method = $this->queryMap[get_class($node)]; return $this->visitLogic($method, $node, $expr); } return $this->builder; }
public function getSqlQuery(Query $query) { $conditionBuilder = new SqlConditionBuilder($this->dbTable->getAdapter(), $this->dbTable->getTable()); $selectSQL = $this->dbTable->getSql()->select(); $selectSQL->where($conditionBuilder($query->getQuery())); $selectSQL = $this->setSelectOrder($selectSQL, $query); $selectSQL = $this->setSelectLimitOffset($selectSQL, $query); $selectSQL = $this->setSelectColumns($selectSQL, $query); $selectSQL = $this->setSelectJoin($selectSQL, $query); $fields = $selectSQL->getRawState(Select::COLUMNS); if (isset($fields['.bounds.'])) { unset($fields['.bounds.']); if (empty($fields)) { $fields = [Select::SQL_STAR]; } $selectSQL->columns($fields); } $selectSQL = $this->makeExternalSql($selectSQL); //build sql string $sql = $this->dbTable->getSql()->buildSqlString($selectSQL); //replace double ` char to single. $sql = str_replace(["`(", ")`", "``"], ['(', ')', "`"], $sql); return $sql; }
/** * @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()); } }