mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
c7724872d8
enabled) Before this fix, the lexer and parser would treat the ';' character as a different token (either ';' or END_OF_INPUT), based on convoluted logic, which failed in simple cases where a stored procedure is implemented as a single statement, and used in a multi query. With this fix: - the character ';' is always parsed as a ';' token in the lexer, - parsing multi queries is implemented in the parser, in the 'query:' rules, - the value of thd->client_capabilities, which is the capabilities negotiated between the client and the server during bootstrap, is immutable and not arbitrarily modified during parsing (which was the root cause of the bug)
43 lines
1.9 KiB
Text
43 lines
1.9 KiB
Text
select 1+2/*hello*/+3;
|
|
1+2/*hello*/+3
|
|
6
|
|
select 1 /* long
|
|
multi line comment */;
|
|
1
|
|
1
|
|
;
|
|
ERROR 42000: Query was empty
|
|
select 1 /*!32301 +1 */;
|
|
1 /*!32301 +1
|
|
2
|
|
select 1 /*!52301 +1 */;
|
|
1
|
|
1
|
|
select 1--1;
|
|
1--1
|
|
2
|
|
select 1 --2
|
|
+1;
|
|
1 --2
|
|
+1
|
|
4
|
|
select 1 # The rest of the row will be ignored
|
|
;
|
|
1
|
|
1
|
|
/* line with only comment */;
|
|
drop table if exists table_28779;
|
|
create table table_28779 (a int);
|
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';";
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' AND b = 'bar'' at line 1
|
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*' AND b = 'bar';*";
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' AND b = 'bar';*' at line 1
|
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;";
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*! AND 2=2;*";
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*' at line 1
|
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';";
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*!98765' AND b = 'bar'' at line 1
|
|
prepare bar from "DELETE FROM table_28779 WHERE a = 7 OR 1=1/*!98765' AND b = 'bar';*";
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*!98765' AND b = 'bar';*' at line 1
|
|
drop table table_28779;
|