diff options
author | Deven Bansod <devenbansod.bits@gmail.com> | 2018-12-22 10:03:52 +0530 |
---|---|---|
committer | Deven Bansod <devenbansod.bits@gmail.com> | 2018-12-22 10:03:52 +0530 |
commit | db91c1d4eb328f233d9973079a24c92303040d83 (patch) | |
tree | a1701dd8766e732bb417114bb25d9a9fa818a5ff /src/Components/SetOperation.php | |
parent | d46d5cdaedd5c669b5770351a245ac2c7ae631c3 (diff) | |
download | sql-parser-db91c1d4eb328f233d9973079a24c92303040d83.zip sql-parser-db91c1d4eb328f233d9973079a24c92303040d83.tar.gz sql-parser-db91c1d4eb328f233d9973079a24c92303040d83.tar.bz2 |
Throw a parser error on extraneous comma in UPDATE statement
Signed-off-by: Deven Bansod <devenbansod.bits@gmail.com>
Diffstat (limited to 'src/Components/SetOperation.php')
-rw-r--r-- | src/Components/SetOperation.php | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/Components/SetOperation.php b/src/Components/SetOperation.php index 7dab0a1..2945a8e 100644 --- a/src/Components/SetOperation.php +++ b/src/Components/SetOperation.php @@ -64,15 +64,22 @@ class SetOperation extends Component * * Below are the states of the parser. * - * 0 -------------------[ column name ]-------------------> 1 - * + * 0 ---------------------[ col_name ]--------------------> 0 + * 0 ------------------------[ = ]------------------------> 1 + * 1 -----------------------[ value ]---------------------> 1 * 1 ------------------------[ , ]------------------------> 0 - * 1 ----------------------[ value ]----------------------> 1 * * @var int */ $state = 0; + /** + * Token when the parser has seen the latest comma + * + * @var Token + */ + $commaLastSeenAt = null; + for (; $list->idx < $list->count; ++$list->idx) { /** * Token parsed at this moment. @@ -104,6 +111,8 @@ class SetOperation extends Component $state = 1; } elseif ($token->value !== ',') { $expr->column .= $token->token; + } elseif ($token->value === ',') { + $commaLastSeenAt = $token; } } elseif ($state === 1) { $tmp = Expression::parse( @@ -122,11 +131,16 @@ class SetOperation extends Component $ret[] = $expr; $expr = new self(); $state = 0; + $commaLastSeenAt = null; } } - --$list->idx; + // We saw a comma, but didn't see a column-value pair after it + if ($commaLastSeenAt !== null) { + $parser->error('Unexpected token.', $commaLastSeenAt); + } + return $ret; } |