Commit bcc2100f authored by Alexander Barkov's avatar Alexander Barkov

MDEV-16471 mysqldump throws "Variable 'sql_mode' can't be set to the value of 'NULL' (1231)"

parent 9dc81f7d
...@@ -780,3 +780,27 @@ END; ...@@ -780,3 +780,27 @@ 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; 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' 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;
@@sql_mode
SET sql_mode=DEFAULT;
#
# End of 10.3 tests
#
......
...@@ -554,3 +554,26 @@ BEGIN ...@@ -554,3 +554,26 @@ BEGIN
END; END;
$$ $$
DELIMITER ;$$ 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 #
...@@ -202,6 +202,19 @@ String *Item::val_str_ascii(String *str) ...@@ -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 *Item::val_str(String *str, String *converter, CHARSET_INFO *cs)
{ {
String *res= val_str(str); String *res= val_str(str);
......
...@@ -1171,7 +1171,13 @@ class Item: public Value_source, ...@@ -1171,7 +1171,13 @@ class Item: public Value_source,
Similar to val_str() Similar to val_str()
*/ */
virtual String *val_str_ascii(String *str); 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. Returns the val_str() value converted to the given character set.
*/ */
......
...@@ -1354,7 +1354,8 @@ public: ...@@ -1354,7 +1354,8 @@ public:
if (var->value->result_type() == STRING_RESULT) 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; return true;
else else
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment