1690
Execute update of all variables.
1692
First run a check of all variables that all updates will go ok.
1693
If yes, then execute all updates, returning an error if any one failed.
1695
This should ensure that in all normal cases none all or variables are
1698
@param Session Thread id
1699
@param var_list List of variables to update
1704
1 ERROR, message sent (normally no variables was updated)
1706
-1 ERROR, message not sent
1709
int sql_set_variables(Session *session, List<set_var_base> *var_list)
1712
List_iterator_fast<set_var_base> it(*var_list);
1717
if ((error= var->check(session)))
1720
if (!(error= test(session->is_error())))
1724
error|= var->update(session); // Returns 0, -1 or 1
1728
free_underlaid_joins(session, &session->lex->select_lex);
1733
/*****************************************************************************
1734
Functions to handle SET mysql_internal_variable=const_expr
1735
*****************************************************************************/
1737
int set_var::check(Session *session)
1739
if (var->is_readonly())
1741
my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), var->getName().c_str(), "read only");
1744
if (var->check_type(type))
1746
int err= type == OPT_GLOBAL ? ER_LOCAL_VARIABLE : ER_GLOBAL_VARIABLE;
1747
my_error(err, MYF(0), var->getName().c_str());
1750
/* value is a NULL pointer if we are using SET ... = DEFAULT */
1753
if (var->check_default(type))
1755
my_error(ER_NO_DEFAULT, MYF(0), var->getName().c_str());
1761
if ((!value->fixed &&
1762
value->fix_fields(session, &value)) || value->check_cols(1))
1764
if (var->check_update_type(value->result_type()))
1766
my_error(ER_WRONG_TYPE_FOR_VAR, MYF(0), var->getName().c_str());
1769
return var->check(session, this) ? -1 : 0;
1775
@param session thread handler
1776
@returns 0|1 ok or ERROR
1778
@note ERROR can be only due to abnormal operations involving
1779
the server's execution evironment such as
1780
out of memory, hard disk failure or the computer blows up.
1781
Consider set_var::check() method if there is a need to return
1782
an error due to logics.
1784
int set_var::update(Session *session)
1787
var->set_default(session, type);
1788
else if (var->update(session, this))
1789
return -1; // should never happen
1790
if (var->getAfterUpdateTrigger())
1791
(*var->getAfterUpdateTrigger())(session, type);
1795
/*****************************************************************************
1796
Functions to handle SET @user_variable=const_expr
1797
*****************************************************************************/
1799
int set_var_user::check(Session *session)
1802
Item_func_set_user_var can't substitute something else on its place =>
1803
0 can be passed as last argument (reference on item)
1805
return (user_var_item->fix_fields(session, (Item**) 0) ||
1806
user_var_item->check(0)) ? -1 : 0;
1810
int set_var_user::update(Session *)
1812
if (user_var_item->update())
1814
/* Give an error if it's not given already */
1815
my_message(ER_SET_CONSTANTS_ONLY, ER(ER_SET_CONSTANTS_ONLY), MYF(0));
1821
1689
/****************************************************************************
1822
1690
Functions to handle table_type
1823
1691
****************************************************************************/