Skip to content

Commit 22038a8

Browse files
committed
Add extensions parser
Add parsers for on() and link() extensions.
1 parent 315a265 commit 22038a8

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/JSONDB/QueryParser.php

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,20 @@ public function parse($query)
185185
case 'group':
186186
$extensions['group'] = $this->_parseGroupExtension($string);
187187
break;
188+
189+
case 'on':
190+
if (!array_key_exists('on', $extensions)) {
191+
$extensions['on'] = array();
192+
}
193+
$extensions['on'][] = $this->_parseOnExtension($string);
194+
break;
195+
196+
case 'link':
197+
if (!array_key_exists('link', $extensions)) {
198+
$extensions['link'] = array();
199+
}
200+
$extensions['link'][] = $this->_parseLinkExtension($string);
201+
break;
188202
}
189203
}
190204
$this->parsedQuery['extensions'] = $extensions;
@@ -379,7 +393,7 @@ private function _parseGroupExtension($clause)
379393
}, explode(',', $clause));
380394
$parsedClause = NULL !== $parsedClause[0] ? $parsedClause : array();
381395
if (count($parsedClause) === 0) {
382-
throw new Exception("JSONDB Query Parse Error: At least one parameter expected for the \"as()\" extension.");
396+
throw new Exception("JSONDB Query Parse Error: At least one parameter expected for the \"group()\" extension.");
383397
}
384398
if (count($parsedClause) > 1) {
385399
throw new Exception("JSONDB Query Parse Error: Too much parameters given to the \"group()\" extension, only one required.");
@@ -388,6 +402,32 @@ private function _parseGroupExtension($clause)
388402
return $parsedClause;
389403
}
390404

405+
private function _parseOnExtension($clause)
406+
{
407+
$parsedClause = array_map(function($field) {
408+
return trim($field, self::TRIM_CHAR);
409+
}, explode(',', $clause));
410+
$parsedClause = NULL !== $parsedClause[0] ? $parsedClause : array();
411+
if (count($parsedClause) === 0) {
412+
throw new Exception("JSONDB Query Parse Error: At least one parameter expected for the \"on()\" extension.");
413+
}
414+
415+
return $parsedClause;
416+
}
417+
418+
private function _parseLinkExtension($clause)
419+
{
420+
$parsedClause = array_map(function($field) {
421+
return trim($field, self::TRIM_CHAR);
422+
}, explode(',', $clause));
423+
$parsedClause = NULL !== $parsedClause[0] ? $parsedClause : array();
424+
if (count($parsedClause) === 0) {
425+
throw new Exception("JSONDB Query Parse Error: At least one parameter expected for the \"link()\" extension.");
426+
}
427+
428+
return $parsedClause;
429+
}
430+
391431
/**
392432
* Parses a value
393433
*

0 commit comments

Comments
 (0)