mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-16471 mysqldump throws "Variable 'sql_mode' can't be set to the value of 'NULL' (1231)"
This commit is contained in:
@ -780,3 +780,27 @@ END;
|
||||
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
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
#
|
||||
# MDEV-16471 mysqldump throws "Variable 'sql_mode' can't be set to the value of 'NULL' (1231)"
|
||||
#
|
||||
SET sql_mode='ORACLE,EMPTY_STRING_IS_NULL';
|
||||
SELECT @@sql_mode;
|
||||
@@sql_mode
|
||||
PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,EMPTY_STRING_IS_NULL,SIMULTANEOUS_ASSIGNMENT
|
||||
SELECT '' AS empty;
|
||||
empty
|
||||
NULL
|
||||
SET sql_mode='';
|
||||
SELECT @@sql_mode;
|
||||
|
@ -554,3 +554,26 @@ BEGIN
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.3 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16471 mysqldump throws "Variable 'sql_mode' can't be set to the value of 'NULL' (1231)"
|
||||
--echo #
|
||||
|
||||
SET sql_mode='ORACLE,EMPTY_STRING_IS_NULL';
|
||||
SELECT @@sql_mode;
|
||||
SELECT '' AS empty;
|
||||
SET sql_mode='';
|
||||
SELECT @@sql_mode;
|
||||
SET sql_mode=DEFAULT;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
13
sql/item.cc
13
sql/item.cc
@ -202,6 +202,19 @@ String *Item::val_str_ascii(String *str)
|
||||
}
|
||||
|
||||
|
||||
String *Item::val_str_ascii_revert_empty_string_is_null(THD *thd, String *str)
|
||||
{
|
||||
String *res= val_str_ascii(str);
|
||||
if (!res && (thd->variables.sql_mode & MODE_EMPTY_STRING_IS_NULL))
|
||||
{
|
||||
null_value= false;
|
||||
str->set("", 0, &my_charset_latin1);
|
||||
return str;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
String *Item::val_str(String *str, String *converter, CHARSET_INFO *cs)
|
||||
{
|
||||
String *res= val_str(str);
|
||||
|
@ -1172,6 +1172,12 @@ public:
|
||||
*/
|
||||
virtual String *val_str_ascii(String *str);
|
||||
|
||||
/*
|
||||
Returns the result of val_str_ascii(), translating NULLs back
|
||||
to empty strings (if MODE_EMPTY_STRING_IS_NULL is set).
|
||||
*/
|
||||
String *val_str_ascii_revert_empty_string_is_null(THD *thd, String *str);
|
||||
|
||||
/*
|
||||
Returns the val_str() value converted to the given character set.
|
||||
*/
|
||||
|
@ -1354,7 +1354,8 @@ public:
|
||||
|
||||
if (var->value->result_type() == STRING_RESULT)
|
||||
{
|
||||
if (!(res=var->value->val_str_ascii(&str)))
|
||||
if (!(res= var->value->val_str_ascii_revert_empty_string_is_null(thd,
|
||||
&str)))
|
||||
return true;
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user