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.
storage engine system variables was not validated and
unexpected value was assigned.
The check_func_enum function used subtraction from the uint
value with the probably negative result. That result of
type uint was compared with 0 after casting to signed long
type. On architectures where long type is longer than int
type the result of comparison was unexpected.
storage/example/ha_example.cc:
Fixed bug #32034.
Sample system variable example_enum_var has been added to the
EXAMPLE storage to test ENUM variables.
sql/sql_plugin.cc:
Fixed bug #32034.
The check_func_enum function used subtraction from the uint
value with the probably negative result. That result of
type uint was compared with 0 after casting to signed long
type. On architectures where long type is longer than int
type the result of comparison was unexpected.
uint value has been casted to long type before subtraction.
mysql-test/t/plugin.test:
Added test case for bug #32034.
mysql-test/r/plugin.result:
Added test case for bug #32034.
- Added suppressions for dlopen to make plugin test pass.
- Do not pass empty string to mysqld, since my_getopt is
not capable to handle it.
- Re-enabled trailing UNINSTALL PLUGIN statement of plugin.test.
The memory leak described in the bug report happens in libdl, not
in mysqld. On some valgrind installations this error is suppressed
by default, no idea why it isn't suppressed on pb-valgrind.
<observation>
If library remains open after thread has finished, and is closed by
another thread, we get memory leak. But in case library is opened and
closed by the same thread no leak occurs.
</observation>
mysql-test/lib/mtr_io.pl:
Do not pass empty string since my_getopt is not capable to handle it.
This is required to make plugin.test work on platforms where
ha_example is not compiled.
mysql-test/r/plugin.result:
Updated test result.
mysql-test/t/plugin.test:
Re-enabled UNINSTALL PLUGIN statement. It is a good idea to cleanup
at the end of the test. Anyway bug22694 was fixed while this test
was disabled.
mysql-test/valgrind.supp:
Added suppressions for dlopen to make plugin test pass.
UDF can be created from any library in any part of the server
LD_LIBRARY_PATH.
Allow to load udfs only from plugin_dir.
On windows, refuse to open udf in case it's path contains a slash.
No good test case for this bug because of imperfect error message
that includes error code and error string when it fails to dlopen a
library.
mysql-test/mysql-test-run.pl:
Since plugins are allowed to be open only from plugin_dir:
- there is no sence to update LD_LIBRARY_PATH
- there is no sence to add plugin_dir arg by default
- set UDF_EXAMPLE_LIB_OPT and EXAMPLE_PLUGIN_OPT to be used by
udf and plugin tests accordingly.
mysql-test/r/plugin.result:
Updated test result (we report addition warning).
sql/sql_udf.cc:
Allow to load udfs only from plugin_dir.
On windows, refuse to open udf in case it's path contains a slash.
mysql-test/t/plugin-master.opt:
New BitKeeper file ``mysql-test/t/plugin-master.opt''
mysql-test/t/udf-master.opt:
New BitKeeper file ``mysql-test/t/udf-master.opt''