Skip to content

Commit

Permalink
Support java client by adding tx_isolation / query_cache_size / query…
Browse files Browse the repository at this point in the history
…_cache_type / tx_readonly variables

Summary:
5.6 Java client we have today will issue following SQL query on connect:

```
/* MYSQL_CJ_FULL_PROD_NAME@ ( Revision: MYSQL_CJ_REVISION@ ) */SELECT  session.auto_increment_increment AS auto_increment_increment, character_set_client AS character_set_client, character_set_connection AS character_set_connection, character_set_results AS character_set_results, character_set_server AS character_set_server, init_connect AS init_connect, interactive_timeout AS interactive_timeout, license AS license, lower_case_table_names AS lower_case_table_names, max_allowed_packet AS max_allowed_packet, net_buffer_length AS net_buffer_length, net_write_timeout AS net_write_timeout, query_cache_size AS query_cache_size, query_cache_type AS query_cache_type, sql_mode AS sql_mode, system_time_zone AS system_time_zone, Timeroot_zone AS time_zone, tx_isolation AS tx_isolation, wait_timeout AS wait_timeout
```

It'll fail on 8.0 as tx_isolation is replaced by transaction_isolation, and query_cache_size/query_cache_type are deprecated (query cache feature is gone in 8.0). This adds a reasonable implementation of those variables to make the connector happy (without introducing other issues, hopefully), before we migrate our java client to 8.0:
1. Add dummy implementation of query_cache_size / query_cache_type that returns 0 size and cache off. Both are readonly. Note I changed query_cache_type to global as I don't want to pay for the extra bytes for a readonly variable and it doesn't make too much sense for a session variable to be read-only anyway. A new test is added as well.
2. Add read-only tx_isolation that directly maps to transaction_isolation variable. transaction_isolation_basic test is enhanced to ensure any change to transaction_isolation gets mapped to tx_isolation (which just works since they are the same variable on thd session)
3. Add read-only tx_read_only maps to transaction_read_only similar to #2 for cases Java cient calls connection.isReadOnly.

Reviewed By: zhichengzhu

Differential Revision: D19551619
  • Loading branch information
yizhang82 authored and inikep committed Aug 6, 2024
1 parent 3e4a41b commit 5039128
Show file tree
Hide file tree
Showing 17 changed files with 257 additions and 11 deletions.
2 changes: 0 additions & 2 deletions mysql-test/collections/disabled_rocksdb.def
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,6 @@ rocksdb.bypass_select_scenarios_bloom : BUG#0000 Rebase: not-yet-implemented
rocksdb.verify_tbl_share_primary_idx : BUG#0000 Rebase: not-yet-implemented
rocksdb.bypass_select_range_sk_bloom : BUG#0000 Rebase: not-yet-implemented
rocksdb.bypass_select_basic_bloom : BUG#0000 Rebase: not-yet-implemented
rocksdb.rocksdb_deadlock_detect_rc : BUG#0000 Rebase: not-yet-implemented
rocksdb.rocksdb_deadlock_detect_rr : BUG#0000 Rebase: not-yet-implemented
rocksdb.bloomfilter2 : BUG#0000 Rebase: not-yet-implemented
rocksdb.bloomfilter3 : BUG#0000 Rebase: not-yet-implemented
rocksdb.skip_scan : BUG#0000 Rebase: not-yet-implemented
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,6 @@ ERROR 42000: Variable 'per_user_session_var_default_val' can't be set to the val
## Unsupported type 'flagset'
SET GLOBAL per_user_session_var_default_val = "u1:optimizer_switch=xyz";
ERROR 42000: Variable 'per_user_session_var_default_val' can't be set to the value of 'u1:optimizer_switch=xyz'
## Read-Only
SET GLOBAL per_user_session_var_default_val = "usr1:tx_isolation=READ-COMMITTED";
ERROR 42000: Variable 'per_user_session_var_default_val' can't be set to the value of 'usr1:tx_isolation=READ-COMMITTED'
##
## root privilege is required to set session variable binglog_format
## root privilege will be granted to usr1 temporarily to get this done
Expand Down
5 changes: 5 additions & 0 deletions mysql-test/suite/sys_vars/r/query_cache_size_basic.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
SELECT @@global.query_cache_size;
@@global.query_cache_size
0
SET @@global.query_cache_size=10*1024;
ERROR HY000: Variable 'query_cache_size' is a read only variable
5 changes: 5 additions & 0 deletions mysql-test/suite/sys_vars/r/query_cache_type_basic.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
SELECT @@global.query_cache_type;
@@global.query_cache_type
OFF
SET @@global.query_cache_type='ON';
ERROR HY000: Variable 'query_cache_type' is a read only variable
70 changes: 70 additions & 0 deletions mysql-test/suite/sys_vars/r/transaction_isolation_basic.result
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,16 @@ SET @@global.transaction_isolation = DEFAULT;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
REPEATABLE-READ
SELECT @@global.tx_isolation;
@@global.tx_isolation
REPEATABLE-READ
SET @@session.transaction_isolation = DEFAULT;
SELECT @@session.transaction_isolation;
@@session.transaction_isolation
REPEATABLE-READ
SELECT @@session.tx_isolation;
@@session.tx_isolation
REPEATABLE-READ
#########################################################
# Check if NULL or empty value is accepeted #
#########################################################
Expand All @@ -45,34 +51,58 @@ SET @@global.transaction_isolation = 'READ-UNCOMMITTED';
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
READ-UNCOMMITTED
SELECT @@global.tx_isolation;
@@global.tx_isolation
READ-UNCOMMITTED
SET @@global.transaction_isolation = 'read-COMMITTED';
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
READ-COMMITTED
SELECT @@global.tx_isolation;
@@global.tx_isolation
READ-COMMITTED
SET @@global.transaction_isolation = 'REPEATABLE-READ';
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
REPEATABLE-READ
SELECT @@global.tx_isolation;
@@global.tx_isolation
REPEATABLE-READ
SET @@global.transaction_isolation = 'SERIALIZable';
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
SERIALIZABLE
SELECT @@global.tx_isolation;
@@global.tx_isolation
SERIALIZABLE
SET @@session.transaction_isolation = 'READ-UNCOMMITTED';
SELECT @@session.transaction_isolation;
@@session.transaction_isolation
READ-UNCOMMITTED
SELECT @@session.tx_isolation;
@@session.tx_isolation
READ-UNCOMMITTED
SET @@session.transaction_isolation = 'READ-COMMITTED';
SELECT @@session.transaction_isolation;
@@session.transaction_isolation
READ-COMMITTED
SELECT @@session.tx_isolation;
@@session.tx_isolation
READ-COMMITTED
SET @@session.transaction_isolation = 'REPEATABLE-READ';
SELECT @@session.transaction_isolation;
@@session.transaction_isolation
REPEATABLE-READ
SELECT @@session.tx_isolation;
@@session.tx_isolation
REPEATABLE-READ
SET @@session.transaction_isolation = 'serializable';
SELECT @@session.transaction_isolation;
@@session.transaction_isolation
SERIALIZABLE
SELECT @@session.tx_isolation;
@@session.tx_isolation
SERIALIZABLE
#######################################################################
# Change the value of transaction_isolation to invalid value #
#######################################################################
Expand Down Expand Up @@ -107,6 +137,11 @@ FROM performance_schema.session_variables
WHERE VARIABLE_NAME='transaction_isolation';
@@session.transaction_isolation = VARIABLE_VALUE
1
SELECT @@session.tx_isolation = VARIABLE_VALUE
FROM performance_schema.session_variables
WHERE VARIABLE_NAME='tx_isolation';
@@session.tx_isolation = VARIABLE_VALUE
1
#########################################################################
# Check if the value in GLOBAL Table matches value in variable #
#########################################################################
Expand All @@ -115,25 +150,42 @@ FROM performance_schema.global_variables
WHERE VARIABLE_NAME='transaction_isolation';
@@global.transaction_isolation = VARIABLE_VALUE
1
SELECT @@global.tx_isolation = VARIABLE_VALUE
FROM performance_schema.global_variables
WHERE VARIABLE_NAME='tx_isolation';
@@global.tx_isolation = VARIABLE_VALUE
1
###################################################################
# Check if numbers can be used on variable #
###################################################################
SET @@global.transaction_isolation = 0;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
READ-UNCOMMITTED
SELECT @@global.tx_isolation;
@@global.tx_isolation
READ-UNCOMMITTED
SET @@global.transaction_isolation = 1;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
READ-COMMITTED
SELECT @@global.tx_isolation;
@@global.tx_isolation
READ-COMMITTED
SET @@global.transaction_isolation = 2;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
REPEATABLE-READ
SELECT @@global.tx_isolation;
@@global.tx_isolation
REPEATABLE-READ
SET @@global.transaction_isolation = 3;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
SERIALIZABLE
SELECT @@global.tx_isolation;
@@global.tx_isolation
SERIALIZABLE
SET @@global.transaction_isolation = 0.4;
ERROR 42000: Incorrect argument type to variable 'transaction_isolation'
###################################################################
Expand All @@ -143,10 +195,16 @@ SET @@global.transaction_isolation = TRUE;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
READ-COMMITTED
SELECT @@global.tx_isolation;
@@global.tx_isolation
READ-COMMITTED
SET @@global.transaction_isolation = FALSE;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
READ-UNCOMMITTED
SELECT @@global.tx_isolation;
@@global.tx_isolation
READ-UNCOMMITTED
###########################################################################
# Check if transaction_isolation can be accessed with and without @@ sign #
###########################################################################
Expand All @@ -159,21 +217,33 @@ SET session transaction_isolation = 'REPEATABLE-READ';
SELECT @@transaction_isolation;
@@transaction_isolation
REPEATABLE-READ
SELECT @@tx_isolation;
@@tx_isolation
REPEATABLE-READ
SET global transaction_isolation = 'REPEATABLE-READ';
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
REPEATABLE-READ
SELECT @@global.tx_isolation;
@@global.tx_isolation
REPEATABLE-READ
##############################
# Restore initial value #
##############################
SET @@global.transaction_isolation = @global_start_value;
SELECT @@global.transaction_isolation;
@@global.transaction_isolation
REPEATABLE-READ
SELECT @@global.tx_isolation;
@@global.tx_isolation
REPEATABLE-READ
SET @@session.transaction_isolation = @session_start_value;
SELECT @@session.transaction_isolation;
@@session.transaction_isolation
REPEATABLE-READ
SELECT @@session.tx_isolation;
@@session.tx_isolation
REPEATABLE-READ
####################################################################
# END OF transaction_isolation TESTS #
####################################################################
59 changes: 59 additions & 0 deletions mysql-test/suite/sys_vars/r/transaction_read_only_basic.result
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ SET @start_session_value = @@session.transaction_read_only;
SELECT @start_session_value;
@start_session_value
0
SELECT @@global.tx_read_only;
@@global.tx_read_only
0
SELECT @@session.tx_read_only;
@@session.tx_read_only
0
########################################################################
# Display the DEFAULT value of transaction_read_only #
########################################################################
Expand All @@ -20,65 +26,107 @@ SET @@global.transaction_read_only = DEFAULT;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
0
SELECT @@global.tx_read_only;
@@global.tx_read_only
0
SET @@session.transaction_read_only = ON;
SET @@session.transaction_read_only = DEFAULT;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
0
SELECT @@session.tx_read_only;
@@session.tx_read_only
0
##############################################################################
# Change the value of transaction_read_only to a valid value for GLOBAL Scope#
##############################################################################
SET @@global.transaction_read_only = ON;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
1
SELECT @@global.tx_read_only;
@@global.tx_read_only
1
SET @@global.transaction_read_only = OFF;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
0
SELECT @@global.tx_read_only;
@@global.tx_read_only
0
SET @@global.transaction_read_only = 0;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
0
SELECT @@global.tx_read_only;
@@global.tx_read_only
0
SET @@global.transaction_read_only = 1;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
1
SELECT @@global.tx_read_only;
@@global.tx_read_only
1
SET @@global.transaction_read_only = TRUE;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
1
SELECT @@global.tx_read_only;
@@global.tx_read_only
1
SET @@global.transaction_read_only = FALSE;
SELECT @@global.transaction_read_only;
@@global.transaction_read_only
0
SELECT @@global.tx_read_only;
@@global.tx_read_only
0
###############################################################################
# Change the value of transaction_read_only to a valid value for SESSION Scope#
###############################################################################
SET @@session.transaction_read_only = ON;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
1
SELECT @@session.tx_read_only;
@@session.tx_read_only
1
SET @@session.transaction_read_only = OFF;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
0
SELECT @@session.tx_read_only;
@@session.tx_read_only
0
SET @@session.transaction_read_only = 0;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
0
SELECT @@session.tx_read_only;
@@session.tx_read_only
0
SET @@session.transaction_read_only = 1;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
1
SELECT @@session.tx_read_only;
@@session.tx_read_only
1
SET @@session.transaction_read_only = TRUE;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
1
SELECT @@session.tx_read_only;
@@session.tx_read_only
1
SET @@session.transaction_read_only = FALSE;
SELECT @@session.transaction_read_only;
@@session.transaction_read_only
0
SELECT @@session.tx_read_only;
@@session.tx_read_only
0
################################################################
# Change the value of transaction_read_only to an invalid value#
################################################################
Expand Down Expand Up @@ -141,6 +189,9 @@ SET @@global.transaction_read_only = ON;
SELECT @@transaction_read_only = @@global.transaction_read_only;
@@transaction_read_only = @@global.transaction_read_only
0
SELECT @@tx_read_only = @@global.transaction_read_only;
@@tx_read_only = @@global.transaction_read_only
0
##############################################################################
# Check if accessing variable with SESSION,LOCAL and without SCOPE points #
# to same session variable #
Expand All @@ -152,6 +203,9 @@ SELECT @@transaction_read_only = @@local.transaction_read_only;
SELECT @@local.transaction_read_only = @@session.transaction_read_only;
@@local.transaction_read_only = @@session.transaction_read_only
1
SELECT @@local.tx_read_only = @@session.transaction_read_only;
@@local.tx_read_only = @@session.transaction_read_only
1
###############################################################################
# Check if transaction_read_only can be accessed with and without @@ sign #
###############################################################################
Expand All @@ -162,9 +216,14 @@ SET transaction_read_only = 1;
SELECT @@transaction_read_only;
@@transaction_read_only
1
SELECT @@tx_read_only;
@@tx_read_only
1
# name1.name2 refers to database_name.table_name
SELECT session.transaction_read_only;
ERROR 42S02: Unknown table 'session' in field list
SELECT session.tx_read_only;
ERROR 42S02: Unknown table 'session' in field list
####################################
# Restore initial value #
####################################
Expand Down
4 changes: 4 additions & 0 deletions mysql-test/suite/sys_vars/r/tx_isolation_basic.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SET @@session.tx_isolation ='READ-COMMITTED';
ERROR HY000: Variable 'tx_isolation' is a read only variable
SET @@global.tx_isolation ='READ-COMMITTED';
ERROR HY000: Variable 'tx_isolation' is a read only variable
4 changes: 4 additions & 0 deletions mysql-test/suite/sys_vars/r/tx_read_only_basic.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SET @@session.tx_read_only = 0;
ERROR HY000: Variable 'tx_read_only' is a read only variable
SET @@global.tx_read_only = 0;
ERROR HY000: Variable 'tx_read_only' is a read only variable
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,6 @@ SET GLOBAL per_user_session_var_default_val = "u1:optimizer_switch=index_merge=o
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL per_user_session_var_default_val = "u1:optimizer_switch=xyz";

--echo ## Read-Only
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL per_user_session_var_default_val = "usr1:tx_isolation=READ-COMMITTED";

--echo ##
--echo ## root privilege is required to set session variable binglog_format
--echo ## root privilege will be granted to usr1 temporarily to get this done
Expand Down
4 changes: 4 additions & 0 deletions mysql-test/suite/sys_vars/t/query_cache_size_basic.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SELECT @@global.query_cache_size;

--error ER_INCORRECT_GLOBAL_LOCAL_VAR
SET @@global.query_cache_size=10*1024;
4 changes: 4 additions & 0 deletions mysql-test/suite/sys_vars/t/query_cache_type_basic.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SELECT @@global.query_cache_type;

--error ER_INCORRECT_GLOBAL_LOCAL_VAR
SET @@global.query_cache_type='ON';
Loading

0 comments on commit 5039128

Please sign in to comment.