summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorbell@laptop.sanja.is.com.ua <>2003-10-08 11:19:09 +0300
committerbell@laptop.sanja.is.com.ua <>2003-10-08 11:19:09 +0300
commit381b68086809c0e84b0bd799626c0206faee685d (patch)
tree2be56b9d61879e50e7e3330de2083b06e9ef9ebc /sql
parent9b4018066ed3f4786d56c161477a1481520a34e7 (diff)
downloadmariadb-git-381b68086809c0e84b0bd799626c0206faee685d.tar.gz
fixed error handling in SET and DO operators (BUG#1484)
Diffstat (limited to 'sql')
-rw-r--r--sql/set_var.cc43
-rw-r--r--sql/sql_do.cc1
2 files changed, 39 insertions, 5 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index a5024363545..ed9d508638b 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -859,6 +859,8 @@ void fix_max_relay_log_size(THD *thd, enum_var_type type)
bool sys_var_long_ptr::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
pthread_mutex_lock(&LOCK_global_system_variables);
if (option_limits)
*value= (ulong) getopt_ull_limit_value(tmp, option_limits);
@@ -878,6 +880,8 @@ void sys_var_long_ptr::set_default(THD *thd, enum_var_type type)
bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
pthread_mutex_lock(&LOCK_global_system_variables);
if (option_limits)
*value= (ulonglong) getopt_ull_limit_value(tmp, option_limits);
@@ -925,6 +929,8 @@ byte *sys_var_enum::value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
/* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ulong) tmp > max_system_variables.*offset)
@@ -964,6 +970,8 @@ byte *sys_var_thd_ulong::value_ptr(THD *thd, enum_var_type type,
bool sys_var_thd_ha_rows::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
/* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ha_rows) tmp > max_system_variables.*offset)
@@ -1010,6 +1018,8 @@ byte *sys_var_thd_ha_rows::value_ptr(THD *thd, enum_var_type type,
bool sys_var_thd_ulonglong::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
if ((ulonglong) tmp > max_system_variables.*offset)
tmp= max_system_variables.*offset;
@@ -1581,6 +1591,9 @@ void sys_var_collation_server::set_default(THD *thd, enum_var_type type)
bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
+
NAMED_LIST *list;
LEX_STRING *base_name= &var->base;
@@ -1676,7 +1689,11 @@ int set_var_collation_client::update(THD *thd)
bool sys_var_timestamp::update(THD *thd, set_var *var)
{
- thd->set_time((time_t) var->value->val_int());
+ time_t tmp= (time_t) var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
+
+ thd->set_time(tmp);
return 0;
}
@@ -1697,7 +1714,11 @@ byte *sys_var_timestamp::value_ptr(THD *thd, enum_var_type type,
bool sys_var_last_insert_id::update(THD *thd, set_var *var)
{
- thd->insert_id(var->value->val_int());
+ ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
+
+ thd->insert_id(tmp);
return 0;
}
@@ -1712,7 +1733,11 @@ byte *sys_var_last_insert_id::value_ptr(THD *thd, enum_var_type type,
bool sys_var_insert_id::update(THD *thd, set_var *var)
{
- thd->next_insert_id=var->value->val_int();
+ ulonglong tmp= var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
+
+ thd->next_insert_id= tmp;
return 0;
}
@@ -1779,13 +1804,21 @@ bool sys_var_slave_skip_counter::update(THD *thd, set_var *var)
bool sys_var_rand_seed1::update(THD *thd, set_var *var)
{
- thd->rand.seed1= (ulong) var->value->val_int();
+ ulong tmp= (ulong) var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
+
+ thd->rand.seed1= tmp;
return 0;
}
bool sys_var_rand_seed2::update(THD *thd, set_var *var)
{
- thd->rand.seed2= (ulong) var->value->val_int();
+ ulong tmp= (ulong) var->value->val_int();
+ if (thd->net.report_error)
+ return 1;
+
+ thd->rand.seed2= tmp;
return 0;
}
diff --git a/sql/sql_do.cc b/sql/sql_do.cc
index f25c4632e1e..25a8359f3d2 100644
--- a/sql/sql_do.cc
+++ b/sql/sql_do.cc
@@ -29,6 +29,7 @@ int mysql_do(THD *thd, List<Item> &values)
DBUG_RETURN(-1);
while ((value = li++))
value->val_int();
+ thd->clear_error(); // DO always is OK
send_ok(thd);
DBUG_RETURN(0);
}