#################### 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 # ################################################################