Skip to content

Commit df55111

Browse files
committed
Add support for set = ? for parser
Fixes: #492
1 parent d70e65d commit df55111

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

src/Components/SetOperation.php

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,19 +111,27 @@ public static function parse(Parser $parser, TokensList $list, array $options =
111111
$commaLastSeenAt = $token;
112112
}
113113
} elseif ($state === 1) {
114-
$tmp = Expression::parse(
115-
$parser,
116-
$list,
117-
['breakOnAlias' => true]
118-
);
119-
if ($tmp === null) {
120-
$parser->error('Missing expression.', $token);
121-
break;
114+
if ($token->flags & Token::FLAG_SYMBOL_PARAMETER) {
115+
$expr->column = trim($expr->column);
116+
$expr->value = $token->value;
117+
$ret[] = $expr;
118+
} else {
119+
$tmp = Expression::parse(
120+
$parser,
121+
$list,
122+
['breakOnAlias' => true]
123+
);
124+
125+
if ($tmp === null) {
126+
$parser->error('Missing expression.', $token);
127+
break;
128+
}
129+
130+
$expr->column = trim($expr->column);
131+
$expr->value = $tmp->expr;
132+
$ret[] = $expr;
122133
}
123134

124-
$expr->column = trim($expr->column);
125-
$expr->value = $tmp->expr;
126-
$ret[] = $expr;
127135
$expr = new static();
128136
$state = 0;
129137
$commaLastSeenAt = null;

tests/Parser/UpdateStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public static function updateProvider(): array
2828
['parser/parseUpdate5'],
2929
['parser/parseUpdate6'],
3030
['parser/parseUpdate7'],
31+
['parser/parseUpdate8'],
3132
['parser/parseUpdateErr'],
3233
];
3334
}

tests/TestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public function getErrorsAsArray($obj): array
9393
*/
9494
public function getData(string $name): array
9595
{
96-
$serializedData = file_get_contents('tests/data/' . $name . '.out');
96+
$serializedData = file_get_contents(__DIR__ . '/data/' . $name . '.out');
9797
$this->assertIsString($serializedData);
9898

9999
$serializer = new CustomJsonSerializer();

tests/data/parser/parseUpdate8.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
UPDATE
2+
users
3+
SET
4+
username = ?,
5+
id=155;
6+
7+
UPDATE
8+
users
9+
SET
10+
username = :user_name,
11+
id=155;

0 commit comments

Comments
 (0)