summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2020-06-11 23:12:48 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2020-06-12 12:14:14 +0200
commit82f3ceed12063ac400a070b9c1972e139c59f385 (patch)
tree856b7e5f0b2afc73231311b5b84e698f751fa1f7
parent8ec21afc8ed2df3b02815a45624b3287d5ffceae (diff)
downloadmariadb-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.cc60
-rw-r--r--include/mysql.h.pp1
-rw-r--r--include/mysql_com.h8
-rw-r--r--mysql-test/main/mysqld--help.result3
-rw-r--r--mysql-test/main/mysqltest_tracking_info.result16
-rw-r--r--mysql-test/main/mysqltest_tracking_info.test38
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result10
-rw-r--r--sql/item_func.cc2
-rw-r--r--sql/session_tracker.cc10
-rw-r--r--sql/session_tracker.h8
-rw-r--r--sql/sql_class.cc2
-rw-r--r--sql/sql_class.h2
-rw-r--r--sql/sys_vars.cc2
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]= &current_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