From 3096ffa7abd7e2e6b50c1e037510ba169ef68cb5 Mon Sep 17 00:00:00 2001 From: Matteo Beccati Date: Thu, 2 May 2024 15:24:55 +0200 Subject: [PATCH] pdo_sqlite: identifier quoting with square brakets --- ext/pdo_sqlite/sqlite_sql_parser.re | 5 +++-- ext/pdo_sqlite/tests/pdo_sqlite_parser.phpt | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ext/pdo_sqlite/sqlite_sql_parser.re b/ext/pdo_sqlite/sqlite_sql_parser.re index de64487f628..d1b6f099d73 100644 --- a/ext/pdo_sqlite/sqlite_sql_parser.re +++ b/ext/pdo_sqlite/sqlite_sql_parser.re @@ -28,8 +28,8 @@ int pdo_sqlite_scanner(pdo_scanner_t *s) /*!re2c BINDCHR = [:][a-zA-Z0-9_]+; QUESTION = [?]; - COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--"[^\r\n]*); - SPECIALS = [:?"'`/-]; + COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--".*); + SPECIALS = [:?"'`/[-]; MULTICHAR = ([:]{2,}|[?]{2,}); ANYNOEOF = [\001-\377]; */ @@ -38,6 +38,7 @@ int pdo_sqlite_scanner(pdo_scanner_t *s) (["]((["]["])|ANYNOEOF)*["]) { RET(PDO_PARSER_TEXT); } (['](([']['])|ANYNOEOF)*[']) { RET(PDO_PARSER_TEXT); } ([`](([`][`])|ANYNOEOF)*[`]) { RET(PDO_PARSER_TEXT); } + ("["ANYNOEOF*"]") { RET(PDO_PARSER_TEXT); } MULTICHAR { RET(PDO_PARSER_TEXT); } BINDCHR { RET(PDO_PARSER_BIND); } QUESTION { RET(PDO_PARSER_BIND_POS); } diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_parser.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_parser.phpt index 12d6aed5137..d5eda8d9b82 100644 --- a/ext/pdo_sqlite/tests/pdo_sqlite_parser.phpt +++ b/ext/pdo_sqlite/tests/pdo_sqlite_parser.phpt @@ -31,8 +31,10 @@ foreach ($queries as $k => $query) { // One parameter $queries = [ "SELECT * FROM {$table} WHERE '1' = ?", - "SELECT * FROM {$table} WHERE \"?\" IN (?, '?')", + "SELECT * FROM {$table} WHERE \"?\" IN (?, \"?\")", "SELECT * FROM {$table} WHERE `a``?` = ?", + "SELECT * FROM {$table} WHERE \"a`?\" = ?", + "SELECT * FROM {$table} WHERE [a`?] = ?", ]; foreach ($queries as $k => $query) { @@ -56,3 +58,5 @@ bool(true) bool(true) bool(true) bool(true) +bool(true) +bool(true)