@@ -29,7 +29,7 @@ class MySqlMultiQueryParserTest extends MultiQueryParserTestCase
2929
3030 protected function getExpectedFileQueryCount (): int
3131 {
32- return 60 ;
32+ return 61 ;
3333 }
3434
3535
@@ -242,6 +242,21 @@ class MySqlMultiQueryParserTest extends MultiQueryParserTestCase
242242
243243 // Escaped backticks (doubled) inside backtick identifiers
244244 ["SELECT `col``name` FROM t; " , ["SELECT `col``name` FROM t " ]],
245+
246+ // Dollar-quoted strings in JavaScript stored programs
247+ [
248+ 'CREATE FUNCTION gcd(a INT, b INT) RETURNS INT NO SQL LANGUAGE JAVASCRIPT AS $mle$ let x = a; let y = b; $mle$; ' ,
249+ ['CREATE FUNCTION gcd(a INT, b INT) RETURNS INT NO SQL LANGUAGE JAVASCRIPT AS $mle$ let x = a; let y = b; $mle$ ' ],
250+ ],
251+ [
252+ 'CREATE FUNCTION js_add(a INT, b INT) RETURNS INT LANGUAGE JAVASCRIPT AS $$ return a + b; $$; ' ,
253+ ['CREATE FUNCTION js_add(a INT, b INT) RETURNS INT LANGUAGE JAVASCRIPT AS $$ return a + b; $$ ' ],
254+ ],
255+ // Nested dollar-quoted strings with different tags
256+ [
257+ 'CREATE FUNCTION nested() RETURNS INT LANGUAGE JAVASCRIPT AS $mle$ let s = $inner$;$inner$; return 1; $mle$; ' ,
258+ ['CREATE FUNCTION nested() RETURNS INT LANGUAGE JAVASCRIPT AS $mle$ let s = $inner$;$inner$; return 1; $mle$ ' ],
259+ ],
245260 ];
246261 }
247262
@@ -297,6 +312,11 @@ class MySqlMultiQueryParserTest extends MultiQueryParserTestCase
297312 ["SELECT `col;na " , "me` FROM t; " ],
298313 ["SELECT `col;name` FROM t " ],
299314 ],
315+ // Dollar-quoted string spanning chunks
316+ [
317+ ['CREATE FUNCTION f() RETURNS INT LANGUAGE JAVASCRIPT AS $mle$ let x = 1; ' , ' return x; $mle$; ' ],
318+ ['CREATE FUNCTION f() RETURNS INT LANGUAGE JAVASCRIPT AS $mle$ let x = 1; return x; $mle$ ' ],
319+ ],
300320 ];
301321 }
302322}
0 commit comments