@@ -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