summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Mostert <mostertb@users.noreply.github.com>2018-10-13 15:44:29 +0200
committerBrad Mostert <mostertb@users.noreply.github.com>2018-10-13 15:44:29 +0200
commitf72a44cfd6266e9448e43bf7c1dcf759ea693a72 (patch)
tree0060c8220c3b3d1210d482f1ec96acb1103be258
parentf2127a175835f25e4936bb08698a812841a3915d (diff)
downloadsql-parser-f72a44cfd6266e9448e43bf7c1dcf759ea693a72.zip
sql-parser-f72a44cfd6266e9448e43bf7c1dcf759ea693a72.tar.gz
sql-parser-f72a44cfd6266e9448e43bf7c1dcf759ea693a72.tar.bz2
Explicitly handle case where keyword encountered before alias value found
-rw-r--r--src/Components/CaseExpression.php18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/Components/CaseExpression.php b/src/Components/CaseExpression.php
index 364b7d7..7f6af8c 100644
--- a/src/Components/CaseExpression.php
+++ b/src/Components/CaseExpression.php
@@ -227,10 +227,7 @@ class CaseExpression extends Component
&& $token->keyword === 'AS'){
if ($asFound || !empty($ret->alias)) {
- $parser->error(
- 'Potential duplicate alias of CASE expression.',
- $token
- );
+ $parser->error('Potential duplicate alias of CASE expression.', $token);
break;
}
$asFound = true;
@@ -238,6 +235,14 @@ class CaseExpression extends Component
}
if ($asFound
+ && $token->type === Token::TYPE_KEYWORD
+ && ($token->flags & Token::FLAG_KEYWORD_RESERVED || $token->flags & Token::FLAG_KEYWORD_FUNCTION)){
+ $parser->error('An alias expected after AS but got '.$token->value, $token);
+ $asFound = false;
+ break;
+ }
+
+ if ($asFound
|| $token->type === Token::TYPE_STRING
|| ($token->type === Token::TYPE_SYMBOL && !$token->flags & Token::FLAG_SYMBOL_VARIABLE)
|| $token->type === Token::TYPE_NONE
@@ -257,10 +262,7 @@ class CaseExpression extends Component
break;
}
if ($asFound) {
- $parser->error(
- 'An alias was expected after AS.',
- $list->tokens[$list->idx - 1]
- );
+ $parser->error('An alias was expected after AS.', $list->tokens[$list->idx - 1]);
}