summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorLuis Soares <luis.soares@sun.com>2010-03-17 00:06:13 +0000
committerLuis Soares <luis.soares@sun.com>2010-03-17 00:06:13 +0000
commit92b5e586758de97ebf3272e337b965d43cdf571c (patch)
tree5100e704c6b5312c7170166f1217fcfea545441d /sql/item_func.cc
parent5937da69a6d5b3461373dfc7abd8d003f4013fce (diff)
downloadmariadb-git-92b5e586758de97ebf3272e337b965d43cdf571c.tar.gz
BUG#51426: overflow for auto_increment column causes slave to stop
In BUG#49562 we fixed the case where numeric user var events would not serialize the flag stating whether the value was signed or unsigned (unsigned_flag). This fixed the case that the slave would get an overflow while treating the unsigned values as signed. In this bug, we find that the unsigned_flag can sometimes change between the moment that the user value is recorded for binlogging purposes and the actual binlogging time. Since we take the unsigned_flag from the runtime variable data, at binlogging time, and the variable value is comes from the copy taken earlier in the execution, there may be inconsistency in the User_var_log_event between the variable value and its unsigned_flag. We fix this by also copying the unsigned_flag of the user_var_entry when its value is copied, for binlogging purposes. Later, at binlogging time, we use the copied unsigned_flag and not the one in the runtime user_var_entry instance.
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index ca8f5d00bb1..391ddfa4a7c 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -4766,6 +4766,7 @@ int get_var_with_binlog(THD *thd, enum_sql_command sql_command,
user_var_event->user_var_event= var_entry;
user_var_event->type= var_entry->type;
user_var_event->charset_number= var_entry->collation.collation->number;
+ user_var_event->unsigned_flag= var_entry->unsigned_flag;
if (!var_entry->value)
{
/* NULL value*/