summaryrefslogtreecommitdiffstats
path: root/src/Components/CaseExpression.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Components/CaseExpression.php')
-rw-r--r--src/Components/CaseExpression.php88
1 files changed, 43 insertions, 45 deletions
diff --git a/src/Components/CaseExpression.php b/src/Components/CaseExpression.php
index 820947b..19061db 100644
--- a/src/Components/CaseExpression.php
+++ b/src/Components/CaseExpression.php
@@ -112,29 +112,28 @@ class CaseExpression extends Component
}
if ($state === 0) {
- if ($token->type === Token::TYPE_KEYWORD
- && $token->keyword === 'WHEN'
- ) {
- ++$list->idx; // Skip 'WHEN'
- $new_condition = Condition::parse($parser, $list);
- $type = 1;
- $state = 1;
- $ret->conditions[] = $new_condition;
- } elseif ($token->type === Token::TYPE_KEYWORD
- && $token->keyword === 'ELSE'
- ) {
- ++$list->idx; // Skip 'ELSE'
- $ret->else_result = Expression::parse($parser, $list);
- $state = 0; // last clause of CASE expression
- } elseif ($token->type === Token::TYPE_KEYWORD
- && $token->keyword === 'END'
- ) {
- $state = 3; // end of CASE expression
- ++$list->idx;
- break;
- } elseif ($token->type === Token::TYPE_KEYWORD) {
- $parser->error('Unexpected keyword.', $token);
- break;
+ if ($token->type === Token::TYPE_KEYWORD) {
+ switch($token->keyword) {
+ case 'WHEN':
+ ++$list->idx; // Skip 'WHEN'
+ $new_condition = Condition::parse($parser, $list);
+ $type = 1;
+ $state = 1;
+ $ret->conditions[] = $new_condition;
+ break;
+ case 'ELSE':
+ ++$list->idx; // Skip 'ELSE'
+ $ret->else_result = Expression::parse($parser, $list);
+ $state = 0; // last clause of CASE expression
+ break;
+ case 'END':
+ $state = 3; // end of CASE expression
+ ++$list->idx;
+ break 2;
+ default:
+ $parser->error('Unexpected keyword.', $token);
+ break 2;
+ }
} else {
$ret->value = Expression::parse($parser, $list);
$type = 0;
@@ -142,28 +141,27 @@ class CaseExpression extends Component
}
} elseif ($state === 1) {
if ($type === 0) {
- if ($token->type === Token::TYPE_KEYWORD
- && $token->keyword === 'WHEN'
- ) {
- ++$list->idx; // Skip 'WHEN'
- $new_value = Expression::parse($parser, $list);
- $state = 2;
- $ret->compare_values[] = $new_value;
- } elseif ($token->type === Token::TYPE_KEYWORD
- && $token->keyword === 'ELSE'
- ) {
- ++$list->idx; // Skip 'ELSE'
- $ret->else_result = Expression::parse($parser, $list);
- $state = 0; // last clause of CASE expression
- } elseif ($token->type === Token::TYPE_KEYWORD
- && $token->keyword === 'END'
- ) {
- $state = 3; // end of CASE expression
- ++$list->idx;
- break;
- } elseif ($token->type === Token::TYPE_KEYWORD) {
- $parser->error('Unexpected keyword.', $token);
- break;
+ if ($token->type === Token::TYPE_KEYWORD) {
+ switch($token->keyword) {
+ case 'WHEN':
+ ++$list->idx; // Skip 'WHEN'
+ $new_value = Expression::parse($parser, $list);
+ $state = 2;
+ $ret->compare_values[] = $new_value;
+ break;
+ case 'ELSE':
+ ++$list->idx; // Skip 'ELSE'
+ $ret->else_result = Expression::parse($parser, $list);
+ $state = 0; // last clause of CASE expression
+ break;
+ case 'END':
+ $state = 3; // end of CASE expression
+ ++$list->idx;
+ break 2;
+ default:
+ $parser->error('Unexpected keyword.', $token);
+ break 2;
+ }
}
} else {
if ($token->type === Token::TYPE_KEYWORD