MCPcopy Create free account
hub / github.com/MariaDB/server / run_set_statement_if_requested

Function run_set_statement_if_requested

sql/sql_parse.cc:3346–3474  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3344*/
3345
3346bool run_set_statement_if_requested(THD *thd, LEX *lex)
3347{
3348 if (!lex->stmt_var_list.is_empty() && !thd->slave_thread)
3349 {
3350 Query_arena backup;
3351 DBUG_PRINT("info", ("SET STATEMENT %d vars", lex->stmt_var_list.elements));
3352
3353 lex->old_var_list.empty();
3354 List_iterator_fast<set_var_base> it(lex->stmt_var_list);
3355 set_var_base *var;
3356
3357 if (lex->set_arena_for_set_stmt(&backup))
3358 return true;
3359
3360 MEM_ROOT *mem_root= thd->mem_root;
3361 while ((var= it++))
3362 {
3363 DBUG_ASSERT(var->is_system());
3364 set_var *o= NULL, *v= (set_var*)var;
3365 if (!v->var->is_set_stmt_ok())
3366 {
3367 my_error(ER_SET_STATEMENT_NOT_SUPPORTED, MYF(0), v->var->name.str);
3368 lex->reset_arena_for_set_stmt(&backup);
3369 lex->old_var_list.empty();
3370 lex->free_arena_for_set_stmt();
3371 return true;
3372 }
3373 if (v->var->session_is_default(thd))
3374 o= new set_var(thd,v->type, v->var, &v->base, NULL);
3375 else
3376 {
3377 switch (v->var->option.var_type & GET_TYPE_MASK)
3378 {
3379 case GET_BIT:
3380 case GET_BOOL:
3381 case GET_INT:
3382 case GET_LONG:
3383 case GET_LL:
3384 {
3385 bool null_value;
3386 longlong val= v->var->val_int(&null_value, thd, v->type, &v->base);
3387 o= new set_var(thd, v->type, v->var, &v->base,
3388 (null_value ?
3389 (Item *) new (mem_root) Item_null(thd) :
3390 (Item *) new (mem_root) Item_int(thd, val)));
3391 }
3392 break;
3393 case GET_UINT:
3394 case GET_ULONG:
3395 case GET_ULL:
3396 {
3397 bool null_value;
3398 ulonglong val= v->var->val_int(&null_value, thd, v->type, &v->base);
3399 o= new set_var(thd, v->type, v->var, &v->base,
3400 (null_value ?
3401 (Item *) new (mem_root) Item_null(thd) :
3402 (Item *) new (mem_root) Item_uint(thd, val)));
3403 }

Callers 2

sql_parse.ccFile · 0.85
prepareMethod · 0.85

Calls 15

my_errorFunction · 0.85
sql_set_variablesFunction · 0.85
is_set_stmt_okMethod · 0.80
is_emptyMethod · 0.45
emptyMethod · 0.45
is_systemMethod · 0.45
session_is_defaultMethod · 0.45
val_intMethod · 0.45
val_realMethod · 0.45

Tested by

no test coverage detected