summaryrefslogtreecommitdiff
path: root/sql/session_tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/session_tracker.cc')
-rw-r--r--sql/session_tracker.cc33
1 files changed, 32 insertions, 1 deletions
diff --git a/sql/session_tracker.cc b/sql/session_tracker.cc
index fe5cd3a5d61..dc22d6dc9a3 100644
--- a/sql/session_tracker.cc
+++ b/sql/session_tracker.cc
@@ -16,7 +16,6 @@
#include "sql_plugin.h"
-#include "hash.h"
#include "table.h"
#include "rpl_gtid.h"
#include "sql_class.h"
@@ -1182,6 +1181,38 @@ bool Session_state_change_tracker::store(THD *thd, String *buf)
return false;
}
+
+bool User_variables_tracker::update(THD *thd, set_var *)
+{
+ m_enabled= thd->variables.session_track_user_variables;
+ return false;
+}
+
+
+bool User_variables_tracker::store(THD *thd, String *buf)
+{
+ for (ulong i= 0; i < m_changed_user_variables.size(); i++)
+ {
+ auto var= m_changed_user_variables.at(i);
+ String value_str;
+ bool null_value;
+
+ var->val_str(&null_value, &value_str, DECIMAL_MAX_SCALE);
+ buf->q_append(static_cast<char>(SESSION_TRACK_USER_VARIABLES));
+ ulonglong length= net_length_size(var->name.length) + var->name.length;
+ if (!null_value)
+ length+= net_length_size(value_str.length()) + value_str.length();
+ buf->q_net_store_length(length);
+ buf->q_net_store_data(reinterpret_cast<const uchar*>(var->name.str),
+ var->name.length);
+ if (!null_value)
+ buf->q_net_store_data(reinterpret_cast<const uchar*>(value_str.ptr()),
+ value_str.length());
+ }
+ m_changed_user_variables.clear();
+ return false;
+}
+
///////////////////////////////////////////////////////////////////////////////
/**