@@ -112,84 +112,79 @@ public static function parse(Parser $parser, TokensList $list, array $options =
112112 }
113113
114114 if ($ state === 0 ) {
115- if ($ token ->type === Token::TYPE_KEYWORD
116- && $ token ->keyword === 'WHEN '
117- ) {
118- ++$ list ->idx ; // Skip 'WHEN'
119- $ new_condition = Condition::parse ($ parser , $ list );
120- $ type = 1 ;
121- $ state = 1 ;
122- $ ret ->conditions [] = $ new_condition ;
123- } elseif ($ token ->type === Token::TYPE_KEYWORD
124- && $ token ->keyword === 'ELSE '
125- ) {
126- ++$ list ->idx ; // Skip 'ELSE'
127- $ ret ->else_result = Expression::parse ($ parser , $ list );
128- $ state = 0 ; // last clause of CASE expression
129- } elseif ($ token ->type === Token::TYPE_KEYWORD
130- && $ token ->keyword === 'END '
131- ) {
132- $ state = 3 ; // end of CASE expression
133- ++$ list ->idx ;
134- break ;
135- } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
136- $ parser ->error ('Unexpected keyword. ' , $ token );
137- break ;
115+ if ($ token ->type === Token::TYPE_KEYWORD ) {
116+ switch ($ token ->keyword ) {
117+ case 'WHEN ' :
118+ ++$ list ->idx ; // Skip 'WHEN'
119+ $ new_condition = Condition::parse ($ parser , $ list );
120+ $ type = 1 ;
121+ $ state = 1 ;
122+ $ ret ->conditions [] = $ new_condition ;
123+ break ;
124+ case 'ELSE ' :
125+ ++$ list ->idx ; // Skip 'ELSE'
126+ $ ret ->else_result = Expression::parse ($ parser , $ list );
127+ $ state = 0 ; // last clause of CASE expression
128+ break ;
129+ case 'END ' :
130+ $ state = 3 ; // end of CASE expression
131+ ++$ list ->idx ;
132+ break ;
133+ default :
134+ $ parser ->error ('Unexpected keyword. ' , $ token );
135+ break ;
136+ }
138137 } else {
139138 $ ret ->value = Expression::parse ($ parser , $ list );
140139 $ type = 0 ;
141140 $ state = 1 ;
142141 }
143142 } elseif ($ state === 1 ) {
144143 if ($ type === 0 ) {
145- if ($ token ->type === Token::TYPE_KEYWORD
146- && $ token ->keyword === 'WHEN '
147- ) {
148- ++$ list ->idx ; // Skip 'WHEN'
149- $ new_value = Expression::parse ($ parser , $ list );
150- $ state = 2 ;
151- $ ret ->compare_values [] = $ new_value ;
152- } elseif ($ token ->type === Token::TYPE_KEYWORD
153- && $ token ->keyword === 'ELSE '
154- ) {
155- ++$ list ->idx ; // Skip 'ELSE'
156- $ ret ->else_result = Expression::parse ($ parser , $ list );
157- $ state = 0 ; // last clause of CASE expression
158- } elseif ($ token ->type === Token::TYPE_KEYWORD
159- && $ token ->keyword === 'END '
160- ) {
161- $ state = 3 ; // end of CASE expression
162- ++$ list ->idx ;
163- break ;
164- } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
165- $ parser ->error ('Unexpected keyword. ' , $ token );
166- break ;
144+ if ($ token ->type === Token::TYPE_KEYWORD ) {
145+ switch ($ token ->keyword ) {
146+ case 'WHEN ' :
147+ ++$ list ->idx ; // Skip 'WHEN'
148+ $ new_value = Expression::parse ($ parser , $ list );
149+ $ state = 2 ;
150+ $ ret ->compare_values [] = $ new_value ;
151+ break ;
152+ case 'ELSE ' :
153+ ++$ list ->idx ; // Skip 'ELSE'
154+ $ ret ->else_result = Expression::parse ($ parser , $ list );
155+ $ state = 0 ; // last clause of CASE expression
156+ break ;
157+ case 'END ' :
158+ $ state = 3 ; // end of CASE expression
159+ ++$ list ->idx ;
160+ break ;
161+ default :
162+ $ parser ->error ('Unexpected keyword. ' , $ token );
163+ break ;
164+ }
167165 }
168- } else {
169- if ($ token ->type === Token::TYPE_KEYWORD
170- && $ token ->keyword === 'THEN '
171- ) {
166+ } else if ($ token ->type === Token::TYPE_KEYWORD ) {
167+ if ($ token ->keyword === 'THEN ' ) {
172168 ++$ list ->idx ; // Skip 'THEN'
173169 $ new_result = Expression::parse ($ parser , $ list );
174170 $ state = 0 ;
175171 $ ret ->results [] = $ new_result ;
176- } elseif ( $ token -> type === Token:: TYPE_KEYWORD ) {
172+ } else {
177173 $ parser ->error ('Unexpected keyword. ' , $ token );
178- break ;
179174 }
175+ break ;
180176 }
181177 } elseif ($ state === 2 ) {
182178 if ($ type === 0 ) {
183- if ($ token ->type === Token::TYPE_KEYWORD
184- && $ token ->keyword === 'THEN '
185- ) {
186- ++$ list ->idx ; // Skip 'THEN'
187- $ new_result = Expression::parse ($ parser , $ list );
188- $ ret ->results [] = $ new_result ;
189- $ state = 1 ;
190- } elseif ($ token ->type === Token::TYPE_KEYWORD ) {
191- $ parser ->error ('Unexpected keyword. ' , $ token );
192- break ;
179+ if ($ token ->type === Token::TYPE_KEYWORD ) {
180+ if ($ token ->keyword === 'THEN ' ) {
181+ ++$ list ->idx ; // Skip 'THEN'
182+ $ new_result = Expression::parse ($ parser , $ list );
183+ $ ret ->results [] = $ new_result ;
184+ $ state = 1 ;
185+ } else {
186+ $ parser ->error ('Unexpected keyword. ' , $ token );
187+ }
193188 }
194189 }
195190 }
0 commit comments