403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/local/mysql/mysql-test/main/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/mysql/mysql-test/main/set_statement.test
--echo '# SET STATEMENT ..... FOR ....  TEST'
############################ STATEMENT_SET #############################
#                                                                      #
# Testing working functionality of SET STATEMENT                       #
#                                                                      #
#                                                                      #
# There is important documentation within                              #
#                                                                      #
#                                                                      #
# Author: Joe Lukas                                                    #
# Creation:                                                            #
# 2009-08-02 Implement this test as part of                            #
#                   WL#681 Per query variable settings                 #
#                                                                      #
########################################################################

--disable_warnings
DROP TABLE IF EXISTS t1;
DROP FUNCTION IF EXISTS myProc;
DROP PROCEDURE IF EXISTS p1;
DROP PROCEDURE IF EXISTS p2;
DROP PROCEDURE IF EXISTS p3;
DROP PROCEDURE IF EXISTS p4;
DROP PROCEDURE IF EXISTS p5;
DROP PROCEDURE IF EXISTS p6;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS STATEMENT;
--enable_warnings
SET @save_binlog_format           = @@binlog_format;
SET @save_keep_files_on_create    = @@keep_files_on_create;
SET @save_max_join_size           = @@max_join_size;
SET @save_myisam_repair_threads   = @@myisam_repair_threads;
SET @save_myisam_sort_buffer_size = @@myisam_sort_buffer_size;
SET @save_sort_buffer_size        = @@sort_buffer_size;
####################################################################
#Set up current database
####################################################################
--echo '# Setup database'
CREATE TABLE t1 (v1 INT, v2 INT);
INSERT INTO t1 VALUES (1,2);
INSERT INTO t1 VALUES (3,4);
--echo ''
--echo '#------------------ STATEMENT Test 1 -----------------------#'
####################################################################
#   Checks with variable value type ulong                          #
####################################################################
--echo '# Initialize variables to known setting'
SET SESSION sort_buffer_size=100000;
--echo ''
--echo '# Pre-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
SET STATEMENT sort_buffer_size=150000 FOR SELECT *,@@sort_buffer_size FROM t1;
--echo ''
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
--echo ''
--echo '#------------------ STATEMENT Test 2 -----------------------#'
####################################################################
#   Checks for multiple set values inside STATEMENT ... FOR        #
####################################################################
--echo '# Initialize variables to known setting'
SET SESSION binlog_format=mixed;
SET SESSION sort_buffer_size=100000;
--echo '# Pre-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'binlog_format';
SET STATEMENT sort_buffer_size=150000, binlog_format=row
 FOR SELECT *,@@sort_buffer_size,@@binlog_format FROM t1;
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'binlog_format';

--echo ''
--echo '#------------------ STATEMENT Test 3 -----------------------#'
####################################################################
#   Check current variable value is stored in using stored         #
#   statements.                                                    #
####################################################################
--echo '# set initial variable value, make prepared statement
SET SESSION binlog_format=row;
PREPARE stmt1 FROM 'SET STATEMENT binlog_format=row FOR SELECT *,@@binlog_format FROM t1';
--echo ''
--echo '# Change variable setting'
SET SESSION binlog_format=mixed;
--echo ''
--echo '# Pre-STATEMENT variable value'
--echo ''
SHOW SESSION VARIABLES LIKE 'binlog_format';
--echo ''
EXECUTE stmt1;
--echo ''
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'binlog_format';

--echo ''
DEALLOCATE PREPARE stmt1;
--echo '#------------------ STATEMENT Test 4 -----------------------#'
####################################################################
#   Check works with OPTIMIZE TABLE command                        #
#   Checks works with a variable value of type INT                 #
#   Checks works with variable type ULONGLONG                      #
####################################################################
--echo '# set initial variable value, make prepared statement
SET SESSION myisam_sort_buffer_size=500000, myisam_repair_threads=1;
--echo ''
--echo '# Pre-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'myisam_sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'myisam_repair_threads';
--echo ''
SET STATEMENT myisam_sort_buffer_size=800000,
              myisam_repair_threads=2 FOR OPTIMIZE TABLE t1;
--echo ''
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'myisam_sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'myisam_repair_threads';

--echo ''
--echo '#------------------ STATEMENT Test 5 -----------------------#'
####################################################################
#   Checks if variable reset after error in statement after FOR    #
####################################################################
--echo '# Initialize variables to known setting'
SET SESSION sort_buffer_size=100000;
--echo ''
--echo '# Pre-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
--echo ''
--error ER_NO_SUCH_TABLE
SET STATEMENT sort_buffer_size=150000 FOR SELECT * FROM t2;
--echo ''
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';

--echo ''
--echo '#------------------ STATEMENT Test 6 -----------------------#'
####################################################################
#   Checks works with variable type MY_BOOL                        #
####################################################################
--echo '# Initialize variables to known setting'
SET SESSION  keep_files_on_create=ON;
--echo ''
--echo '# Pre-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'keep_files_on_create';
--echo ''
SET STATEMENT keep_files_on_create=OFF FOR SELECT *,@@keep_files_on_create FROM t1;
--echo ''
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'keep_files_on_create';

--echo ''
--echo '#------------------ STATEMENT Test 7 -----------------------#'
####################################################################
#   Checks works with variable type HA_ROWS                        #
####################################################################
--echo '# Initialize variables to known setting'
SET SESSION  max_join_size=2222220000000;
--echo ''
--echo '# Pre-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'max_join_size';
--echo ''
SET STATEMENT max_join_size=1000000000000 FOR SELECT *,@@max_join_size FROM t1;
--echo ''
--echo '# Post-STATEMENT variable value'
SHOW SESSION VARIABLES LIKE 'max_join_size';

--echo ''
--echo '#------------------Test 8-----------------------#'
####################################################################
#   Ensure variable of each type is set to proper value during     #
#   statement after FOR execution                                  #
####################################################################
--echo '# Initialize test variables'
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size = 200000,
            max_join_size=2222220000000,
            keep_files_on_create=ON;

--echo ''
--echo '#  LONG    '
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
SET STATEMENT sort_buffer_size = 100000
              FOR SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
--echo ''
--echo '# MY_BOOL     '
SHOW SESSION VARIABLES LIKE 'keep_files_on_create';
SET STATEMENT keep_files_on_create=OFF
              FOR SHOW SESSION VARIABLES LIKE 'keep_files_on_create';
SHOW SESSION VARIABLES LIKE 'keep_files_on_create';

--echo ''
--echo '# INT/LONG    '
SHOW SESSION VARIABLES LIKE 'myisam_repair_threads';
SET STATEMENT myisam_repair_threads=2
              FOR SHOW SESSION VARIABLES LIKE 'myisam_repair_threads';
SHOW SESSION VARIABLES LIKE 'myisam_repair_threads';
--echo ''
--echo '# ULONGLONG     '
SHOW SESSION VARIABLES LIKE 'max_join_size';
SET STATEMENT max_join_size=2000000000000
              FOR SHOW SESSION VARIABLES LIKE 'max_join_size';
SHOW SESSION VARIABLES LIKE 'max_join_size';

--echo ''
--echo '#------------------Test 9-----------------------#'
####################################################################
#   No 1 - Check works with CREATE ... BEGIN ... END  command      #
#          Display variables during execution                      #
#   No 2 - Test with DROP command                                  #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
DELIMITER |;
CREATE FUNCTION myProc (cost DECIMAL(10,2))
   RETURNS DECIMAL(10,2)

   SQL SECURITY DEFINER

   tax: BEGIN
       DECLARE order_tax DECIMAL(10,2);
       SET order_tax = cost * .05 + @@sort_buffer_size;
       RETURN order_tax;
   END|
DELIMITER ;|
--echo ''
--echo '# During Execution values
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              SELECT myProc(123.45);
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=300000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              SELECT myProc(123.45);
--echo ''
--echo '# Post-STATEMENT No 1 variable value Pre-STATEMENT for No 2'
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              DROP FUNCTION myProc;
--echo ''
--echo '# Post-STATEMENT No 2 variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;

--echo ''
--echo '#------------------Test 11-----------------------#'
####################################################################
#   No 1 - Check with PREPARE statement                            #
#          check with different variable on inside PREPARE         #
#   No 2 - Check with EXECUTE statement                            #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              PREPARE stmt1 FROM
             'SET STATEMENT binlog_format=row FOR SELECT *,@@binlog_format,@@sort_buffer_size FROM t1';
--echo ''
--echo 'Test No 1 Post Value & Test 2 Pre values'
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              EXECUTE stmt1;
--echo ''
--echo '# Post-STATEMENT No 2
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
--echo '#------------------Test 12-----------------------#'
####################################################################
#   No 1 - Check with PROCEDURE     (show variables in procedure)  #
#   No 2 - Check with CALL statement show variables in PROCEDURE   #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
DELIMITER |;
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              CREATE PROCEDURE p1() BEGIN
              SELECT @@myisam_sort_buffer_size,
                     @@myisam_repair_threads,
                     @@sort_buffer_size,
                     @@binlog_format,
                     @@keep_files_on_create,
                     @@max_join_size;
              END|
DELIMITER ;|
--echo ''
--echo 'Test No 1 Post Value & Test 2 Pre values'
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400001,
              myisam_repair_threads=3,
              sort_buffer_size=200001,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000001 FOR
              CALL p1();
--echo ''
--echo '# Post-STATEMENT No 2
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''

--echo '#------------------Test 13-----------------------#'
####################################################################
#   Check PROCEDURE containing SET STATEMENT FOR                   #
#      p1() from test 12 will be used to display variables         #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo ''
DELIMITER |;
CREATE PROCEDURE p2() BEGIN
       SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=3,
              sort_buffer_size=300000,
              binlog_format=mixed,
              keep_files_on_create=OFF,
              max_join_size=3333330000000 FOR
              CALL p1();
              END|
DELIMITER ;|
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              CALL p2();
--echo ''
--echo '# Post-STATEMENT
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
--echo '#------------------Test 14-----------------------#'
####################################################################
#   Check PROCEDURE containing compound SET STATEMENT FOR          #
#      p2() will be used as compounding statement from test 13     #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo ''
DELIMITER |;
CREATE PROCEDURE p3() BEGIN
       SELECT @@myisam_sort_buffer_size,
              @@myisam_repair_threads,
              @@sort_buffer_size,
              @@binlog_format,
              @@keep_files_on_create,
              @@max_join_size;
       SET STATEMENT myisam_sort_buffer_size=320000,
              myisam_repair_threads=2,
              sort_buffer_size=220022,
              binlog_format=row,
              keep_files_on_create=ON,
              max_join_size=2222220000000 FOR
              CALL p2();
              END|
DELIMITER ;|
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              CALL p3();
--echo ''
--echo '# Post-STATEMENT
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''

       --echo ''
--echo ''
--echo '#------------------Test 15-----------------------#'
####################################################################
#   Check PROCEDURE containing compound SET STATEMENT FOR          #
#      call multiple SET STATEMENT .. FOR showing SELECT           #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo ''
DELIMITER |;
CREATE PROCEDURE p4() BEGIN
       SELECT @@myisam_sort_buffer_size,
              @@myisam_repair_threads,
              @@sort_buffer_size,
              @@binlog_format,
              @@keep_files_on_create,
              @@max_join_size;
       SET STATEMENT myisam_sort_buffer_size=320000,
              myisam_repair_threads=2,
              sort_buffer_size=220022,
              binlog_format=row,
              keep_files_on_create=ON,
              max_join_size=2222220000000 FOR
              SELECT @@myisam_sort_buffer_size,
              @@myisam_repair_threads,
              @@sort_buffer_size,
              @@binlog_format,
              @@keep_files_on_create,
              @@max_join_size;
       SET STATEMENT myisam_sort_buffer_size=320000,
              myisam_repair_threads=2,
              sort_buffer_size=220022,
              binlog_format=row,
              keep_files_on_create=ON,
              max_join_size=2222220000000 FOR
              SELECT @@myisam_sort_buffer_size,
              @@myisam_repair_threads,
              @@sort_buffer_size,
              @@binlog_format,
              @@keep_files_on_create,
              @@max_join_size;
       SET STATEMENT myisam_sort_buffer_size=320000,
              myisam_repair_threads=2,
              sort_buffer_size=220022,
              binlog_format=row,
              keep_files_on_create=ON,
              max_join_size=2222220000000 FOR
              SELECT @@myisam_sort_buffer_size,
              @@myisam_repair_threads,
              @@sort_buffer_size,
              @@binlog_format,
              @@keep_files_on_create,
              @@max_join_size;
              END|
DELIMITER ;|
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              CALL p4();
--echo ''
--echo '# Post-STATEMENT
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;

--echo ''
--echo ''
--echo '#------------------Test 16-----------------------#'
####################################################################
#   Test Effect on parsing                                         #
####################################################################
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@sql_mode;
--echo ''
--echo ''
SET STATEMENT sql_mode='ansi' FOR PREPARE stmt FROM 'SELECT "t1".* FROM t1';
execute stmt;
ALTER TABLE t1 ADD COLUMN v3 int;
# repreparation with other mode does not cause an error
execute stmt;
ALTER TABLE t1 drop COLUMN v3;
deallocate prepare stmt;
--echo ''
--echo '# Post-STATEMENT
SELECT @@sql_mode;
--echo check the same behaviour in normal set
SET sql_mode='ansi';
PREPARE stmt FROM 'SELECT "t1".* FROM t1';
SET sql_mode=default;
execute stmt;
ALTER TABLE t1 ADD COLUMN v3 int;
# repreparation with other mode does not cause an error
execute stmt;
ALTER TABLE t1 drop COLUMN v3;
deallocate prepare stmt;
# the above test about SP
SELECT @@sql_mode;
SET sql_mode='ansi';
SELECT @@sql_mode;
DELIMITER |;
              CREATE PROCEDURE p6() BEGIN
              SELECT @@sql_mode;
              SELECT "t1".* FROM t1;
              END|
DELIMITER ;|
SET sql_mode=default;
call p6;
ALTER TABLE t1 ADD COLUMN v3 int;
#force SP stack invalidation
create view v1 as select * from t1;
drop view v1;
call p6;
ALTER TABLE t1 drop COLUMN v3;
drop procedure p6;


SELECT @@sql_mode;
DELIMITER |;
--echo # SET and the statement parsed as one unit before the SET takes effect
--error ER_PARSE_ERROR
SET STATEMENT sql_mode='ansi' FOR
              CREATE PROCEDURE p6() BEGIN
              SELECT @@sql_mode;
              SELECT "t1".* FROM t1;
              END|
DELIMITER ;|
#call p1;
#ALTER TABLE t1 ADD COLUMN v3 int;
#--echo # no reparsing for now
#call p1;
#ALTER TABLE t1 drop COLUMN v3;
#drop procedure p1;


# the above test about compound statement
SELECT @@sql_mode;
SET sql_mode='ansi';
SELECT @@sql_mode;
DELIMITER |;
BEGIN NOT ATOMIC
              SELECT @@sql_mode;
              SELECT "t1".* FROM t1;
END|
DELIMITER ;|
SET sql_mode=default;


SELECT @@sql_mode;
DELIMITER |;
--echo # SET and the statement parsed as one unit before the SET takes effect
--error ER_PARSE_ERROR
SET STATEMENT sql_mode='ansi' FOR
BEGIN NOT ATOMIC
              SELECT @@sql_mode;
              SELECT "t1".* FROM t1;
END|
SET STATEMENT sql_mode='ansi' FOR
BEGIN NOT ATOMIC
              SELECT @@sql_mode;
              SELECT * FROM t1;
              SELECT @@sql_mode;
END|
DELIMITER ;|
--echo ''
--echo ''
--echo '#------------------Test 17-----------------------#'
####################################################################
#   Test effect of SET STATEMENT FOR with SET SESSION modifying    #
#   the same variables as the SET STATEMENT                        #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=320000,
           myisam_repair_threads=2,
           sort_buffer_size=220022,
           binlog_format=row,
           keep_files_on_create=ON,
           max_join_size=2222220000000
           FOR SET SESSION
           myisam_sort_buffer_size=260000,
           myisam_repair_threads=3,
           sort_buffer_size=230013,
           binlog_format=row,
           keep_files_on_create=ON,
           max_join_size=2323230000000;

--echo ''
--echo '# Post-STATEMENT
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;

--echo ''
--echo ''
--echo '#------------------Test 18-----------------------#'
####################################################################
#   Test effect of SET SESSION inside a stored procedure with      #
#   with a SET STATEMENT on outside variables                      #
####################################################################
--echo '# set initial variable values
SET SESSION myisam_sort_buffer_size=500000,
            myisam_repair_threads=1,
            sort_buffer_size=100000,
            binlog_format=mixed,
            keep_files_on_create=ON,
            max_join_size=2222220000000;
--echo ''
--echo '# Pre-STATEMENT variable value
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;
--echo ''
--echo ''
DELIMITER |;
CREATE PROCEDURE p5() BEGIN
	  SELECT @@myisam_sort_buffer_size,
             @@myisam_repair_threads,
             @@sort_buffer_size,
             @@binlog_format,
             @@keep_files_on_create,
             @@max_join_size;
		SET SESSION
           myisam_sort_buffer_size=260000,
           myisam_repair_threads=3,
           sort_buffer_size=230013,
           binlog_format=row,
           keep_files_on_create=ON,
           max_join_size=2323230000000;
      SELECT @@myisam_sort_buffer_size,
             @@myisam_repair_threads,
             @@sort_buffer_size,
             @@binlog_format,
             @@keep_files_on_create,
             @@max_join_size;
        END|
DELIMITER ;|
--echo ''
--echo ''
SET STATEMENT myisam_sort_buffer_size=400000,
              myisam_repair_threads=2,
              sort_buffer_size=200000,
              binlog_format=row,
              keep_files_on_create=OFF,
              max_join_size=4444440000000 FOR
              CALL p5();

--echo ''
--echo '# Post-STATEMENT
SELECT @@myisam_sort_buffer_size,
       @@myisam_repair_threads,
       @@sort_buffer_size,
       @@binlog_format,
       @@keep_files_on_create,
       @@max_join_size;

--echo ''
--echo ''
--echo '#------------------Test 19-----------------------#'
#Test for bad syntax
--error ER_PARSE_ERROR 
SET STATEMENT max_error_count=100 FOR;
--error ER_PARSE_ERROR
SET STATEMENT max_error_count=100 INSERT t1 VALUES (1,2);
--error ER_PARSE_ERROR
SET STATEMENT FOR INSERT INTO t1 VALUES (1,2);
--error ER_PARSE_ERROR
SET max_error_count=100 FOR INSERT INTO t1 VALUES (1,2);
--error ER_PARSE_ERROR
SET STATEMENT GLOBAL max_error_count=100 FOR INSERT INTO t1 VALUES (1,2);
--error ER_PARSE_ERROR
SET STATEMENT @@global.max_error_count=100 FOR INSERT INTO t1 VALUES (1,2);

--echo ''
--echo ''
--echo '#------------------Test 20-----------------------#'
#Test for global-only variables
--error ER_GLOBAL_VARIABLE
SET STATEMENT connect_timeout=100 FOR INSERT INTO t1 VALUES (1,2); 

--echo ''
--echo ''
--echo '#------------------Test 21-----------------------#'
#Test for recursion
SELECT @@myisam_sort_buffer_size, @@sort_buffer_size;
SET STATEMENT myisam_sort_buffer_size = 700000, sort_buffer_size = 3000000
  FOR SET STATEMENT myisam_sort_buffer_size=200000
    FOR SELECT @@myisam_sort_buffer_size, @@sort_buffer_size;
SELECT @@myisam_sort_buffer_size, @@sort_buffer_size;

--echo ''
--echo ''
--echo '#------------------Test 22-----------------------#'
#Test for STATEMENT keyword
CREATE TABLE STATEMENT(a INT);
DROP TABLE STATEMENT;

--echo ''
--echo '# Cleanup'
DROP TABLE t1;
DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP PROCEDURE p3;
DROP PROCEDURE p4;
DROP PROCEDURE p5;

#
# Limitation of opening tables for set operation
#
CREATE TABLE t1 (v1 INT, v2 INT);
insert into t1 values (1,1);
DELIMITER |;
CREATE FUNCTION myProc ()
   RETURNS INT

   SQL SECURITY DEFINER

   BEGIN
       DECLARE mx INT;
       SET mx = (select max(v1) from t1);
       RETURN mx;
   END|
DELIMITER ;|
--error ER_SUBQUERIES_NOT_SUPPORTED
SET STATEMENT myisam_repair_threads=(select max(v1) from t1) FOR
  select 1;

--error ER_SUBQUERIES_NOT_SUPPORTED
SET STATEMENT myisam_repair_threads=myProc() FOR
  select 1;
drop function myProc;
drop table t1;

#
# Prepared Statement
#
set session binlog_format=mixed;
PREPARE stmt1 FROM 'SELECT @@binlog_format';
execute stmt1;
set statement binlog_format=row for execute stmt1;
execute stmt1;
deallocate prepare stmt1;
set statement binlog_format=row for PREPARE stmt1 FROM 'SELECT @@binlog_format';
execute stmt1;
execute stmt1;
deallocate prepare stmt1;
PREPARE stmt1 FROM 'set statement binlog_format=row for SELECT @@binlog_format';
execute stmt1;
execute stmt1;
deallocate prepare stmt1;
set session binlog_format=default;

#
# Percona server bug#1341438
# SET SESSION statement combined with SET STATEMENT has no effect
#
set session binlog_format=mixed;
SET STATEMENT sort_buffer_size=150000 FOR set session binlog_format=row;
SELECT @@binlog_format;

#
# restore variables of original tests
#
SET @@binlog_format           = @save_binlog_format;
SET @@keep_files_on_create    = @save_keep_files_on_create;
SET @@max_join_size           = @save_max_join_size;
SET @@myisam_repair_threads   = @save_myisam_repair_threads;
SET @@myisam_sort_buffer_size = @save_myisam_sort_buffer_size;
SET @@sort_buffer_size        = @save_sort_buffer_size;

#
# Percona sever bug#1341606
# SET STATEMENT incorrectly restore vaues of some variables
#
--echo #Correctly set timestamp
set session timestamp=4646464;
select @@timestamp != 4646464;
select @@timestamp != 4646464;
--echo #Correctly returned normal behaviour
set session timestamp=default;
select @@timestamp != 4646464;
select @@timestamp != 4646464;
--echo #here timestamp should be set only for the statement then restored default
set statement timestamp=4646464 for select @@timestamp;
set @save_tm=@@timestamp;
select @@timestamp != 4646464;
select @@timestamp != 4646464;
let $wait_condition=select @@timestamp != @save_tm;
source include/wait_condition.inc;
eval $wait_condition;

#
# Test of temporary changing default storage engine
#
set @save_dfs=@@default_storage_engine;
SET @@default_storage_engine=MyISAM;
SET STATEMENT default_storage_engine=MEMORY for CREATE TABLE t1 (a int);
SHOW CREATE TABLE t1;
select @@default_storage_engine;
drop table t1;
SET STATEMENT default_storage_engine=MyISAM for CREATE TABLE t1 (a int);
SHOW CREATE TABLE t1;
drop table t1;
SET @@default_storage_engine=@save_dfs;

#
# MDEV-6946:Assertion `0' failed in mysql_execute_command on SET STATEMENT
# keycache1.key_buffer_size=.. FOR
#
--error ER_GLOBAL_VARIABLE
SET STATEMENT keycache1.key_buffer_size=1024 FOR SELECT 1;


#
# MDEV-6940: SET STATEMENT executed after SET GLOBAL does not work
#
--disable_cursor_protocol
--disable_ps2_protocol
--disable_view_protocol
set @save_general_log=@@global.general_log;
--echo # SET STATEMENT works (OK)
set statement lock_wait_timeout=1 for select @@lock_wait_timeout;
--echo # Setting a totally unrelated global variable
set global general_log=0;
--echo # SET STATEMENT should work
set statement lock_wait_timeout=1 for select @@lock_wait_timeout;
set global general_log=@save_general_log;

--echo # MDEV-7006 MDEV-7007: SET statement and slow log

set @save_long_query_time= @@long_query_time;
set @save_slow_query_log= @@slow_query_log;
set @save_log_output= @@log_output;

let $long_query_time=`select @@long_query_time`;
--replace_result $long_query_time DEFAULT
set statement long_query_time=default for select @@long_query_time;

# Disable result log as the results depends on the values of the variables
--disable_result_log
set statement log_slow_filter=default for select @@log_slow_filter;
set statement log_slow_verbosity=default for select @@log_slow_verbosity;
set statement log_slow_rate_limit=default for select @@log_slow_rate_limit;
set statement slow_query_log=default for select @@slow_query_log;
--enable_result_log

truncate table mysql.slow_log;
set slow_query_log= 1;
set global log_output='TABLE';

select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
set @@long_query_time=0.01;
--echo #should be written
select sleep(0.1);
set @@long_query_time=@save_long_query_time;
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--echo #should be written
set statement long_query_time=0.01 for select sleep(0.1);
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--echo #should be written
set statement log_slow_query_time=0.01 for select sleep(0.1);
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
set @@long_query_time=0.01;
--echo #should NOT be written
set statement slow_query_log=0 for select sleep(0.1);
set @@long_query_time=@save_long_query_time;
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--echo #should NOT be written
set statement long_query_time=0.01,log_slow_filter='full_scan' for select sleep(0.1);
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--echo #should NOT be written
set statement long_query_time=0.01,log_slow_rate_limit=9999 for select sleep(0.1);
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--echo #should NOT be written
set statement long_query_time=0.01,min_examined_row_limit=50 for select sleep(0.1);
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--echo #should NOT be written
set statement long_query_time=0.01,log_slow_min_examined_row_limit=50 for select sleep(0.1);
select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%';
--echo #---
--enable_view_protocol
--enable_ps2_protocol
--enable_cursor_protocol
#
# log_slow_verbosity is impossible to check because results are not written
# in TABLE mode
#

set global log_output= @save_log_output;
set @@slow_query_log= @save_slow_query_log;
set @@long_query_time= @save_long_query_time;
truncate table mysql.slow_log;


#
# Prohibited Variables
#
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement autocommit=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement tx_isolation=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement skip_replication=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement sql_log_off=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement character_set_client=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement character_set_connection=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement character_set_filesystem=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement collation_connection=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement query_cache_type=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement wait_timeout=default for select 1;
--error ER_SET_STATEMENT_NOT_SUPPORTED
set statement interactive_timeout=default for select 1;

# MDEV-6996: SET STATEMENT default_week_format = .. has no effect
set @save_week_format=@@default_week_format;
set @@default_week_format=0;
SET STATEMENT default_week_format = 2 FOR SELECT WEEK('2000-01-01');
create table t1 (a date);
insert t1 values ('2000-01-01');
explain extended select week(a) from t1;
prepare stmt1 from "select week(a) from t1";
execute stmt1;
set default_week_format = 2;
execute stmt1;
alter table t1 engine=myisam;
execute stmt1;
deallocate prepare stmt1;
drop table t1;
set @@default_week_format=@save_week_format;

# MDEV-7015: SET STATEMENT old_passwords has no effect
set @save_old_passwords=@@old_passwords;
set @@old_passwords=0;
set statement OLD_PASSWORDS = 0 for select password('test');
set statement OLD_PASSWORDS = 1 for select password('test');
set statement OLD_PASSWORDS = 0 for explain extended select password('test');
set statement OLD_PASSWORDS = 1 for explain extended select password('test');
create table t1 (a char(10));
insert t1 values ('qwertyuiop');
prepare stmt1 from "select password(a) from t1";
execute stmt1;
set old_passwords=1;
execute stmt1;
alter table t1 engine=myisam;
execute stmt1;
deallocate prepare stmt1;
drop table t1;
set @@old_passwords=@save_old_passwords;

--echo #
--echo #MDEV-6951:Erroneous SET STATEMENT produces two identical errors 
--echo #

--error ER_UNKNOWN_SYSTEM_VARIABLE
set statement non_existing=1 for select 1;
show errors;

--echo #
--echo # MDEV-6954: SET STATEMENT rand_seedX = ...FOR ... makes
--echo # the next rand() to return 0
--echo #
set @rnd=1;
let $1=10;
--disable_query_log
--echo # test that rand() is not always 0 after restoring rand_seed, rand_seed2...
while ($1)
{
  --disable_result_log
  set statement rand_seed1=1, rand_seed2=1 for select 1;
  --enable_result_log
  set @rnd= rand()=0 and @rnd;
  dec $1;
}
--enable_query_log
--echo # @rnd should be 0
select @rnd;


--echo #
--echo # MDEV-24860: Incorrect behaviour of SET STATEMENT in case
--echo #             it is executed as a prepared statement
--echo #
PREPARE stmt FROM "SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR CREATE TABLE t1 AS SELECT CONCAT('abc') AS c1";
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

--echo # Show definition of the table t1 created using Prepared Statement
SHOW CREATE TABLE t1;

DROP TABLE t1;

--echo # Create the table t1 with the same definition as it used before
--echo # using regular statement execution mode.
SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR CREATE TABLE t1 AS SELECT CONCAT('abc') AS c1;

--echo # Show that the table has the same definition as it is in case the table
--echo # created in prepared statement mode.
SHOW CREATE TABLE t1;

DROP TABLE t1;

--echo #
--echo # MDEV-29074 GET_BIT variables crash in SET STATEMENT
--echo #
set statement log_queries_not_using_indexes=1 for select @@log_queries_not_using_indexes;
select @@log_queries_not_using_indexes;

--echo #
--echo # End of 10.3 tests
--echo #

create table t (a int);
SET sql_mode=ORACLE;
SET STATEMENT myisam_sort_buffer_size=800000 FOR OPTIMIZE TABLE t;
SET sql_mode=default;
SET STATEMENT myisam_sort_buffer_size=800000 FOR OPTIMIZE TABLE t;
drop table t;


--echo #
--echo # MDEV-18358: Server crash when using SET STATEMENT max_statement_time
--echo #
SET sql_mode=ORACLE;
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
SET sql_mode=default;
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';

--echo #
--echo # MDEV-17711 Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT
--echo #

--disable_ps_protocol
--delimiter $
set rand_seed1=1, rand_seed2=2;
set statement rand_seed1=4 for select 2, @@rand_seed1, @@rand_seed2;
set statement rand_seed2=5 for select 3, @@rand_seed1, @@rand_seed2 $
--delimiter ;
--enable_ps_protocol

--echo #
--echo # End of 10.4 tests
--echo #

Youez - 2016 - github.com/yon3zu
LinuXploit