summaryrefslogtreecommitdiffstats
path: root/src/Components
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-12-17 21:13:43 +0200
committerDan Ungureanu <udan1107@gmail.com>2015-12-17 21:13:43 +0200
commit7d64afacbeb598886435bb9e25f0f395d19aee00 (patch)
treeb5fcf68241b92a51908028db8e7440802d19dbb0 /src/Components
parent4f15f1d6db3dd0e4e7c1b6108126f3f1f62d516f (diff)
downloadsql-parser-7d64afacbeb598886435bb9e25f0f395d19aee00.zip
sql-parser-7d64afacbeb598886435bb9e25f0f395d19aee00.tar.gz
sql-parser-7d64afacbeb598886435bb9e25f0f395d19aee00.tar.bz2
Expressions are permitted in SET operations.
Diffstat (limited to 'src/Components')
-rw-r--r--src/Components/SetOperation.php29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/Components/SetOperation.php b/src/Components/SetOperation.php
index 9281902..d695fce 100644
--- a/src/Components/SetOperation.php
+++ b/src/Components/SetOperation.php
@@ -86,25 +86,34 @@ class SetOperation extends Component
// No keyword is expected.
if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
- break;
+ if ($state == 0) {
+ break;
+ }
}
if ($state === 0) {
if ($token->token === '=') {
$state = 1;
- } else {
+ } else if ($token->value !== ',') {
$expr->column .= $token->token;
}
} elseif ($state === 1) {
- if ($token->token === ',') {
- $expr->column = trim($expr->column);
- $expr->value = trim($expr->value);
- $ret[] = $expr;
- $expr = new SetOperation();
- $state = 0;
- } else {
- $expr->value .= $token->token;
+ $tmp = Expression::parse(
+ $parser,
+ $list,
+ array(
+ 'noAlias' => true,
+ )
+ );
+ if ($tmp == null) {
+ $expr = null;
+ break;
}
+ $expr->column = trim($expr->column);
+ $expr->value = $tmp->expr;
+ $ret[] = $expr;
+ $expr = new SetOperation();
+ $state = 0;
}
}