summaryrefslogtreecommitdiffstats
path: root/src/Components/Expression.php
diff options
context:
space:
mode:
authorDeven Bansod <devenbansod.bits@gmail.com>2016-10-14 12:05:08 +0530
committerDeven Bansod <devenbansod.bits@gmail.com>2016-10-14 12:05:08 +0530
commit06f7d5232581c3a0afd84cf54a549a0b79355adc (patch)
tree8d3844fd29a4660a75d519028d826a18eb9c919c /src/Components/Expression.php
parent1a174887bbd4d20210beda3f7fac3735f3fe9cd1 (diff)
downloadsql-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.php9
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) {