@@ -190,28 +190,6 @@ class Session_sysvars_tracker : public State_tracker
190
190
return orig_list->construct_var_list (buf, buf_len);
191
191
}
192
192
193
- /* *
194
- Method used to check the validity of string provided
195
- for session_track_system_variables during the server
196
- startup.
197
- */
198
- static bool server_init_check (THD *thd, CHARSET_INFO *char_set,
199
- LEX_STRING var_list)
200
- {
201
- return check_var_list (thd, var_list, false , char_set, false );
202
- }
203
-
204
- static bool server_init_process (THD *thd, CHARSET_INFO *char_set,
205
- LEX_STRING var_list)
206
- {
207
- vars_list dummy;
208
- bool result;
209
- result= dummy.parse_var_list (thd, var_list, false , char_set, false );
210
- if (!result)
211
- dummy.construct_var_list (var_list.str , var_list.length + 1 );
212
- return result;
213
- }
214
-
215
193
bool enable (THD *thd);
216
194
bool update (THD *thd, set_var *var);
217
195
bool store (THD *thd, String *buf);
@@ -220,8 +198,7 @@ class Session_sysvars_tracker : public State_tracker
220
198
static uchar *sysvars_get_key (const char *entry, size_t *length,
221
199
my_bool not_used __attribute__ ((unused)));
222
200
223
- static bool check_var_list (THD *thd, LEX_STRING var_list, bool throw_error,
224
- CHARSET_INFO *char_set, bool take_mutex);
201
+ friend bool sysvartrack_global_update (THD *thd, char *str, size_t len);
225
202
};
226
203
227
204
@@ -442,12 +419,9 @@ bool Session_sysvars_tracker::vars_list::parse_var_list(THD *thd,
442
419
}
443
420
444
421
445
- bool Session_sysvars_tracker::check_var_list (THD *thd,
446
- LEX_STRING var_list,
447
- bool throw_error,
448
- CHARSET_INFO *char_set,
449
- bool take_mutex)
422
+ bool sysvartrack_validate_value (THD *thd, const char *str, size_t len)
450
423
{
424
+ LEX_STRING var_list= { (char *) str, len };
451
425
const char separator= ' ,' ;
452
426
char *token, *lasts= NULL ;
453
427
size_t rest= var_list.length ;
@@ -466,7 +440,7 @@ bool Session_sysvars_tracker::check_var_list(THD *thd,
466
440
token value. Hence the mutex is handled here to avoid a performance
467
441
overhead.
468
442
*/
469
- if (!thd || take_mutex )
443
+ if (!thd)
470
444
mysql_mutex_lock (&LOCK_plugin);
471
445
for (;;)
472
446
{
@@ -484,32 +458,22 @@ bool Session_sysvars_tracker::check_var_list(THD *thd,
484
458
var.length = rest;
485
459
486
460
/* Remove leading/trailing whitespace. */
487
- trim_whitespace (char_set , &var);
461
+ trim_whitespace (system_charset_info , &var);
488
462
489
463
if (!strcmp (var.str , " *" ) &&
490
- !find_sys_var_ex (thd, var.str , var.length , throw_error , true ))
464
+ !find_sys_var_ex (thd, var.str , var.length , false , true ))
491
465
{
492
- if (throw_error && take_mutex && thd)
493
- {
494
- push_warning_printf (thd, Sql_condition::WARN_LEVEL_WARN,
495
- ER_WRONG_VALUE_FOR_VAR,
496
- " %.*s is not a valid system variable and will"
497
- " be ignored." , (int )var.length , token);
498
- }
499
- else
500
- {
501
- if (!thd || take_mutex)
502
- mysql_mutex_unlock (&LOCK_plugin);
503
- return true ;
504
- }
466
+ if (!thd)
467
+ mysql_mutex_unlock (&LOCK_plugin);
468
+ return true ;
505
469
}
506
470
507
471
if (lasts)
508
472
token= lasts + 1 ;
509
473
else
510
474
break ;
511
475
}
512
- if (!thd || take_mutex )
476
+ if (!thd)
513
477
mysql_mutex_unlock (&LOCK_plugin);
514
478
515
479
return false ;
@@ -804,38 +768,50 @@ void Session_sysvars_tracker::vars_list::reset()
804
768
at (i)->m_changed = false ;
805
769
}
806
770
807
- static Session_sysvars_tracker* sysvar_tracker (THD *thd)
808
- {
809
- return (Session_sysvars_tracker*)
810
- thd->session_tracker .get_tracker (SESSION_SYSVARS_TRACKER);
811
- }
812
771
813
- bool sysvartrack_validate_value (THD *thd, const char *str, size_t len)
814
- {
815
- LEX_STRING tmp= {(char *)str, len};
816
- return Session_sysvars_tracker::server_init_check (thd, system_charset_info,
817
- tmp);
818
- }
819
- bool sysvartrack_reprint_value (THD *thd, char *str, size_t len)
772
+ bool sysvartrack_global_update (THD *thd, char *str, size_t len)
820
773
{
821
- LEX_STRING tmp= {str, len};
822
- return Session_sysvars_tracker::server_init_process (thd,
823
- system_charset_info,
824
- tmp);
825
- }
826
- bool sysvartrack_update (THD *thd, set_var *var)
827
- {
828
- return sysvar_tracker (thd)-> update (thd, var) ;
774
+ LEX_STRING tmp= { str, len };
775
+ Session_sysvars_tracker::vars_list dummy;
776
+ if (!dummy. parse_var_list (thd, tmp, false , system_charset_info, false ))
777
+ {
778
+ dummy. construct_var_list (str, len + 1 );
779
+ return false ;
780
+ }
781
+ return true ;
829
782
}
830
- size_t sysvartrack_value_len (THD *thd)
783
+
784
+
785
+ uchar *sysvartrack_session_value_ptr (THD *thd, const LEX_CSTRING *base)
831
786
{
832
- return sysvar_tracker (thd)->get_buffer_length ();
787
+ Session_sysvars_tracker *tracker= static_cast <Session_sysvars_tracker*>
788
+ (thd->session_tracker .get_tracker (SESSION_SYSVARS_TRACKER));
789
+ size_t len= tracker->get_buffer_length ();
790
+ char *res= (char *) thd->alloc (len + sizeof (char *));
791
+ if (res)
792
+ {
793
+ char *buf= res + sizeof (char *);
794
+ *((char **) res)= buf;
795
+ tracker->construct_var_list (buf, len);
796
+ }
797
+ return (uchar*) res;
833
798
}
834
- bool sysvartrack_value_construct (THD *thd, char *val, size_t len)
799
+
800
+
801
+ int session_tracker_init ()
835
802
{
836
- return sysvar_tracker (thd)->construct_var_list (val, len);
803
+ if (sysvartrack_validate_value (0 ,
804
+ global_system_variables.session_track_system_variables ,
805
+ safe_strlen (global_system_variables.session_track_system_variables )))
806
+ {
807
+ sql_print_error (" The variable session_track_system_variables has "
808
+ " invalid values." );
809
+ return 1 ;
810
+ }
811
+ return 0 ;
837
812
}
838
813
814
+
839
815
// /////////////////////////////////////////////////////////////////////////////
840
816
841
817
/* *
@@ -1477,26 +1453,6 @@ void Session_tracker::enable(THD *thd)
1477
1453
}
1478
1454
1479
1455
1480
- /* *
1481
- Method called during the server startup to verify the contents
1482
- of @@session_track_system_variables.
1483
-
1484
- @retval false Success
1485
- @retval true Failure
1486
- */
1487
-
1488
- bool Session_tracker::server_boot_verify (CHARSET_INFO *char_set)
1489
- {
1490
- bool result;
1491
- LEX_STRING tmp;
1492
- tmp.str = global_system_variables.session_track_system_variables ;
1493
- tmp.length = safe_strlen (tmp.str );
1494
- result=
1495
- Session_sysvars_tracker::server_init_check (NULL , char_set, tmp);
1496
- return result;
1497
- }
1498
-
1499
-
1500
1456
/* *
1501
1457
@brief Store all change information in the specified buffer.
1502
1458
0 commit comments