mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
9bd3b8545a
If setting a system-variable provided by a plug-in failed, no OK or error was sent in some cases, hanging the client. We now send an error in the case from the ticket (integer-argument out of range in STRICT mode). We also provide a semi-generic fallback message for possible future cases like this where an error is signalled, but no message is sent to the client. The error/warning handling is unified so it's the same again for variables provided by plugins and those in the server proper. mysql-test/r/plugin.result: show that on out-of-range values, plugin interface throws errors in STRICT mode and warnings otherwise. mysql-test/t/plugin.test: show that on out-of-range values, plugin interface throws errors in STRICT mode and warnings otherwise. sql/set_var.cc: - handle signedness of values used in warnings - in STRICT mode, throw errors rather than warnings sql/sql_parse.cc: If sql_set_variables() returns with an error but no message was sent to the client, send a semi-generic one so the session won't hang and we won't fail silently. sql/sql_plugin.cc: throw a warning if more than just block-size was corrected (or an error in STRICT mode). use functions from set_var for uniform behaviour of server- and plug-in variables. storage/example/ha_example.cc: Add a ULONG system variable to example plugin so we can test integers in the plugin-interface without having to depend on the presence of innobase.
76 lines
1.8 KiB
Text
76 lines
1.8 KiB
Text
--source include/have_example_plugin.inc
|
|
|
|
CREATE TABLE t1(a int) ENGINE=EXAMPLE;
|
|
DROP TABLE t1;
|
|
|
|
INSTALL PLUGIN example SONAME 'ha_example.so';
|
|
--error 1125
|
|
INSTALL PLUGIN EXAMPLE SONAME 'ha_example.so';
|
|
|
|
UNINSTALL PLUGIN example;
|
|
|
|
INSTALL PLUGIN example SONAME 'ha_example.so';
|
|
|
|
CREATE TABLE t1(a int) ENGINE=EXAMPLE;
|
|
|
|
# Let's do some advanced ops with the example engine :)
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
UNINSTALL PLUGIN example;
|
|
--error 1305
|
|
UNINSTALL PLUGIN EXAMPLE;
|
|
|
|
--error 1305
|
|
UNINSTALL PLUGIN non_exist;
|
|
|
|
|
|
--echo #
|
|
--echo # Bug#32034: check_func_enum() does not check correct values but set it
|
|
--echo # to impossible int val
|
|
--echo #
|
|
|
|
INSTALL PLUGIN example SONAME 'ha_example.so';
|
|
|
|
SET GLOBAL example_enum_var= e1;
|
|
SET GLOBAL example_enum_var= e2;
|
|
--error 1231
|
|
SET GLOBAL example_enum_var= impossible;
|
|
|
|
UNINSTALL PLUGIN example;
|
|
|
|
|
|
|
|
#
|
|
# Bug #32757 hang with sql_mode set when setting some global variables
|
|
#
|
|
INSTALL PLUGIN example SONAME 'ha_example.so';
|
|
|
|
select @@session.sql_mode into @old_sql_mode;
|
|
|
|
# first, try normal sql_mode (no error, send OK)
|
|
set session sql_mode='';
|
|
set global example_ulong_var=500;
|
|
select @@global.example_ulong_var;
|
|
# overflow -- correct value, but throw warning
|
|
set global example_ulong_var=1111;
|
|
select @@global.example_ulong_var;
|
|
|
|
# now, try STRICT (error occurrs, no message is sent, so send default)
|
|
set session sql_mode='STRICT_ALL_TABLES';
|
|
set global example_ulong_var=500;
|
|
select @@global.example_ulong_var;
|
|
# overflow -- throw warning, do NOT change value
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
set global example_ulong_var=1111;
|
|
select @@global.example_ulong_var;
|
|
|
|
set session sql_mode=@old_sql_mode;
|
|
|
|
# finally, show that conditions that already raised an error are not
|
|
# adversely affected (error was already sent, do nothing)
|
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
set session old=bla;
|
|
|
|
UNINSTALL PLUGIN example;
|