diff options
author | bell@laptop.sanja.is.com.ua <> | 2003-10-08 11:19:09 +0300 |
---|---|---|
committer | bell@laptop.sanja.is.com.ua <> | 2003-10-08 11:19:09 +0300 |
commit | 381b68086809c0e84b0bd799626c0206faee685d (patch) | |
tree | 2be56b9d61879e50e7e3330de2083b06e9ef9ebc /sql | |
parent | 9b4018066ed3f4786d56c161477a1481520a34e7 (diff) | |
download | mariadb-git-381b68086809c0e84b0bd799626c0206faee685d.tar.gz |
fixed error handling in SET and DO operators (BUG#1484)
Diffstat (limited to 'sql')
-rw-r--r-- | sql/set_var.cc | 43 | ||||
-rw-r--r-- | sql/sql_do.cc | 1 |
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); } |