diff options
author | Dan Ungureanu <udan1107@gmail.com> | 2015-12-17 21:13:43 +0200 |
---|---|---|
committer | Dan Ungureanu <udan1107@gmail.com> | 2015-12-17 21:13:43 +0200 |
commit | 7d64afacbeb598886435bb9e25f0f395d19aee00 (patch) | |
tree | b5fcf68241b92a51908028db8e7440802d19dbb0 /src/Components | |
parent | 4f15f1d6db3dd0e4e7c1b6108126f3f1f62d516f (diff) | |
download | sql-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.php | 29 |
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; } } |