############## mysql-test\t\engine_condition_pushdown_basic.test ##############
#                                                                             #
# Variable Name: engine_condition_pushdown                                    #
# Scope: GLOBAL | SESSION                                                     #
# Access Type: Dynamic                                                        #
# Data Type: boolean                                                          #
# Default Value: OFF                                                          #
# Valid Values: ON, OFF                                                       #
#                                                                             #
#                                                                             #
# Creation Date: 2008-02-07                                                   #
# Author:  Rizwan                                                             #
#                                                                             #
# Description: Test Cases of Dynamic System Variable engine_condition_pushdown#
#              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 engine_condition_pushdown TESTS          #
######################################################################## 


############################################################################### 
#   Saving initial value of engine_condition_pushdown in a temporary variable #
###############################################################################

SET @session_start_value = @@session.engine_condition_pushdown;
SELECT @session_start_value;

SET @global_start_value = @@global.engine_condition_pushdown;
SELECT @global_start_value;

# same for optimizer_switch
select @old_session_opt_switch:=@@session.optimizer_switch,
@old_global_opt_switch:=@@global.optimizer_switch;

--echo '#--------------------FN_DYNVARS_028_01------------------------#'
######################################################################## 
#           Display the DEFAULT value of engine_condition_pushdown     #
######################################################################## 

SET @@session.engine_condition_pushdown = 0;
SET @@session.engine_condition_pushdown = DEFAULT;
SELECT @@session.engine_condition_pushdown;

SET @@global.engine_condition_pushdown = 0;
SET @@global.engine_condition_pushdown = DEFAULT;
SELECT @@global.engine_condition_pushdown;

--echo '#---------------------FN_DYNVARS_028_02-------------------------#'
###############################################################################
# Check if engine_condition_pushdown can be accessed with and without @@ sign #
###############################################################################

SET engine_condition_pushdown = 1;
SELECT @@engine_condition_pushdown;

--Error ER_UNKNOWN_TABLE
SELECT session.engine_condition_pushdown;

--Error ER_UNKNOWN_TABLE
SELECT local.engine_condition_pushdown;

--Error ER_UNKNOWN_TABLE
SELECT global.engine_condition_pushdown;

SET session engine_condition_pushdown = 0;
SELECT @@session.engine_condition_pushdown;

SET global engine_condition_pushdown = 0;
SELECT @@global.engine_condition_pushdown;


--echo '#--------------------FN_DYNVARS_028_03------------------------#'
########################################################################## 
#      change the value of engine_condition_pushdown to a valid value    #
########################################################################## 

SET @@session.engine_condition_pushdown = 0;
SELECT @@session.engine_condition_pushdown;
SET @@session.engine_condition_pushdown = 1;
SELECT @@session.engine_condition_pushdown;


SET @@global.engine_condition_pushdown = 0;
SELECT @@global.engine_condition_pushdown;
SET @@global.engine_condition_pushdown = 1;
SELECT @@global.engine_condition_pushdown;


--echo '#--------------------FN_DYNVARS_028_04-------------------------#'
########################################################################### 
#       Change the value of engine_condition_pushdown to invalid value    #
########################################################################### 

--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = -1;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@session.engine_condition_pushdown = 1.6;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = "T";
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = "Y";
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = TRÜE;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = ÕN;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = OF;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.engine_condition_pushdown = ÓFF;


--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = -1;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = 2;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = "T";
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = "Y";
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = TRÜE;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = ÕN;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = OF;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.engine_condition_pushdown = ÓFF;


--echo '#-------------------FN_DYNVARS_028_05----------------------------#'
########################################################################### 
#       Test if changing global variable effects session and vice versa   #
########################################################################### 

SET @@global.engine_condition_pushdown = 0;
SET @@session.engine_condition_pushdown = 1;
SELECT @@global.engine_condition_pushdown AS res_is_0;

SET @@global.engine_condition_pushdown = 0;
SELECT @@session.engine_condition_pushdown AS res_is_1;

--echo '#----------------------FN_DYNVARS_028_06------------------------#'
######################################################################### 
#     Check if the value in GLOBAL Table matches value in variable      #
#########################################################################

SELECT IF(@@global.engine_condition_pushdown, "ON", "OFF") = VARIABLE_VALUE 
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES 
WHERE VARIABLE_NAME='engine_condition_pushdown';
SELECT @@global.engine_condition_pushdown;
SELECT VARIABLE_VALUE 
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES 
WHERE VARIABLE_NAME='engine_condition_pushdown';

--echo '#----------------------FN_DYNVARS_028_07------------------------#'
######################################################################### 
#     Check if the value in SESSION Table matches value in variable     #
#########################################################################

SELECT IF(@@session.engine_condition_pushdown, "ON", "OFF") = VARIABLE_VALUE 
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
WHERE VARIABLE_NAME='engine_condition_pushdown';
SELECT @@session.engine_condition_pushdown;
SELECT VARIABLE_VALUE 
FROM INFORMATION_SCHEMA.SESSION_VARIABLES 
WHERE VARIABLE_NAME='engine_condition_pushdown';


--echo '#---------------------FN_DYNVARS_028_08-------------------------#'
################################################################### 
#        Check if ON and OFF values can be used on variable       #
################################################################### 

SET @@session.engine_condition_pushdown = OFF;
SELECT @@session.engine_condition_pushdown;
SET @@session.engine_condition_pushdown = ON;
SELECT @@session.engine_condition_pushdown;

SET @@global.engine_condition_pushdown = OFF;
SELECT @@global.engine_condition_pushdown;
SET @@global.engine_condition_pushdown = ON;
SELECT @@global.engine_condition_pushdown;

--echo '#---------------------FN_DYNVARS_028_09----------------------#'
################################################################### 
#      Check if TRUE and FALSE values can be used on variable     #
################################################################### 

SET @@session.engine_condition_pushdown = TRUE;
SELECT @@session.engine_condition_pushdown;
SET @@session.engine_condition_pushdown = FALSE;
SELECT @@session.engine_condition_pushdown;

SET @@global.engine_condition_pushdown = TRUE;
SELECT @@global.engine_condition_pushdown;
SET @@global.engine_condition_pushdown = FALSE;
SELECT @@global.engine_condition_pushdown;

--echo Check that @@engine_condition_pushdown influences
--echo @@optimizer_switch and vice-versa
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@session.engine_condition_pushdown = TRUE;
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@session.engine_condition_pushdown = FALSE;
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@global.engine_condition_pushdown = TRUE;
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@global.engine_condition_pushdown = FALSE;
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@session.optimizer_switch = "engine_condition_pushdown=on";
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@session.optimizer_switch = "engine_condition_pushdown=off";
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@global.optimizer_switch = "engine_condition_pushdown=on";
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;
set @@global.optimizer_switch = "engine_condition_pushdown=off";
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;

##############################  
#   Restore initial value    #
##############################

SET @@session.engine_condition_pushdown = @session_start_value;
SELECT @@session.engine_condition_pushdown;

SET @@global.engine_condition_pushdown = @global_start_value;
SELECT @@global.engine_condition_pushdown;

set @session.optimizer_switch=@old_session_opt_switch,
@@global.optimizer_switch=@old_global_opt_switch;
select @@session.engine_condition_pushdown,
@@global.engine_condition_pushdown,
@@session.optimizer_switch, @@global.optimizer_switch;

###############################################################
#                    END OF engine_condition_pushdown TESTS   #
############################################################### 
