22
33namespace SqlParser \Utils ;
44
5+ use SqlParser \Parser ;
56use SqlParser \Statement ;
67use SqlParser \Statements \AlterStatement ;
78use SqlParser \Statements \AnalyzeStatement ;
8- use SqlParser \Statement \CallStatement ;
9+ use SqlParser \Statements \CallStatement ;
910use SqlParser \Statements \CheckStatement ;
1011use SqlParser \Statements \ChecksumStatement ;
1112use SqlParser \Statements \CreateStatement ;
@@ -45,29 +46,54 @@ class Query
4546 * Gets an array with flags this statement has.
4647 *
4748 * @param Statement $statement
49+ * @param bool $all If `false`, false values will not be included.
4850 *
4951 * @return array
5052 */
51- public static function getFlags ($ statement )
53+ public static function getFlags ($ statement, $ all = false )
5254 {
5355 $ flags = array ();
54- // TODO: 'union', 'join', 'offset'
56+ if ($ all ) {
57+ $ flags = array (
58+ 'distinct ' => false ,
59+ 'drop_database ' => false ,
60+ 'is_affected ' => false ,
61+ 'is_analyse ' => false ,
62+ 'is_count ' => false ,
63+ 'is_delete ' => false ,
64+ 'is_explain ' => false ,
65+ 'is_export ' => false ,
66+ 'is_func ' => false ,
67+ 'is_group ' => false ,
68+ 'is_insert ' => false ,
69+ 'is_maint ' => false ,
70+ 'is_procedure ' => false ,
71+ 'is_replace ' => false ,
72+ 'is_select ' => false ,
73+ 'is_show ' => false ,
74+ 'is_subquery ' => false ,
75+ 'join ' => false ,
76+ 'offset ' => false ,
77+ 'reload ' => false ,
78+ 'select_from ' => false ,
79+ 'union ' => false
80+ );
81+ }
5582
83+ // TODO: 'union', 'join', 'offset'
5684 if (($ statement instanceof AlterStatement)
5785 || ($ statement instanceof CreateStatement)
5886 ) {
5987 $ flags ['reload ' ] = true ;
60- } else if ($ statement instanceof AnalyzeStatement) {
61- $ flags ['is_maint ' ] = true ;
62- $ flags ['is_analyze ' ] = true ;
63- } else if ($ statement instanceof CallStatement) {
64- $ flags ['is_procedure ' ] = true ;
65- } else if (($ statement instanceof CheckStatement)
88+ } else if (($ statement instanceof AnalyzeStatement)
89+ || ($ statement instanceof CheckStatement)
6690 || ($ statement instanceof ChecksumStatement)
6791 || ($ statement instanceof OptimizeStatement)
6892 || ($ statement instanceof RepairStatement)
6993 ) {
7094 $ flags ['is_maint ' ] = true ;
95+ } else if ($ statement instanceof CallStatement) {
96+ $ flags ['is_procedure ' ] = true ;
7197 } else if ($ statement instanceof DeleteStatement) {
7298 $ flags ['is_delete ' ] = true ;
7399 $ flags ['is_affected ' ] = true ;
@@ -88,6 +114,7 @@ public static function getFlags($statement)
88114 $ flags ['is_affected ' ] = true ;
89115 $ flags ['is_replace ' ] = true ;
90116 } else if ($ statement instanceof SelectStatement) {
117+ $ flags ['is_select ' ] = true ;
91118
92119 if (!empty ($ statement ->from )) {
93120 $ flags ['select_from ' ] = true ;
@@ -119,6 +146,12 @@ public static function getFlags($statement)
119146 $ flags ['is_subquery ' ] = true ;
120147 }
121148 }
149+
150+ if ((!empty ($ statement ->procedure ))
151+ && ($ statement ->procedure ->name === 'ANALYSE ' )
152+ ) {
153+ $ flags ['is_analyse ' ] = true ;
154+ }
122155 } else if ($ statement instanceof ShowStatement) {
123156 $ flags ['is_show ' ] = true ;
124157 } else if ($ statement instanceof UpdateStatement) {
@@ -128,4 +161,41 @@ public static function getFlags($statement)
128161 return $ flags ;
129162 }
130163
164+ /**
165+ * Parses a query and gets all information about it.
166+ *
167+ * @param string $query
168+ *
169+ * @return array
170+ */
171+ public static function getAll ($ query )
172+ {
173+ $ parser = new Parser ($ query );
174+
175+ if (!isset ($ parser ->statements [0 ])) {
176+ return array ();
177+ }
178+
179+ $ statement = $ parser ->statements [0 ];
180+
181+ $ ret = static ::getFlags ($ statement , true );
182+
183+ $ ret ['parser ' ] = $ parser ;
184+ $ ret ['statement ' ] = $ statement ;
185+
186+ if ($ statement instanceof SelectStatement) {
187+ $ ret ['tables ' ] = array ();
188+ foreach ($ statement ->expr as $ expr ) {
189+ if (!empty ($ expr ->table )) {
190+ $ ret ['tables ' ][] = array (
191+ $ expr ->table ,
192+ !empty ($ expr ->database ) ? $ expr ->database : null
193+ );
194+ }
195+ }
196+ }
197+
198+ return $ ret ;
199+ }
200+
131201}
0 commit comments