@@ -11,6 +11,7 @@ function buildSpaceString($length)
11
11
for ($ i = 0 ; $ i < $ length ; $ i ++) {
12
12
$ string .= ' ' ;
13
13
}
14
+
14
15
return $ string ;
15
16
}
16
17
@@ -24,13 +25,14 @@ function echoArrayAsString(array $elements, $tabLength)
24
25
{
25
26
$ tab = buildSpaceString ($ tabLength + 1 );
26
27
27
- $ elementsAsString = implode (' ' , $ elements );
28
+ $ elementsAsString = implode (' ' , $ elements );
28
29
$ commaSeparatedStrings = explode (', ' , $ elementsAsString );
29
30
30
31
$ length = count ($ commaSeparatedStrings );
31
32
32
33
if ($ length === 1 ) {
33
34
echo ' ' . $ commaSeparatedStrings [0 ] . PHP_EOL ;
35
+
34
36
return ;
35
37
}
36
38
@@ -94,41 +96,59 @@ function isSpecificDoubleKeyWord($word)
94
96
}
95
97
96
98
/**
99
+ * Attempt to gather words in 'SQL parts' (for ex. all SELECT all together)
100
+ *
97
101
* @param array $words
98
102
*
99
103
* @return array
100
104
*/
101
- function sortWords (array $ words )
105
+ function sortWordsInParts (array $ words )
102
106
{
103
- $ parts = array ();
104
-
105
- $ keyWord = 'SELECT ' ;
107
+ // variables init
108
+ $ parts = array ();
109
+ $ keyWord = '' ;
106
110
$ part = array ();
107
111
108
112
$ length = count ($ words );
109
113
110
114
for ($ i = 0 ; $ i < $ length ; $ i ++) {
111
115
112
116
$ currentWord = $ words [$ i ];
113
- $ nextWord = $ words [$ i + 1 ];
117
+
118
+ if ($ i == ($ length - 1 )) {
119
+ $ nextWord = '' ;
120
+ } else {
121
+ $ nextWord = $ words [$ i + 1 ];
122
+ }
123
+
114
124
$ doubleWord = $ currentWord . ' ' . $ nextWord ;
115
125
116
126
if (isSpecificSingleKeyWord ($ currentWord )) {
117
127
118
- $ parts [$ keyWord ] = $ part ;
119
- $ keyWord = $ currentWord ;
120
- $ part = array ();
128
+ // found key word: gather all previous words in a part
129
+
130
+ $ parts [] = [$ keyWord , $ part ];
131
+ $ keyWord = $ currentWord ;
132
+ $ part = array ();
121
133
} else if (isSpecificDoubleKeyWord ($ doubleWord )) {
122
- $ parts [$ keyWord ] = $ part ;
123
- $ keyWord = $ doubleWord ;
124
- $ part = array ();
134
+
135
+ // found key double word: gather all previous words in a part
136
+
137
+ $ parts [] = [$ keyWord , $ part ];
138
+ $ keyWord = $ doubleWord ;
139
+ $ part = array ();
140
+
141
+ // skip next word as it is part of the double word
125
142
$ i ++;
126
143
} else {
144
+
145
+ // keep adding words in the current part
146
+
127
147
$ part [] = $ currentWord ;
128
148
}
129
149
}
130
150
131
- $ parts [$ keyWord ] = $ part ;
151
+ $ parts [] = [ $ keyWord , $ part] ;
132
152
133
153
return $ parts ;
134
154
}
@@ -162,17 +182,21 @@ function validateInput($argv)
162
182
$ query = str_replace (array ("\r\n" , "\r" , "\n" ), " " , $ query );
163
183
164
184
$ words = explode (' ' , $ query );
165
- $ queryParts = sortWords ($ words );
185
+ $ queryParts = sortWordsInParts ($ words );
166
186
167
187
echo TextColorWriter::textColor ('QUERY ANALYSIS: ' , TextColorWriter::BASH_PROMPT_GREEN ) . PHP_EOL ;
168
188
169
- foreach ($ queryParts as $ key => $ part ) {
189
+ foreach ($ queryParts as $ part ) {
190
+ $ key = $ part [0 ];
191
+ $ content = $ part [1 ];
192
+
170
193
$ tabLength = strlen ($ key ) + 1 ;
171
194
172
- if (in_array ($ key , array ('AND ' ,'OR ' ))) {
195
+ if (in_array ($ key , array ('AND ' , 'OR ' ))) {
196
+ // additionnal space
173
197
echo ' ' ;
174
198
}
175
199
176
200
echo ' ' . TextColorWriter::textColor ($ key , TextColorWriter::BASH_PROMPT_YELLOW ) . ' ' ;
177
- echoArrayAsString ($ part , $ tabLength );
201
+ echoArrayAsString ($ content , $ tabLength );
178
202
}
0 commit comments