public function testRqlEncode() { $this->rqlString = "and(and(eq(q,null()),ne(q,null()),le(q,r),ge(q,u)),or(lt(q,t),gt(q,y),in(q,(a,s,d,f,g))))"; $this->rqlString .= "&limit(20,30)"; $this->rqlString .= "&sort(-q,+w,+e)"; $this->rqlString .= "&select(q,max(q),min(q),count(q))"; $rqlString = RqlParser::rqlEncode($this->queryObject); $this->assertEquals($rqlString, $this->rqlString); }
public function decode($rqlQueryString) { $rqlQueryString = RqlParser::prepare_rql_string($rqlQueryString); $queryTokenParser = new TokenParserGroup(); $queryTokenParser->addTokenParser(new TokenParser\Query\GroupTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\LogicOperator\AndTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\LogicOperator\OrTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\LogicOperator\NotTokenParser($queryTokenParser))->addTokenParser(new TokenParser\Query\Basic\ArrayOperator\InTokenParser())->addTokenParser(new TokenParser\Query\Basic\ArrayOperator\OutTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\EqTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\NeTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\LtTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\GtTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\LeTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\GeTokenParser())->addTokenParser(new TokenParser\Query\Basic\ScalarOperator\LikeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ArrayOperator\InTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ArrayOperator\OutTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\EqTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\NeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\LtTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\GtTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\LeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\GeTokenParser())->addTokenParser(new TokenParser\Query\Fiql\ScalarOperator\LikeTokenParser())->addTokenParser(new Fiql\ScalarOperator\MatchTokenParser())->addTokenParser(new Basic\ScalarOperator\MatchTokenParser()); $parser = (new Parser((new ExpressionParser())->registerTypeCaster('string', new TypeCaster\StringTypeCaster())->registerTypeCaster('integer', new TypeCaster\IntegerTypeCaster())->registerTypeCaster('float', new TypeCaster\FloatTypeCaster())->registerTypeCaster('boolean', new TypeCaster\BooleanTypeCaster())))->addTokenParser(new SelectTokenParser($this->allowedAggregateFunction))->addTokenParser($queryTokenParser)->addTokenParser(new TokenParser\SortTokenParser())->addTokenParser(new TokenParser\LimitTokenParser()); $rqlQueryObject = $parser->parse((new Lexer())->tokenize($rqlQueryString)); return $rqlQueryObject; }
/** * Tick callback which called from Ticker * * @param $tickId * @param $step * @throws SchedulerException * @throws \zaboy\scheduler\Callback\CallbackException */ public function processTick($tickId, $step) { $rqlParser = new RqlParser(); foreach ($this->filters as $filter) { // Parses rql-query expression $rqlQueryObject = $rqlParser->decode($filter['rql']); // Step value determined in Timeline DataStore if ($this->timelineDs->determineStep($rqlQueryObject) < $step) { throw new SchedulerException("The step determined from query to timeline DataStore is less than step given from Ticker"); } // Adds time limits and executes query to timeline $rqlQueryObject = $this->addTickLimit($rqlQueryObject, $tickId, $step); $matches = $this->timelineDs->query($rqlQueryObject); // If mathces were found runs their callbacks if (count($matches)) { /** @var CallbackInterface $instance */ $instance = $this->callbackManager->get($filter['callback']); $instance->call(['tick_id' => $tickId, 'step' => $step]); } } }
/** Location: http://www.example.com/users/4/ * * @todo positionHeaders = 'beforeId' 'Put-Default-Position' 'Put-Default-Position' * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable|null $next * @return ResponseInterface */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null) { // @see https://github.com/SitePen/dstore/blob/21129125823a29c6c18533e7b5a31432cf6e5c56/src/Rest.js $overwriteModeHeader = $request->getHeader('If-Match'); $overwriteMode = isset($overwriteModeHeader[0]) && $overwriteModeHeader[0] === '*' ? true : false; $request = $request->withAttribute('Overwrite-Mode', $overwriteMode); $putDefaultPosition = $request->getHeader('Put-Default-Position'); //'start' : 'end' if (isset($putDefaultPosition)) { $request = $request->withAttribute('Put-Default-Position', $putDefaultPosition); } // @see https://github.com/SitePen/dstore/issues/42 $putBeforeHeader = $request->getHeader('Put-Before'); $putBefore = !empty($putBeforeHeader); $request = $request->withAttribute('Put-Before', $putBefore); $rqlQueryStringWithXdebug = $request->getUri()->getQuery(); $rqlQueryString = rtrim($rqlQueryStringWithXdebug, '&XDEBUG_SESSION_START=netbeans-xdebug'); $rqlQueryObject = RqlParser::rqlDecode($rqlQueryString); $request = $request->withAttribute('Rql-Query-Object', $rqlQueryObject); $headerLimit = $request->getHeader('Range'); if (isset($headerLimit) && is_array($headerLimit) && count($headerLimit) > 0) { $match = []; preg_match("/^items=([0-9]+)\\-?([0-9]+)?/", $headerLimit[0], $match); if (count($match) > 0) { $limit = []; if (isset($match[2])) { $limit['offset'] = $match[1]; $limit['limit'] = $match[2]; } else { $limit['limit'] = $match[1]; } $request = $request->withAttribute("Limit", $limit); } } $contenttypeArray = $request->getHeader('Content-Type'); $contenttype = isset($contenttypeArray[0]) ? $contenttypeArray[0] : 'text/html'; if (false !== strpos($contenttype, 'json')) { $body = !empty($request->getBody()->__toString()) ? $this->jsonDecode($request->getBody()->__toString()) : null; $request = $request->withParsedBody($body); } elseif ($contenttype === 'text/plain' or $contenttype === 'text/html' or $contenttype === 'application/x-www-form-urlencoded') { $body = !empty($request->getBody()->__toString()) ? $request->getBody()->__toString() : null; $request = $request->withParsedBody($body); } else { //todo XML? throw new RestException('Unknown Content-Type header - ' . $contenttype); } if ($next) { return $next($request, $response); } return $response; }
public function test_compareTimelinesWithQuery() { $from = UTCTime::getUTCTimestamp(0); $timeline = []; // step is 3 seconds $rql = "and(or(eq(seconds,"; for ($i = 0; $i < 15; $i += 3) { $dateInfo = $this->object->read($from + $i); $timeline[] = $dateInfo; $rql .= $dateInfo['seconds']; $rql .= "),eq(seconds,"; } $rql = rtrim($rql, "),eq(seconds,") . ")),ge(timestamp," . $from . "))&limit(5,0)"; $rqlQueryObject = $this->rqlParser->rqlDecoder($rql); $timelineDsRows = $this->object->query($rqlQueryObject); $this->assertEquals($timeline, $timelineDsRows); }
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; } } } } }
/** * * @param string 'GET' 'HEAD' 'POST' 'PUT' 'DELETE'; * @param Query $query * @param int|string $id * @param bool see $ifMatch $rewriteIfExist and $createIfAbsent in {@see DataStoreAbstract} * @return Client */ protected function initHttpClient($method, Query $query = null, $id = null, $ifMatch = false) { $url = !$id ? $this->url : $this->url . '/' . $this->encodeString($id); if (isset($query)) { $rqlString = RqlParser::rqlEncode($query); $url = $url . '?' . $rqlString; } $httpClient = new Client($url, $this->options); $headers['Content-Type'] = 'application/json'; $headers['Accept'] = 'application/json'; if ($ifMatch) { $headers['If-Match'] = '*'; } $httpClient->setHeaders($headers); if (isset($this->login) && isset($this->password)) { $httpClient->setAuth($this->login, $this->password); } $httpClient->setMethod($method); return $httpClient; }
public function setSchedule(Query $query) { $rqlParser = new RqlParser(); $this->data['schedule'] = $rqlParser->encode($query); return $this->data; }
/** * Translates the "query" call to DataStore * * @see \zaboy\scheduler\Callback\Factory\DataStoreAbstractFactory * @see \zaboy\rest\DataStore\Interfaces\DataStoresInterface * @param array $options * @return array | \zaboy\rest\DataStore\Interfaces\DataStoresInterface array * @throws CallbackException */ private function query(array $options = []) { $itemData = $options['item_data']; if (!isset($itemData['query'])) { throw new CallbackException("Expected necessary parameter \"query\" in the options array"); } $parser = new RqlParser(); $query = $parser->rqlDecoder($itemData['query']); return $this->dataStore->query($query); }
protected function methodPatchWithId(Request $request, Response $response) { $cdsId = $request->getAttribute('Primary-Key-Value'); $cdsConf = $this->getCdsConf($cdsId); if (empty($cdsConf)) { throw new \Exception("this cds id not found"); } if ($cdsConf['query'] !== '') { $query = RqlParser::rqlDecode($cdsConf['query']); } else { $query = new Query(); } $data = $this->getData($cdsConf['script_name'], $query); $query = new Query(); $query->setQuery(new EqNode('cds_id', $cdsId)); $items = $this->cds->query($query); foreach ($items as $item) { $this->cds->delete($item['id']); } foreach ($data as &$item) { $item['cds_id'] = $cdsId; $item['data_id'] = $item['id']; unset($item['id']); } $this->cds->create($data); $this->cdsManagerStore->update(['id' => $cdsConf['id'], 'freshness_date' => (new \DateTime())->format("Y-m-d H:i:s")]); $request = $request->withAttribute('CDS-ID', $cdsId); $request = $request->withAttribute('Response-Body', ['cdsId' => $cdsId]); $response = $response->withStatus(200); return array($request, $response); }
//foreach ($list as $value) { // // $dataStore->addMessageId($value); //} //exit; //$list = $apiGmail->queryMessagesList(); //$list = $apiGmail->getMessagesList(); //$list = $apiGmail->queryMessagesList(); //$rqlQueryString = 'select(id)'; //$query = RqlParser::rqlDecode($rqlQueryString); //$listStore = $dataStore->query($query); //array_diff() //D:\OpenServer\modules\wget\bin\wget.exe -q --no-cache http://zaboy-utils/index.php //var_dump($apiGmail->getBodyTxt($list[8])); $i = 0; $rqlQueryString = 'eq(sending_time,null)&limit(50)'; $query = RqlParser::rqlDecode($rqlQueryString); $nextItems = $dataStore->query($query); foreach ($nextItems as $value) { //$i = $i + 1; $id = $value["id"]; $dataStore->addMessageData($id); echo $id . ' <br> '; // if (round($i / 100) === $i / 100) { // echo $i . ' <br> '; // } } exit; //$dataStore->addMessage($list[0]); // Create a DOM object from a string //$htmlParserSimple = new HtmlParserSimple; //$html = HtmlParserSimple::strGetHtml('<html><body>Hello!</body></html>');