diff --git a/mysql-test/suite/query_rewrite_plugins/include/basic.inc b/mysql-test/suite/query_rewrite_plugins/include/basic.inc index ea50ea415a6..8d8a42c55c7 100644 --- a/mysql-test/suite/query_rewrite_plugins/include/basic.inc +++ b/mysql-test/suite/query_rewrite_plugins/include/basic.inc @@ -112,4 +112,15 @@ SELECT 3, 1; SELECT 3, 2; SELECT 'The_original_query'; +--echo # Bug# mysql_parser_parse() adds trailing semicolon to digest + +INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement ) +VALUES ( 'SELECT ?;', 'SELECT "literal"' ); + +SELECT * FROM query_rewrite.rewrite_rules; +CALL query_rewrite.flush_rewrite_rules(); +SELECT * FROM query_rewrite.rewrite_rules; + +SELECT 1; + DELETE FROM query_rewrite.rewrite_rules; diff --git a/mysql-test/suite/query_rewrite_plugins/r/basic.result b/mysql-test/suite/query_rewrite_plugins/r/basic.result index 07aaf8b24ed..b14d7782119 100644 --- a/mysql-test/suite/query_rewrite_plugins/r/basic.result +++ b/mysql-test/suite/query_rewrite_plugins/r/basic.result @@ -215,6 +215,27 @@ The_rewritten_query The_rewritten_query Warnings: Note 1105 Query 'SELECT 'The_original_query'' rewritten to 'SELECT "The_rewritten_query"' by a query rewrite plugin +# Bug# mysql_parser_parse() adds trailing semicolon to digest +INSERT INTO query_rewrite.rewrite_rules ( pattern, replacement ) +VALUES ( 'SELECT ?;', 'SELECT "literal"' ); +SELECT * FROM query_rewrite.rewrite_rules; +id pattern pattern_database replacement enabled message +7 SELECT 1, ? NULL SELECT "rewritten w/rule 1" YES NULL +8 SELECT 2, ? NULL SELECT "rewritten w/rule 2" YES NULL +9 SELECT "The_original_query" NULL SELECT "The_rewritten_query" YES NULL +10 SELECT ?; NULL SELECT "literal" YES NULL +CALL query_rewrite.flush_rewrite_rules(); +SELECT * FROM query_rewrite.rewrite_rules; +id pattern pattern_database replacement enabled message +7 SELECT 1, ? NULL SELECT "rewritten w/rule 1" YES NULL +8 SELECT 2, ? NULL SELECT "rewritten w/rule 2" YES NULL +9 SELECT "The_original_query" NULL SELECT "The_rewritten_query" YES NULL +10 SELECT ?; NULL SELECT "literal" YES NULL +SELECT 1; +literal +literal +Warnings: +Note 1105 Query 'SELECT 1' rewritten to 'SELECT "literal"' by a query rewrite plugin DELETE FROM query_rewrite.rewrite_rules; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown diff --git a/sql/parser_service.cc b/sql/parser_service.cc index d7a4af054f2..d28c7a25a29 100644 --- a/sql/parser_service.cc +++ b/sql/parser_service.cc @@ -249,7 +249,7 @@ int mysql_parser_parse(MYSQL_THD thd, const MYSQL_LEX_STRING query, return 1; // Fatal error flag set Parser_state parser_state; - if (parser_state.init(thd, query.str, query.length)) return 1; + if (parser_state.init(thd, thd->query().str, thd->query().length)) return 1; parser_state.m_input.m_has_digest = true; parser_state.m_input.m_compute_digest = true;