mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
4941ac9192
(Variant#3: Allow cross-charset comparisons, use a special CHARSET_INFO to create lookup keys. Review input addressed.) Equalities that compare utf8mb{3,4}_general_ci strings, like: WHERE ... utf8mb3_key_col=utf8mb4_value (MB3-4-CMP) can now be used to construct ref[const] access and also participate in multiple-equalities. This means that utf8mb3_key_col can be used for key-lookups when compared with an utf8mb4 constant, field or expression using '=' or '<=>' comparison operators. This is controlled by optimizer_switch='cset_narrowing=on', which is OFF by default. IMPLEMENTATION Item value comparison in (MB3-4-CMP) is done using utf8mb4_general_ci. This is valid as any utf8mb3 value is also an utf8mb4 value. When making index lookup value for utf8mb3_key_col, we do "Charset Narrowing": characters that are in the Basic Multilingual Plane (=BMP) are copied as-is, as they can be represented in utf8mb3. Characters that are outside the BMP cannot be represented in utf8mb3 and are replaced with U+FFFD, the "Replacement Character". In utf8mb4_general_ci, the Replacement Character compares as equal to any character that's not in BMP. Because of this, the constructed lookup value will find all index records that would be considered equal by the original condition (MB3-4-CMP). Approved-by: Monty <monty@mariadb.org>
93 lines
4.3 KiB
Text
93 lines
4.3 KiB
Text
set @save_session_track_system_variables=@@session_track_system_variables;
|
|
SELECT @@session.character_set_connection;
|
|
@@session.character_set_connection
|
|
latin1
|
|
SET @@session.session_track_system_variables='character_set_connection';
|
|
# tracking info on
|
|
SET NAMES 'utf8';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- character_set_connection
|
|
-- utf8mb3
|
|
|
|
SET NAMES 'big5';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- character_set_connection
|
|
-- big5
|
|
|
|
# tracking info on once
|
|
SET NAMES 'utf8';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- character_set_connection
|
|
-- utf8mb3
|
|
|
|
SET NAMES 'big5';
|
|
# tracking info on
|
|
SET NAMES 'utf8';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- character_set_connection
|
|
-- utf8mb3
|
|
|
|
# tracking info off once
|
|
SET NAMES 'big5';
|
|
SET @@session.session_track_system_variables= @save_session_track_system_variables;
|
|
#
|
|
# MDEV-22504: session tracking return incorrectly long traking data
|
|
#
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
SET @@session.session_track_system_variables='optimizer_switch';
|
|
set optimizer_switch='index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=on,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- optimizer_switch
|
|
-- index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=on,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off,split_materialized=on,condition_pushdown_for_subquery=on,rowid_filter=on,condition_pushdown_from_having=on,not_null_range_scan=off,hash_join_cardinality=off,cset_narrowing=off
|
|
|
|
Warnings:
|
|
Warning 1681 'engine_condition_pushdown=on' is deprecated and will be removed in a future release
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
SET @@session.session_track_system_variables= @save_session_track_system_variables;
|
|
# End of 10.2 tests
|
|
#
|
|
# MDEV-22134 handle_fatal_signal (sig=11) in __strlen_avx2 on START
|
|
# SLAVE | Assertion
|
|
# `global_system_variables.session_track_system_variables' failed in
|
|
# Session_sysvars_tracker::init | *** buffer overflow detected ***
|
|
# (on optimized builds)
|
|
#
|
|
SET @@GLOBAL.session_track_system_variables=NULL;
|
|
ERROR 42000: Variable 'session_track_system_variables' can't be set to the value of 'NULL'
|
|
SET SESSION session_track_system_variables=NULL;
|
|
ERROR 42000: Variable 'session_track_system_variables' can't be set to the value of 'NULL'
|
|
# End of 10.3 tests
|
|
#
|
|
# MDEV-25237: crash after setting global session_track_system_variables
|
|
# to an invalid value
|
|
#
|
|
SET GLOBAL session_track_system_variables='a';
|
|
ERROR HY000: Unknown system variable 'a'
|
|
SET GLOBAL event_scheduler=1;
|
|
# check that value really returns as it was
|
|
set GLOBAL session_track_system_variables='character_set_connection';
|
|
SET GLOBAL session_track_system_variables='a';
|
|
ERROR HY000: Unknown system variable 'a'
|
|
connect con,localhost,root,,test;
|
|
SET NAMES 'utf8';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- character_set_connection
|
|
-- utf8mb3
|
|
|
|
SET NAMES 'big5';
|
|
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
|
|
-- character_set_connection
|
|
-- big5
|
|
|
|
select @@session_track_system_variables;
|
|
@@session_track_system_variables
|
|
character_set_connection
|
|
connection default;
|
|
disconnect con;
|
|
SET GLOBAL session_track_system_variables=default;
|
|
SET GLOBAL event_scheduler=default;
|
|
# End of 10.4 test
|
|
#
|
|
# MDEV-16470 - Session user variables tracker
|
|
#
|
|
# End of 10.5 tests
|