diff --git a/mysql-test/r/sql_mode.result b/mysql-test/r/sql_mode.result index 04935a4a2682a..7c881fd5ad5f7 100644 --- a/mysql-test/r/sql_mode.result +++ b/mysql-test/r/sql_mode.result @@ -759,3 +759,24 @@ a b 1 NULL 1 NULL DROP TABLE t1; +# +# MDEV-12390 Wrong error line numbers reported with sql_mode=IGNORE_SPACE +# +SET sql_mode=IGNORE_SPACE; +CREATE PROCEDURE p1() +BEGIN +SELECT 1+1; +syntax error; +END; +$$ +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'error; +END' at line 4 +SET sql_mode=DEFAULT; +CREATE PROCEDURE p1() +BEGIN +SELECT 1+1; +syntax error; +END; +$$ +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'error; +END' at line 4 diff --git a/mysql-test/t/sql_mode.test b/mysql-test/t/sql_mode.test index 263437a0bf1e5..97a694f585a64 100644 --- a/mysql-test/t/sql_mode.test +++ b/mysql-test/t/sql_mode.test @@ -527,3 +527,30 @@ ALTER TABLE t1 ADD b INT; EXECUTE stmt; SELECT * FROM t1; DROP TABLE t1; + +--echo # +--echo # MDEV-12390 Wrong error line numbers reported with sql_mode=IGNORE_SPACE +--echo # + +SET sql_mode=IGNORE_SPACE; +DELIMITER $$; +--error ER_PARSE_ERROR +CREATE PROCEDURE p1() +BEGIN + SELECT 1+1; + syntax error; +END; +$$ +DELIMITER ;$$ + + +SET sql_mode=DEFAULT; +DELIMITER $$; +--error ER_PARSE_ERROR +CREATE PROCEDURE p1() +BEGIN + SELECT 1+1; + syntax error; +END; +$$ +DELIMITER ;$$ diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index c59edfd875179..c52bfd0e62e69 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1448,7 +1448,10 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) below by checking start != lex->ptr. */ for (; state_map[(uchar) c] == MY_LEX_SKIP ; c= lip->yyGet()) - ; + { + if (c == '\n') + lip->yylineno++; + } } if (start == lip->get_ptr() && c == '.' && ident_map[(uchar) lip->yyPeek()])