mirror of
https://github.com/MariaDB/server.git
synced 2025-05-27 01:57:48 +03:00
Bounds-checks and blocksize corrections were applied to user-input, but constants in the server were trusted implicitly. If these values did not actually meet the requirements, the user could not set change a variable, then set it back to the (wonky) factory default or maximum by explicitly specifying it (SET <var>=<value> vs SET <var>=DEFAULT). Now checks also apply to the server's presets. Wonky values and maxima get corrected at startup. Consequently all non-offsetted values the user sees are valid, and users can set the variable to that exact value if they so desire. mysql-test/r/read_buffer_size_basic.result: test sets out of bounds value; we now throw a warning for this. This is a side-effect: before, the maximum was higher than the value we set here. The value was corrected to block-size, the maximum was not, hence the value was smaller than the maximum in this particular case. Now that we align the maxima at startup, the value in SET is larger than the (corrected) maximum, and we see a warning in this particular case. "This means we're doing it right." mysql-test/r/read_rnd_buffer_size_basic.result: test sets out of bounds value; we now throw a warning for this. This is a side-effect: before, the maximum was higher than the value we set here. The value was corrected to block-size, the maximum was not, hence the value was smaller than the maximum in this particular case. Now that we align the maxima at startup, the value in SET is larger than the (corrected) maximum, and we see a warning in this particular case. "This means we're doing it right." mysys/my_getopt.c: Do bounds-checking at start-up time so we'll catch and correct wonky default values and upper limits. sql/mysqld.cc: If 0 is a legal value per the docs, not to mention the default, we shouldn't give 1 as the lower limit. storage/innobase/handler/ha_innodb.cc: We are setting upper bounds here. ~0L gives -1. That is NOT what we want!
194 lines
7.5 KiB
Plaintext
194 lines
7.5 KiB
Plaintext
SET @start_global_value = @@global.read_buffer_size;
|
|
SELECT @start_global_value;
|
|
@start_global_value
|
|
131072
|
|
SET @start_session_value = @@session.read_buffer_size;
|
|
SELECT @start_session_value;
|
|
@start_session_value
|
|
131072
|
|
'#--------------------FN_DYNVARS_138_01-------------------------#'
|
|
SET @@global.read_buffer_size = 1000;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '1000'
|
|
SET @@global.read_buffer_size = DEFAULT;
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
131072
|
|
SET @@session.read_buffer_size = 2000;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '2000'
|
|
SET @@session.read_buffer_size = DEFAULT;
|
|
SELECT @@session.read_buffer_size;
|
|
@@session.read_buffer_size
|
|
131072
|
|
'#--------------------FN_DYNVARS_138_02-------------------------#'
|
|
SET @@global.read_buffer_size = DEFAULT;
|
|
SELECT @@global.read_buffer_size = 131072;
|
|
@@global.read_buffer_size = 131072
|
|
1
|
|
SET @@session.read_buffer_size = DEFAULT;
|
|
SELECT @@session.read_buffer_size = 131072;
|
|
@@session.read_buffer_size = 131072
|
|
1
|
|
'#--------------------FN_DYNVARS_138_03-------------------------#'
|
|
SET @@global.read_buffer_size = 8201;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '8201'
|
|
SELECT @@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228 ;
|
|
@@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228
|
|
1
|
|
SET @@global.read_buffer_size = 8200;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '8200'
|
|
SELECT @@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228 ;
|
|
@@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228
|
|
1
|
|
SET @@global.read_buffer_size = 2147479552;
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
2147479552
|
|
SET @@global.read_buffer_size = 2147479551;
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
2147475456
|
|
'#--------------------FN_DYNVARS_138_04-------------------------#'
|
|
SET @@session.read_buffer_size = 8200;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '8200'
|
|
SELECT @@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228 ;
|
|
@@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228
|
|
1
|
|
SET @@session.read_buffer_size = 8201;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '8201'
|
|
SELECT @@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228 ;
|
|
@@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228
|
|
1
|
|
SET @@session.read_buffer_size = 2147479552;
|
|
SELECT @@session.read_buffer_size;
|
|
@@session.read_buffer_size
|
|
2147479552
|
|
SET @@session.read_buffer_size = 2147479551;
|
|
SELECT @@session.read_buffer_size;
|
|
@@session.read_buffer_size
|
|
2147475456
|
|
'#------------------FN_DYNVARS_138_05-----------------------#'
|
|
SET @@global.read_buffer_size = 8199;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '8199'
|
|
SELECT @@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228 ;
|
|
@@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228
|
|
1
|
|
SET @@global.read_buffer_size = -1024;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '0'
|
|
SELECT @@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228 ;
|
|
@@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228
|
|
1
|
|
SET @@global.read_buffer_size = 2147479553;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '2147479553'
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
2147479552
|
|
SET @@global.read_buffer_size = 65530.34.;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
2147479552
|
|
SET @@global.read_buffer_size = test;
|
|
ERROR 42000: Incorrect argument type to variable 'read_buffer_size'
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
2147479552
|
|
SET @@session.read_buffer_size = 8199;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '8199'
|
|
SELECT @@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228 ;
|
|
@@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228
|
|
1
|
|
SET @@session.read_buffer_size = -2;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '0'
|
|
SELECT @@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228 ;
|
|
@@session.read_buffer_size= 8200 OR @@session.read_buffer_size= 8228
|
|
1
|
|
SET @@session.read_buffer_size = 65530.34.;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1
|
|
SET @@session.read_buffer_size = 2147479553;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '2147479553'
|
|
SELECT @@session.read_buffer_size;
|
|
@@session.read_buffer_size
|
|
2147479552
|
|
'Bug # 34837: Errors are not coming on assigning invalid values to variable';
|
|
SET @@session.read_buffer_size = test;
|
|
ERROR 42000: Incorrect argument type to variable 'read_buffer_size'
|
|
SELECT @@session.read_buffer_size;
|
|
@@session.read_buffer_size
|
|
2147479552
|
|
'#------------------FN_DYNVARS_138_06-----------------------#'
|
|
SELECT @@global.read_buffer_size = VARIABLE_VALUE
|
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
|
WHERE VARIABLE_NAME='read_buffer_size';
|
|
@@global.read_buffer_size = VARIABLE_VALUE
|
|
1
|
|
'#------------------FN_DYNVARS_138_07-----------------------#'
|
|
SELECT @@session.read_buffer_size = VARIABLE_VALUE
|
|
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
|
|
WHERE VARIABLE_NAME='read_buffer_size';
|
|
@@session.read_buffer_size = VARIABLE_VALUE
|
|
1
|
|
'#------------------FN_DYNVARS_138_08-----------------------#'
|
|
SET @@global.read_buffer_size = TRUE;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '1'
|
|
SELECT @@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228 ;
|
|
@@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228
|
|
1
|
|
SET @@global.read_buffer_size = FALSE;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '0'
|
|
SELECT @@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228 ;
|
|
@@global.read_buffer_size= 8200 OR @@global.read_buffer_size= 8228
|
|
1
|
|
'Bug: FN_DYNVARS_138_08- Errors are not coming on assigning TRUE/FALSE to variable'
|
|
'#---------------------FN_DYNVARS_138_09----------------------#'
|
|
SET @@global.read_buffer_size = 9000;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '9000'
|
|
SELECT @@read_buffer_size = @@global.read_buffer_size;
|
|
@@read_buffer_size = @@global.read_buffer_size
|
|
0
|
|
'#---------------------FN_DYNVARS_138_10----------------------#'
|
|
SET @@read_buffer_size = 9000;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '9000'
|
|
SELECT @@read_buffer_size = @@local.read_buffer_size;
|
|
@@read_buffer_size = @@local.read_buffer_size
|
|
1
|
|
SELECT @@local.read_buffer_size = @@session.read_buffer_size;
|
|
@@local.read_buffer_size = @@session.read_buffer_size
|
|
1
|
|
'#---------------------FN_DYNVARS_138_11----------------------#'
|
|
SET read_buffer_size = 9100;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect read_buffer_size value: '9100'
|
|
SELECT @@read_buffer_size= 8200 OR @@read_buffer_size= 8228 ;
|
|
@@read_buffer_size= 8200 OR @@read_buffer_size= 8228
|
|
1
|
|
SELECT local.read_buffer_size;
|
|
ERROR 42S02: Unknown table 'local' in field list
|
|
SELECT session.read_buffer_size;
|
|
ERROR 42S02: Unknown table 'session' in field list
|
|
SELECT read_buffer_size = @@session.read_buffer_size;
|
|
ERROR 42S22: Unknown column 'read_buffer_size' in 'field list'
|
|
SET @@global.read_buffer_size = @start_global_value;
|
|
SELECT @@global.read_buffer_size;
|
|
@@global.read_buffer_size
|
|
131072
|
|
SET @@session.read_buffer_size = @start_session_value;
|
|
SELECT @@session.read_buffer_size;
|
|
@@session.read_buffer_size
|
|
131072
|