Beispiel #1
0
 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);
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 /**
  * 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]);
         }
     }
 }
Beispiel #4
0
 /**                         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;
                 }
             }
         }
     }
 }
Beispiel #7
0
 /**
  *
  * @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;
 }
Beispiel #8
0
 public function setSchedule(Query $query)
 {
     $rqlParser = new RqlParser();
     $this->data['schedule'] = $rqlParser->encode($query);
     return $this->data;
 }
Beispiel #9
0
 /**
  * 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);
 }
Beispiel #11
0
//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>');