diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2020-06-11 23:12:48 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2020-06-12 12:14:14 +0200 |
commit | 82f3ceed12063ac400a070b9c1972e139c59f385 (patch) | |
tree | 856b7e5f0b2afc73231311b5b84e698f751fa1f7 | |
parent | 8ec21afc8ed2df3b02815a45624b3287d5ffceae (diff) | |
download | mariadb-git-bb-10.5-MDEV-22550.tar.gz |
MDEV-16470: switch off user variables (and fixes of its support)bb-10.5-MDEV-22550
-rw-r--r-- | client/mysqltest.cc | 60 | ||||
-rw-r--r-- | include/mysql.h.pp | 1 | ||||
-rw-r--r-- | include/mysql_com.h | 8 | ||||
-rw-r--r-- | mysql-test/main/mysqld--help.result | 3 | ||||
-rw-r--r-- | mysql-test/main/mysqltest_tracking_info.result | 16 | ||||
-rw-r--r-- | mysql-test/main/mysqltest_tracking_info.test | 38 | ||||
-rw-r--r-- | mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result | 10 | ||||
-rw-r--r-- | sql/item_func.cc | 2 | ||||
-rw-r--r-- | sql/session_tracker.cc | 10 | ||||
-rw-r--r-- | sql/session_tracker.h | 8 | ||||
-rw-r--r-- | sql/sql_class.cc | 2 | ||||
-rw-r--r-- | sql/sql_class.h | 2 | ||||
-rw-r--r-- | sql/sys_vars.cc | 2 |
13 files changed, 89 insertions, 73 deletions
diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 55c4a66a89d..c278bb1aabd 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -7711,6 +7711,28 @@ void append_info(DYNAMIC_STRING *ds, ulonglong affected_rows, } +#ifndef EMBEDDED_LIBRARY +static const char *trking_info_desc[SESSION_TRACK_END + 1]= +{ + "Tracker : SESSION_TRACK_SYSTEM_VARIABLES\n", + "Tracker : SESSION_TRACK_SCHEMA\n", + "Tracker : SESSION_TRACK_STATE_CHANGE\n", + "Tracker : SESSION_TRACK_GTIDS\n", + "Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS\n", + "Tracker : SESSION_TRACK_TRANSACTION_TYPE\n" +#ifdef USER_VAR_TRACKING + , + "Tracker : SESSION_TRACK_MYSQL_RESERVED1\n", + "Tracker : SESSION_TRACK_MYSQL_RESERVED2\n", + "Tracker : SESSION_TRACK_MYSQL_RESERVED3\n", + "Tracker : SESSION_TRACK_MYSQL_RESERVED4\n", + "Tracker : SESSION_TRACK_MYSQL_RESERVED5\n", + "Tracker : SESSION_TRACK_MYSQL_RESERVED6\n", + "Tracker : SESSION_TRACK_USER_VARIABLES\n" +#endif // USER_VAR_TRACKING +}; +#endif // EMBEDDED_LIBRARY + /** @brief Append state change information (received through Ok packet) to the output. @@ -7731,31 +7753,15 @@ static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql) &data, &data_length)) { dynstr_append(ds, "-- "); - switch (type) + if (type <= SESSION_TRACK_END) { - case SESSION_TRACK_SYSTEM_VARIABLES: - dynstr_append(ds, "Tracker : SESSION_TRACK_SYSTEM_VARIABLES\n"); - break; - case SESSION_TRACK_SCHEMA: - dynstr_append(ds, "Tracker : SESSION_TRACK_SCHEMA\n"); - break; - case SESSION_TRACK_STATE_CHANGE: - dynstr_append(ds, "Tracker : SESSION_TRACK_STATE_CHANGE\n"); - break; - case SESSION_TRACK_GTIDS: - dynstr_append(ds, "Tracker : SESSION_TRACK_GTIDS\n"); - break; - case SESSION_TRACK_TRANSACTION_CHARACTERISTICS: - dynstr_append(ds, "Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS\n"); - break; - case SESSION_TRACK_TRANSACTION_TYPE: - dynstr_append(ds, "Tracker : SESSION_TRACK_TRANSACTION_TYPE\n"); - break; - default: - DBUG_ASSERT(0); - dynstr_append(ds, "\n"); + dynstr_append(ds, trking_info_desc[type]); + } + else + { + DBUG_ASSERT(0); + dynstr_append(ds, "Tracker???\n"); } - dynstr_append(ds, "-- "); dynstr_append_mem(ds, data, data_length); @@ -7767,7 +7773,13 @@ static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql) &data, &data_length)) { dynstr_append(ds, "\n-- "); - dynstr_append_mem(ds, data, data_length); + if (data == NULL) + { + DBUG_ASSERT(data_length == 0); + dynstr_append_mem(ds, "<NULL>", sizeof("<NULL>") - 1); + } + else + dynstr_append_mem(ds, data, data_length); } dynstr_append(ds, "\n\n"); } diff --git a/include/mysql.h.pp b/include/mysql.h.pp index 051821c2d37..4e6240a19ac 100644 --- a/include/mysql.h.pp +++ b/include/mysql.h.pp @@ -113,7 +113,6 @@ enum enum_session_state_type SESSION_TRACK_GTIDS, SESSION_TRACK_TRANSACTION_CHARACTERISTICS, SESSION_TRACK_TRANSACTION_STATE, - SESSION_TRACK_USER_VARIABLES, SESSION_TRACK_always_at_the_end }; extern "C" { diff --git a/include/mysql_com.h b/include/mysql_com.h index de9eb938f69..fa5960a377b 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -617,7 +617,15 @@ enum enum_session_state_type SESSION_TRACK_GTIDS, SESSION_TRACK_TRANSACTION_CHARACTERISTICS, /* Transaction chistics */ SESSION_TRACK_TRANSACTION_STATE, /* Transaction state */ +#ifdef USER_VAR_TRACKING + SESSION_TRACK_MYSQL_RESERVED1, + SESSION_TRACK_MYSQL_RESERVED2, + SESSION_TRACK_MYSQL_RESERVED3, + SESSION_TRACK_MYSQL_RESERVED4, + SESSION_TRACK_MYSQL_RESERVED5, + SESSION_TRACK_MYSQL_RESERVED6, SESSION_TRACK_USER_VARIABLES, +#endif // USER_VAR_TRACKING SESSION_TRACK_always_at_the_end /* must be last */ }; diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result index 7cbcdbad2b2..e9ea7e13c99 100644 --- a/mysql-test/main/mysqld--help.result +++ b/mysql-test/main/mysqld--help.result @@ -1151,8 +1151,6 @@ The following specify which files/extra groups are read (specified before remain characteristics (isolation level, read only/read write,snapshot - but not any work done / data modified within the transaction). - --session-track-user-variables - Track changes to user variables. --show-slave-auth-info Show user and password in SHOW SLAVE HOSTS on this master. @@ -1758,7 +1756,6 @@ session-track-schema TRUE session-track-state-change FALSE session-track-system-variables autocommit,character_set_client,character_set_connection,character_set_results,time_zone session-track-transaction-info OFF -session-track-user-variables FALSE show-slave-auth-info FALSE silent-startup FALSE skip-grant-tables TRUE diff --git a/mysql-test/main/mysqltest_tracking_info.result b/mysql-test/main/mysqltest_tracking_info.result index 3a4419d8651..e044b4a070d 100644 --- a/mysql-test/main/mysqltest_tracking_info.result +++ b/mysql-test/main/mysqltest_tracking_info.result @@ -48,20 +48,4 @@ SET @@session.session_track_system_variables= @save_session_track_system_variabl # # MDEV-16470 - Session user variables tracker # -SET @@session.session_track_user_variables=1; -SET @a=1; -SET @b=NULL; -SELECT @c:=10; -@c:=10 -10 -SET @@session.session_track_user_variables=0; -# -# mdev-22337 Assertion `Alloced_length >= (str_length + length + -net_length_size(length))' failed in Binary_string::q_net_store_data -on long MULTIPOLYGON query with session_track_user_variables=1 -(optimized builds) -# -set @@session.session_track_user_variables=1; -set @a=repeat('X', 1029); -set @@session.session_track_user_variables=0; # End of 10.5 tests diff --git a/mysql-test/main/mysqltest_tracking_info.test b/mysql-test/main/mysqltest_tracking_info.test index c4dfce57fb0..0478ea560d5 100644 --- a/mysql-test/main/mysqltest_tracking_info.test +++ b/mysql-test/main/mysqltest_tracking_info.test @@ -49,24 +49,24 @@ SET @@session.session_track_system_variables= @save_session_track_system_variabl --echo # --echo # MDEV-16470 - Session user variables tracker --echo # -SET @@session.session_track_user_variables=1; ---enable_session_track_info -SET @a=1; -SET @b=NULL; -SELECT @c:=10; ---disable_session_track_info -SET @@session.session_track_user_variables=0; - ---echo # ---echo # mdev-22337 Assertion `Alloced_length >= (str_length + length + ---echo net_length_size(length))' failed in Binary_string::q_net_store_data ---echo on long MULTIPOLYGON query with session_track_user_variables=1 ---echo (optimized builds) ---echo # -set @@session.session_track_user_variables=1; ---enable_session_track_info -set @a=repeat('X', 1029); ---disable_session_track_info -set @@session.session_track_user_variables=0; +#SET @@session.session_track_user_variables=1; +#--enable_session_track_info +#SET @a=1; +#SET @b=NULL; +#SELECT @c:=10; +#--disable_session_track_info +#SET @@session.session_track_user_variables=0; + +#--echo # +#--echo # mdev-22337 Assertion `Alloced_length >= (str_length + length + +#--echo net_length_size(length))' failed in Binary_string::q_net_store_data +#--echo on long MULTIPOLYGON query with session_track_user_variables=1 +#--echo (optimized builds) +#--echo # +#set @@session.session_track_user_variables=1; +#--enable_session_track_info +#set @a=repeat('X', 1029); +#--disable_session_track_info +#set @@session.session_track_user_variables=0; --echo # End of 10.5 tests diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result index 0a449e85a24..f2b7f14cc99 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -3543,16 +3543,6 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST OFF,STATE,CHARACTERISTICS READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED -VARIABLE_NAME SESSION_TRACK_USER_VARIABLES -VARIABLE_SCOPE SESSION -VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Track changes to user variables. -NUMERIC_MIN_VALUE NULL -NUMERIC_MAX_VALUE NULL -NUMERIC_BLOCK_SIZE NULL -ENUM_VALUE_LIST OFF,ON -READ_ONLY NO -COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME SKIP_EXTERNAL_LOCKING VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN diff --git a/sql/item_func.cc b/sql/item_func.cc index c3deae59960..f79bd9d59b3 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4787,10 +4787,12 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, size_t length, entry->unsigned_flag= unsigned_arg; } entry->type=type; +#ifdef USER_VAR_TRACKING #ifndef EMBEDDED_LIBRARY THD *thd= current_thd; thd->session_tracker.user_variables.mark_as_changed(thd, entry); #endif +#endif // USER_VAR_TRACKING return 0; } diff --git a/sql/session_tracker.cc b/sql/session_tracker.cc index 129d909c045..d94ecdc2b24 100644 --- a/sql/session_tracker.cc +++ b/sql/session_tracker.cc @@ -1183,6 +1183,7 @@ bool Session_state_change_tracker::store(THD *thd, String *buf) return false; } +#ifdef USER_VAR_TRACKING bool User_variables_tracker::update(THD *thd, set_var *) { @@ -1204,10 +1205,13 @@ bool User_variables_tracker::store(THD *thd, String *buf) length= net_length_size(var->name.length) + var->name.length; if (!null_value) length+= net_length_size(value_str.length()) + value_str.length(); + else + length+= 1; if (buf->reserve(sizeof(char) + length + net_length_size(length))) return true; + // TODO: check max packet length MDEV-22709 buf->q_append(static_cast<char>(SESSION_TRACK_USER_VARIABLES)); buf->q_net_store_length(length); buf->q_net_store_data(reinterpret_cast<const uchar*>(var->name.str), @@ -1215,10 +1219,16 @@ bool User_variables_tracker::store(THD *thd, String *buf) if (!null_value) buf->q_net_store_data(reinterpret_cast<const uchar*>(value_str.ptr()), value_str.length()); + else + { + char nullbuff[1]= { (char)251 }; + buf->q_append(nullbuff, sizeof(nullbuff)); + } } m_changed_user_variables.clear(); return false; } +#endif // USER_VAR_TRACKING /////////////////////////////////////////////////////////////////////////////// diff --git a/sql/session_tracker.h b/sql/session_tracker.h index 7db1feb1b1a..c78778ac73c 100644 --- a/sql/session_tracker.h +++ b/sql/session_tracker.h @@ -35,7 +35,9 @@ enum enum_session_tracker CURRENT_SCHEMA_TRACKER, /* Current schema */ SESSION_STATE_CHANGE_TRACKER, TRANSACTION_INFO_TRACKER, /* Transaction state */ +#ifdef USER_VAR_TRACKING USER_VARIABLES_TRACKER, +#endif // USER_VAR_TRACKING SESSION_TRACKER_END /* must be the last */ }; @@ -395,6 +397,7 @@ private: This is a tracker class that enables & manages the tracking of user variables. */ +#ifdef USER_VAR_TRACKING class User_variables_tracker: public State_tracker { Hash_set<const user_var_entry> m_changed_user_variables; @@ -415,6 +418,7 @@ public: } void deinit() { m_changed_user_variables.~Hash_set(); } }; +#endif // USER_VAR_TRACKING /** @@ -445,7 +449,9 @@ public: Session_state_change_tracker state_change; Transaction_state_tracker transaction_info; Session_sysvars_tracker sysvars; +#ifdef USER_VAR_TRACKING User_variables_tracker user_variables; +#endif // USER_VAR_TRACKING Session_tracker() { @@ -453,7 +459,9 @@ public: m_trackers[CURRENT_SCHEMA_TRACKER]= ¤t_schema; m_trackers[SESSION_STATE_CHANGE_TRACKER]= &state_change; m_trackers[TRANSACTION_INFO_TRACKER]= &transaction_info; +#ifdef USER_VAR_TRACKING m_trackers[USER_VARIABLES_TRACKER]= &user_variables; +#endif // USER_VAR_TRACKING } void enable(THD *thd) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index cee2d644480..23176d5a1db 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1739,7 +1739,9 @@ THD::~THD() /* trick to make happy memory accounting system */ #ifndef EMBEDDED_LIBRARY session_tracker.sysvars.deinit(); +#ifdef USER_VAR_TRACKING session_tracker.user_variables.deinit(); +#endif // USER_VAR_TRACKING #endif //EMBEDDED_LIBRARY if (status_var.local_memory_used != 0) diff --git a/sql/sql_class.h b/sql/sql_class.h index 2b28f7ba158..ed4ebbbba3a 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -793,7 +793,9 @@ typedef struct system_variables ulong session_track_transaction_info; my_bool session_track_schema; my_bool session_track_state_change; +#ifdef USER_VAR_TRACKING my_bool session_track_user_variables; +#endif // USER_VAR_TRACKING my_bool tcp_nodelay; ulong threadpool_priority; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index e42ca9ff360..1badca024fd 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -6647,6 +6647,7 @@ static Sys_var_mybool Sys_session_track_state_change( ON_UPDATE(update_session_track_state_change)); +#ifdef USER_VAR_TRACKING static bool update_session_track_user_variables(sys_var *self, THD *thd, enum_var_type type) { @@ -6661,6 +6662,7 @@ static Sys_var_mybool Sys_session_track_user_variables( NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(update_session_track_user_variables)); +#endif // USER_VAR_TRACKING #endif //EMBEDDED_LIBRARY |