mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 21:42:35 +01:00
6d54b0443a
The code to get read the value of a system variable was extracting its value on PREPARE stage and was substituting the value (as a constant) into the parse tree. Note that this must be a reversible transformation, i.e. it must be reversed before each re-execution. Unfortunately this cannot be reliably done using the current code, because there are other non-reversible source tree transformations that can interfere with this reversible transformation. Fixed by not resolving the value at PREPARE, but at EXECUTE (as the rest of the functions operate). Added a cache of the value (so that it's constant throughout the execution of the query). Note that the cache also caches NULL values. Updated an obsolete related test suite (variables-big) and the code to test the result type of system variables (as per bug 74). mysql-test/extra/rpl_tests/rpl_insert_id.test: Bug #32124: removed ambiguous testcase mysql-test/r/innodb_data_home_dir_basic.result: Bug #32124: fixed wrong test case mysql-test/r/innodb_flush_method_basic.result: Bug #32124: fixed wrong test case mysql-test/r/ps_11bugs.result: Bug #32124: test case mysql-test/r/ssl_capath_basic.result: Bug #32124: fixed wrong test case mysql-test/r/ssl_cipher_basic.result: Bug #32124: fixed wrong test case mysql-test/r/variables.result: Bug #32124: system vars are shown as such in EXPLAIN EXTENDED, not as constants. mysql-test/suite/rpl/r/rpl_insert_id.result: Bug #32124: removed ambiguous testcase mysql-test/t/ps_11bugs.test: Bug #32124: test case sql/item.cc: Bug #32124: placed the code to convert string to longlong or double to a function (so that it can be reused) sql/item.h: Bug #32124: placed the code to convert string to longlong or double to a function (so that it can be reused) sql/item_func.cc: Bug #32124: moved the evaluation of system variables at runtime (val_xxx). sql/item_func.h: Bug #32124: moved the evaluation of system variables at runtime (val_xxx). sql/set_var.cc: Bug #32124: removed the code that calculated the system variable's value at PREPARE sql/set_var.h: Bug #32124: removed the code that calculated the system variable's value at PREPARE tests/mysql_client_test.c: Bug #32124 : removed the reading of the system variable, because its max length is depended on the system charset and client charset and can't be easily calculated.
53 lines
1.8 KiB
Text
53 lines
1.8 KiB
Text
'#---------------------BS_STVARS_025_01----------------------#'
|
|
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
|
COUNT(@@GLOBAL.innodb_data_home_dir)
|
|
1
|
|
1 Expected
|
|
'#---------------------BS_STVARS_025_02----------------------#'
|
|
SET @@GLOBAL.innodb_data_home_dir=1;
|
|
ERROR HY000: Variable 'innodb_data_home_dir' is a read only variable
|
|
Expected error 'Read only variable'
|
|
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
|
COUNT(@@GLOBAL.innodb_data_home_dir)
|
|
1
|
|
1 Expected
|
|
'#---------------------BS_STVARS_025_03----------------------#'
|
|
SELECT @@GLOBAL.innodb_data_home_dir = VARIABLE_VALUE
|
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
|
WHERE VARIABLE_NAME='innodb_data_home_dir';
|
|
@@GLOBAL.innodb_data_home_dir = VARIABLE_VALUE
|
|
NULL
|
|
1 Expected
|
|
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
|
COUNT(@@GLOBAL.innodb_data_home_dir)
|
|
1
|
|
1 Expected
|
|
SELECT COUNT(VARIABLE_VALUE)
|
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
|
WHERE VARIABLE_NAME='innodb_data_home_dir';
|
|
COUNT(VARIABLE_VALUE)
|
|
1
|
|
1 Expected
|
|
'#---------------------BS_STVARS_025_04----------------------#'
|
|
SELECT @@innodb_data_home_dir = @@GLOBAL.innodb_data_home_dir;
|
|
@@innodb_data_home_dir = @@GLOBAL.innodb_data_home_dir
|
|
NULL
|
|
1 Expected
|
|
'#---------------------BS_STVARS_025_05----------------------#'
|
|
SELECT COUNT(@@innodb_data_home_dir);
|
|
COUNT(@@innodb_data_home_dir)
|
|
1
|
|
1 Expected
|
|
SELECT COUNT(@@local.innodb_data_home_dir);
|
|
ERROR HY000: Variable 'innodb_data_home_dir' is a GLOBAL variable
|
|
Expected error 'Variable is a GLOBAL variable'
|
|
SELECT COUNT(@@SESSION.innodb_data_home_dir);
|
|
ERROR HY000: Variable 'innodb_data_home_dir' is a GLOBAL variable
|
|
Expected error 'Variable is a GLOBAL variable'
|
|
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
|
COUNT(@@GLOBAL.innodb_data_home_dir)
|
|
1
|
|
1 Expected
|
|
SELECT innodb_data_home_dir = @@SESSION.innodb_data_home_dir;
|
|
ERROR 42S22: Unknown column 'innodb_data_home_dir' in 'field list'
|
|
Expected error 'Readonly variable'
|