polardbxengine/mysql-test/suite/sys_vars/t/sql_mode_basic.test

586 lines
20 KiB
Plaintext

#################### mysql-test\t\sql_mode_basic.test #########################
# #
# Variable Name: sql_mode #
# Scope: GLOBAL | SESSION #
# Access Type: Dynamic #
# Data Type: enumeration #
# Default Value: YES #
# Valid Values : ANSI, STRICT_TRANS_TABLES, TRADITIONAL, #
# ERROR_FOR_DIVISION_BY_ZERO, ANSI_QUOTES, HIGH_NOT_PRECEDENCE,#
# IGNORE_SPACE, ONLY_FULL_GROUP_BY, #
# NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES, #
# NO_UNSIGNED_SUBTRACTION, OFF #
# #
# #
# Creation Date: 2008-02-07 #
# Author: Rizwan #
# #
# Description: Test Cases of Dynamic System Variable sql_mode #
# that checks the behavior of this variable in the following ways#
# * Default Value #
# * Valid & Invalid values #
# * Scope & Access method #
# * Data Integrity #
# #
# Reference: http://dev.mysql.com/doc/refman/5.1/en/ #
# server-system-variables.html #
# #
###############################################################################
--source include/load_sysvars.inc
################################################################
# START OF sql_mode TESTS #
################################################################
###################################################################
# Saving initial value of sql_mode in a temporary variable #
###################################################################
SET @global_start_value = @@global.sql_mode;
SELECT @global_start_value;
SET @session_start_value = @@session.sql_mode;
SELECT @session_start_value;
--echo '#--------------------FN_DYNVARS_152_01------------------------#'
################################################################
# Display the DEFAULT value of sql_mode #
################################################################
SET @@global.sql_mode = ANSI;
SET @@global.sql_mode = DEFAULT;
SELECT @@global.sql_mode;
SET @@session.sql_mode = ANSI;
SET @@session.sql_mode = DEFAULT;
SELECT @@session.sql_mode;
--echo '#---------------------FN_DYNVARS_152_02-------------------------#'
#########################################################
# Check if NULL or empty value is accepeted #
#########################################################
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = NULL;
# resets sql mode to nothing
SET @@global.sql_mode = '';
SELECT @@global.sql_mode;
SET @@global.sql_mode = ' ';
SELECT @@global.sql_mode;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = NULL;
SET @@session.sql_mode = '';
SELECT @@session.sql_mode;
SET @@session.sql_mode = ' ';
SELECT @@session.sql_mode;
--echo '#--------------------FN_DYNVARS_152_03------------------------#'
########################################################################
# Change the value of sql_mode to a valid value #
########################################################################
# sql modes ref: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html
# check valid values for global
SET @@global.sql_mode = ANSI;
SELECT @@global.sql_mode;
SET @@global.sql_mode = STRICT_TRANS_TABLES;
SELECT @@global.sql_mode;
SET @@global.sql_mode = TRADITIONAL;
SELECT @@global.sql_mode;
SET @@global.sql_mode = ALLOW_INVALID_DATES;
SELECT @@global.sql_mode;
SET @@global.sql_mode = ANSI_QUOTES;
SELECT @@global.sql_mode;
SET @@global.sql_mode = ERROR_FOR_DIVISION_BY_ZERO;
SELECT @@global.sql_mode;
SET @@global.sql_mode = HIGH_NOT_PRECEDENCE;
SELECT @@global.sql_mode;
SET @@global.sql_mode = IGNORE_SPACE;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_AUTO_VALUE_ON_ZERO;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_BACKSLASH_ESCAPES;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_DIR_IN_CREATE;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_ENGINE_SUBSTITUTION;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_UNSIGNED_SUBTRACTION;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_ZERO_DATE;
SELECT @@global.sql_mode;
SET @@global.sql_mode = NO_ZERO_IN_DATE;
SELECT @@global.sql_mode;
SET @@global.sql_mode = ONLY_FULL_GROUP_BY;
SELECT @@global.sql_mode;
SET @@global.sql_mode = PIPES_AS_CONCAT;
SELECT @@global.sql_mode;
SET @@global.sql_mode = REAL_AS_FLOAT;
SELECT @@global.sql_mode;
SET @@global.sql_mode = STRICT_ALL_TABLES;
SELECT @@global.sql_mode;
SET @@global.sql_mode = STRICT_TRANS_TABLES;
SELECT @@global.sql_mode;
SET @@global.sql_mode = TRADITIONAL;
SELECT @@global.sql_mode;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = OFF;
#check valid values for session
SET @@session.sql_mode = ANSI;
SELECT @@session.sql_mode;
SET @@session.sql_mode = STRICT_TRANS_TABLES;
SELECT @@session.sql_mode;
SET @@session.sql_mode = TRADITIONAL;
SELECT @@session.sql_mode;
SET @@session.sql_mode = ALLOW_INVALID_DATES;
SELECT @@session.sql_mode;
SET @@session.sql_mode = ANSI_QUOTES;
SELECT @@session.sql_mode;
SET @@session.sql_mode = ERROR_FOR_DIVISION_BY_ZERO;
SELECT @@session.sql_mode;
SET @@session.sql_mode = HIGH_NOT_PRECEDENCE;
SELECT @@session.sql_mode;
SET @@session.sql_mode = IGNORE_SPACE;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_AUTO_VALUE_ON_ZERO;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_BACKSLASH_ESCAPES;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_DIR_IN_CREATE;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_ENGINE_SUBSTITUTION;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_UNSIGNED_SUBTRACTION;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_ZERO_DATE;
SELECT @@session.sql_mode;
SET @@session.sql_mode = NO_ZERO_IN_DATE;
SELECT @@session.sql_mode;
SET @@session.sql_mode = ONLY_FULL_GROUP_BY;
SELECT @@session.sql_mode;
SET @@session.sql_mode = PIPES_AS_CONCAT;
SELECT @@session.sql_mode;
SET @@session.sql_mode = REAL_AS_FLOAT;
SELECT @@session.sql_mode;
SET @@session.sql_mode = STRICT_ALL_TABLES;
SELECT @@session.sql_mode;
SET @@session.sql_mode = STRICT_TRANS_TABLES;
SELECT @@session.sql_mode;
SET @@session.sql_mode = TRADITIONAL;
SELECT @@session.sql_mode;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = OFF;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = '?';
SELECT @@global.sql_mode;
--echo '#--------------------FN_DYNVARS_152_04-------------------------#'
###########################################################################
# Change the value of sql_mode to invalid value #
###########################################################################
# invalid values for global
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = -1;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = ASCII;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = NON_TRADITIONAL;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = 'OF';
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = NONE;
--Error ER_WRONG_VALUE_FOR_VAR
#invalid values for session
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = -1;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = ANSI_SINGLE_QUOTES;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = 'ON';
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = 'OF';
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = DISABLE;
--echo '#-------------------FN_DYNVARS_152_05----------------------------#'
#########################################################################
# Check if the value in session Table matches value in variable #
#########################################################################
--disable_warnings
SELECT @@session.sql_mode = VARIABLE_VALUE
FROM performance_schema.session_variables
WHERE VARIABLE_NAME='sql_mode';
--enable_warnings
--echo '#----------------------FN_DYNVARS_152_06------------------------#'
#########################################################################
# Check if the value in GLOBAL Table matches value in variable #
#########################################################################
--disable_warnings
SELECT @@global.sql_mode = VARIABLE_VALUE
FROM performance_schema.global_variables
WHERE VARIABLE_NAME='sql_mode';
--enable_warnings
--echo '#---------------------FN_DYNVARS_152_07-------------------------#'
###################################################################
# Check if numbers can be used on variable #
###################################################################
# test if variable accepts 0,1,2
SET @@global.sql_mode = 0;
SELECT @@global.sql_mode;
SET @@global.sql_mode = 1;
SELECT @@global.sql_mode;
SET @@global.sql_mode = 2;
SELECT @@global.sql_mode;
SET @@global.sql_mode = 3;
SELECT @@global.sql_mode;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.sql_mode = 8589934592;
# use of decimal values
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.sql_mode = 0.4;
--echo '#---------------------FN_DYNVARS_152_08----------------------#'
###################################################################
# Check if TRUE and FALSE values can be used on variable #
###################################################################
SET @@global.sql_mode = TRUE;
SELECT @@global.sql_mode;
SET @@global.sql_mode = FALSE;
SELECT @@global.sql_mode;
--echo '#---------------------FN_DYNVARS_152_09----------------------#'
#########################################################################
# Check if sql_mode can be accessed with and without @@ sign #
#########################################################################
SET sql_mode = 'ANSI';
--Error ER_PARSE_ERROR
SET session.sql_mode = 'ANSI';
--Error ER_PARSE_ERROR
SET global.sql_mode = 'ANSI';
SET session sql_mode = 1;
SELECT @@sql_mode;
SET global sql_mode = 0;
SELECT @@global.sql_mode;
--echo '#---------------------FN_DYNVARS_152_10----------------------#'
#######################################################################
# Check if sql_mode values can be combined as specified #
#######################################################################
SET @@session.sql_mode = 'TRADITIONAL,ALLOW_INVALID_DATES,ANSI_QUOTES';
SELECT @@session.sql_mode;
SET @@global.sql_mode = 'ONLY_FULL_GROUP_BY,PIPES_AS_CONCAT,REAL_AS_FLOAT';
SELECT @@global.sql_mode;
#try combining invalid mode with correct mode
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,FOOBAR,IGNORE_SPACE';
#zero-length values are ok
SET @@sql_mode=',';
SELECT @@sql_mode;
SET @@sql_mode=',,,,ANSI_QUOTES,,,';
SELECT @@sql_mode;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@sql_mode=',,,,FOOBAR,,,,,';
SELECT @@sql_mode;
--echo '#---------------------FN_DYNVARS_152_11----------------------#'
#######################################################################
# Check if sql_mode can be set using pow(2,x) #
#######################################################################
SET @@session.sql_mode= cast(pow(2,0) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,0) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,1) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,1) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,2) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,2) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,3) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,3) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,4) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,4) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,5) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,5) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,6) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,6) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,7) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,7) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,8) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,8) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,9) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,9) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,10) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,10) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,11) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,11) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,12) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,12) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,13) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,13) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,14) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,14) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,15) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,15) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,16) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,16) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,17) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,17) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,18) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,18) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,19) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,19) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,20) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,20) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,21) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,21) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,22) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,22) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,23) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,23) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,24) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,24) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,25) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,25) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,26) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,26) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,27) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,27) as unsigned integer);
SELECT @@global.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode= cast(pow(2,28) as unsigned integer);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
SET @@global.sql_mode= cast(pow(2,28) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,29) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,29) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,30) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,30) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,31) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,31) as unsigned integer);
SELECT @@global.sql_mode;
SET @@session.sql_mode= cast(pow(2,32) as unsigned integer);
SELECT @@session.sql_mode;
SET @@global.sql_mode= cast(pow(2,32) as unsigned integer);
SELECT @@global.sql_mode;
--echo #
--echo # Bug#27828236: ERROR 1231 WHEN 8.0 CLIENT TRIES TO READ THE OUTPUT OF
--echo # MYSQLBINLOG 5.7
--echo #
SET @@session.sql_mode = 0;
CREATE TABLE t1 (i INT);
CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @@session.sql_mode=1436549152;
CREATE PROCEDURE p1() SET @@session.sql_mode=1436549152;
--echo # pseudo_slave_mode is "off", assignment should fail as before:
--error ER_UNSUPPORTED_SQL_MODE
SET @@session.sql_mode=1436549152;
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
INSERT INTO t1 VALUES (1);
SELECT @@session.sql_mode;
--error ER_UNSUPPORTED_SQL_MODE
CALL p1;
SELECT @@session.sql_mode;
--echo #
SET @session_pseudo_slave_mode = @@session.pseudo_slave_mode;
SET @@session.pseudo_slave_mode = TRUE;
--echo # pseudo_slave_mode is "on", assignment should succeed:
SET @@session.sql_mode=1436549152;
SELECT @@session.sql_mode;
--echo # ... but the assignment in SBR-invoked triggers should continue to fail:
SET @@session.sql_mode = 0;
--error ER_UNSUPPORTED_SQL_MODE
INSERT INTO t1 VALUES (1);
SELECT @@session.sql_mode;
--echo # ... and in procedure calls:
--error ER_UNSUPPORTED_SQL_MODE
CALL p1;
SELECT @@session.sql_mode;
# Cleanup
DROP PROCEDURE p1;
DROP TABLE t1;
SET @@session.pseudo_slave_mode = @session_pseudo_slave_mode;
SET @@session.sql_mode = DEFAULT;
##############################
# Restore initial value #
##############################
SET @@global.sql_mode = @global_start_value;
SELECT @@global.sql_mode;
SET @@session.sql_mode = @session_start_value;
SELECT @@session.sql_mode;
################################################################
# END OF sql_mode TESTS #
################################################################