@@ -73,7 +73,7 @@ class QueryParser
7373 * A list of supported queries
7474 * @var array
7575 */
76- private static $ supportedQueries = array ('select ' , 'insert ' , 'delete ' , 'replace ' , 'truncate ' , 'update ' );
76+ private static $ supportedQueries = array ('select ' , 'insert ' , 'delete ' , 'replace ' , 'truncate ' , 'update ' , ' count ' );
7777
7878 /**
7979 * Registered query operators
@@ -114,7 +114,10 @@ public function parse($query)
114114 }
115115
116116 // Checking query's parts validity
117- foreach (array_slice ($ queryParts , 1 ) as $ part ) {
117+ foreach (array_slice ($ queryParts , 1 ) as $ index => $ part ) {
118+ if (NULL === $ part || $ part === '' ) {
119+ throw new Exception ("JSONDB Query Parse Error: Unexpected \". \" after extension \"{$ queryParts [$ index ]}\". " );
120+ }
118121 if (FALSE === (bool )preg_match ('#\w+\(.*\)# ' , $ part )) {
119122 throw new Exception ("JSONDB Query Parse Error: There is an error at the extension \"{$ part }\". " );
120123 }
@@ -171,6 +174,14 @@ public function parse($query)
171174 case 'with ' :
172175 $ extensions ['with ' ] = $ this ->_parseWithExtension ($ string );
173176 break ;
177+
178+ case 'as ' :
179+ $ extensions ['as ' ] = $ this ->_parseAsExtension ($ string );
180+ break ;
181+
182+ case 'group ' :
183+ $ extensions ['group ' ] = $ this ->_parseGroupExtension ($ string );
184+ break ;
174185 }
175186 }
176187 $ this ->parsedQuery ['extensions ' ] = $ extensions ;
@@ -329,6 +340,43 @@ private function _parseWithExtension($clause)
329340 return (array )array_map (array (&$ this , '_parseValue ' ), $ parsedClause );
330341 }
331342
343+ /**
344+ * Parses a as() extension
345+ * @param string $clause
346+ * @return array
347+ * @throws Exception
348+ */
349+ private function _parseAsExtension ($ clause )
350+ {
351+ $ parsedClause = explode (', ' , $ clause );
352+ $ parsedClause = NULL !== $ parsedClause [0 ] ? $ parsedClause : array ();
353+ if (count ($ parsedClause ) === 0 ) {
354+ throw new Exception ("JSONDB Query Parse Error: At least one parameter expected for the \"as() \" extension. " );
355+ }
356+
357+ return $ parsedClause ;
358+ }
359+
360+ /**
361+ * Parses a group() extension
362+ * @param string $clause
363+ * @return array
364+ * @throws Exception
365+ */
366+ private function _parseGroupExtension ($ clause )
367+ {
368+ $ parsedClause = explode (', ' , $ clause );
369+ $ parsedClause = NULL !== $ parsedClause [0 ] ? $ parsedClause : array ();
370+ if (count ($ parsedClause ) === 0 ) {
371+ throw new Exception ("JSONDB Query Parse Error: At least one parameter expected for the \"as() \" extension. " );
372+ }
373+ if (count ($ parsedClause ) > 1 ) {
374+ throw new Exception ("JSONDB Query Parse Error: Too much parameters given to the \"group() \" extension, only one required. " );
375+ }
376+
377+ return $ parsedClause ;
378+ }
379+
332380 /**
333381 * Parses a value
334382 *
0 commit comments