1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00
Files
mariadb/mysql-test/suite/sys_vars/t/transaction_read_only_basic.test
Junqi Xie d20a96f9c1 MDEV-21921 Make transaction_isolation and transaction_read_only into system variables
In MariaDB, we have a confusing problem where:
* The transaction_isolation option can be set in a configuration file, but it cannot be set dynamically.
* The tx_isolation system variable can be set dynamically, but it cannot be set in a configuration file.

Therefore, we have two different names for the same thing in different contexts. This is needlessly confusing, and it complicates the documentation. The same thing applys for transaction_read_only.

MySQL 5.7 solved this problem by making them into system variables. https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-20.html

This commit takes a similar approach by adding new system variables and marking the original ones as deprecated. This commit also resolves some legacy problems related to SET STATEMENT and transaction_isolation.
2023-04-12 11:04:29 +10:00

200 lines
8.7 KiB
Plaintext

######## mysql-test\suite\sys_vars\t\transaction_read_only_basic.test #########
# #
# Variable Name: transaction_read_only #
# Scope: GLOBAL & SESSION #
# Access Type: Dynamic #
# Data Type: boolean #
# Default Value: OFF #
# Range: #
# #
# #
# Creation Date: 2012-01-12 #
# Author: joh #
# #
# Description: Test Cases of Dynamic System Variable transaction_read_only #
# 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.6/en/ #
# server-system-variables.html #
# #
###############################################################################
--source include/load_sysvars.inc
--echo ####################################################################
--echo # START OF transaction_read_only TESTS #
--echo ####################################################################
--echo #############################################################
--echo # Save initial value #
--echo #############################################################
SET @start_global_value = @@global.transaction_read_only;
SELECT @start_global_value;
SET @start_session_value = @@session.transaction_read_only;
SELECT @start_session_value;
--echo ########################################################################
--echo # Display the DEFAULT value of transaction_read_only #
--echo ########################################################################
SET @@global.transaction_read_only = ON;
SET @@global.transaction_read_only = DEFAULT;
SELECT @@global.transaction_read_only;
SET @@session.transaction_read_only = ON;
SET @@session.transaction_read_only = DEFAULT;
SELECT @@session.transaction_read_only;
--echo ###############################################################################
--echo # Change the value of transaction_read_only to a valid value for GLOBAL Scope #
--echo ###############################################################################
SET @@global.transaction_read_only = ON;
SELECT @@global.transaction_read_only;
SET @@global.transaction_read_only = OFF;
SELECT @@global.transaction_read_only;
SET @@global.transaction_read_only = 0;
SELECT @@global.transaction_read_only;
SET @@global.transaction_read_only = 1;
SELECT @@global.transaction_read_only;
SET @@global.transaction_read_only = TRUE;
SELECT @@global.transaction_read_only;
SET @@global.transaction_read_only = FALSE;
SELECT @@global.transaction_read_only;
--echo ################################################################################
--echo # Change the value of transaction_read_only to a valid value for SESSION Scope #
--echo ################################################################################
SET @@session.transaction_read_only = ON;
SELECT @@session.transaction_read_only;
SET @@session.transaction_read_only = OFF;
SELECT @@session.transaction_read_only;
SET @@session.transaction_read_only = 0;
SELECT @@session.transaction_read_only;
SET @@session.transaction_read_only = 1;
SELECT @@session.transaction_read_only;
SET @@session.transaction_read_only = TRUE;
SELECT @@session.transaction_read_only;
SET @@session.transaction_read_only = FALSE;
SELECT @@session.transaction_read_only;
--echo #################################################################
--echo # Change the value of transaction_read_only to an invalid value #
--echo #################################################################
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = 'ONN';
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = "OFFF";
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = TTRUE;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = FELSE;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = -1024;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = 65536;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.transaction_read_only = 65530.34;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@global.transaction_read_only = test;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = ONN;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = ONF;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = OF;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = 'OFN';
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = -2;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@session.transaction_read_only = 65530.34;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = 65550;
--Error ER_WRONG_VALUE_FOR_VAR
SET @@session.transaction_read_only = test;
SELECT @@session.transaction_read_only;
--echo ####################################################################
--echo # Check if the value in GLOBAL Table matches value in variable #
--echo ####################################################################
SELECT IF(@@global.transaction_read_only, "ON", "OFF") = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='transaction_read_only';
--echo ####################################################################
--echo # Check if the value in SESSION Table matches value in variable #
--echo ####################################################################
SELECT IF(@@session.transaction_read_only, "ON", "OFF") = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
WHERE VARIABLE_NAME='transaction_read_only';
--echo ###############################################################################
--echo # Check if accessing variable with and without GLOBAL point to same variable #
--echo ###############################################################################
SET @@transaction_read_only = OFF;
SET @@global.transaction_read_only = ON;
SELECT @@transaction_read_only = @@global.transaction_read_only;
--echo ##############################################################################
--echo # Check if accessing variable with SESSION,LOCAL and without SCOPE points #
--echo # to same session variable #
--echo ##############################################################################
SET @@transaction_read_only = ON;
SELECT @@transaction_read_only = @@local.transaction_read_only;
SELECT @@local.transaction_read_only = @@session.transaction_read_only;
--echo ###############################################################################
--echo # Check if transaction_read_only can be accessed with and without @@ sign #
--echo ###############################################################################
--echo # @@session is synonym for SESSION
SET @@session.transaction_read_only= 0;
--echo # Without modifier, SET changes session variable
SET transaction_read_only = 1;
SELECT @@transaction_read_only;
--echo # name1.name2 refers to database_name.table_name
--Error ER_UNKNOWN_TABLE
SELECT session.transaction_read_only;
--echo ####################################
--echo # Restore initial value #
--echo ####################################
SET @@global.transaction_read_only = @start_global_value;
SELECT @@global.transaction_read_only;
SET @@session.transaction_read_only = @start_session_value;
SELECT @@session.transaction_read_only;
--echo #########################################################
--echo # END OF transaction_read_only TESTS #
--echo #########################################################