diff options
author | Deven Bansod <devenbansod.bits@gmail.com> | 2016-10-14 12:05:08 +0530 |
---|---|---|
committer | Deven Bansod <devenbansod.bits@gmail.com> | 2016-10-14 12:05:08 +0530 |
commit | 06f7d5232581c3a0afd84cf54a549a0b79355adc (patch) | |
tree | 8d3844fd29a4660a75d519028d826a18eb9c919c /src/Components/Expression.php | |
parent | 1a174887bbd4d20210beda3f7fac3735f3fe9cd1 (diff) | |
download | sql-parser-06f7d5232581c3a0afd84cf54a549a0b79355adc.zip sql-parser-06f7d5232581c3a0afd84cf54a549a0b79355adc.tar.gz sql-parser-06f7d5232581c3a0afd84cf54a549a0b79355adc.tar.bz2 |
Fix parsing of variables being assigned value of CASE expr within SELECT statements
For example,
$query = "SELECT 1+ 2 AS `c2`, sum(c2), sum(c3) AS `sum_c3`, 'Status'= CASE WHEN quantity > 0 THEN 'in stock' ELSE 'out of stock' END FROM test_table"
Signed-off-by: Deven Bansod <devenbansod.bits@gmail.com>
Diffstat (limited to 'src/Components/Expression.php')
-rw-r--r-- | src/Components/Expression.php | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Components/Expression.php b/src/Components/Expression.php index 1ca0596..e407960 100644 --- a/src/Components/Expression.php +++ b/src/Components/Expression.php @@ -33,7 +33,7 @@ class Expression extends Component * @var array */ private static $ALLOWED_KEYWORDS = array( - 'AS' => 1, 'DUAL' => 1, 'NULL' => 1, 'REGEXP' => 1 + 'AS' => 1, 'DUAL' => 1, 'NULL' => 1, 'REGEXP' => 1, 'CASE' => 1 ); /** @@ -252,6 +252,13 @@ class Expression extends Component } $alias = true; continue; + } elseif ($token->value === 'CASE') { + // For a use of CASE like + // 'SELECT a = CASE .... END, b=1, `id`, ... FROM ...' + $tempCaseExpr = CaseExpression::parse($parser, $list); + $ret->expr .= CaseExpression::build($tempCaseExpr); + $isExpr = true; + continue; } $isExpr = true; } elseif ($brackets === 0 && count($ret->expr) > 0 && ! $alias) { |