summaryrefslogtreecommitdiff
path: root/sql/table.cc
diff options
context:
space:
mode:
authorAleksey Midenkov <midenok@gmail.com>2017-11-28 22:56:01 +0300
committerAleksey Midenkov <midenok@gmail.com>2017-11-29 10:48:14 +0300
commit8d548f8e86e1fb67df111348e88a0a73d0f13c98 (patch)
treeeaeae3494f04b4ca5bc6172952bb44ffabd990aa /sql/table.cc
parent47ea526efa755750c17b68e799617fb69169a2e7 (diff)
downloadmariadb-git-8d548f8e86e1fb67df111348e88a0a73d0f13c98.tar.gz
SQL: fill_record() field-value inconsistency fix [#365 bug 2]
Affected tests (forced mode): binlog_encryption.encrypted_slave
Diffstat (limited to 'sql/table.cc')
-rw-r--r--sql/table.cc21
1 files changed, 11 insertions, 10 deletions
diff --git a/sql/table.cc b/sql/table.cc
index 7b0629154df..d5baada386f 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -3197,25 +3197,25 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share,
if (share->versioned)
{
- Field **fptr = NULL;
- if (!(fptr = (Field **) alloc_root(&outparam->mem_root,
- (uint) ((share->fields+1)*
- sizeof(Field*)))))
+ Field **dst= (Field **) alloc_root(&outparam->mem_root,
+ (share->fields - VERSIONING_FIELDS + 1) *
+ sizeof(Field*));
+ if (!dst)
goto err;
- outparam->non_generated_field = fptr;
- for (i=0 ; i < share->fields; i++)
+ outparam->vers_user_field= dst;
+ for (Field **src= outparam->field; *src; src++)
{
- if (outparam->field[i]->vers_sys_field())
+ if ((*src)->vers_sys_field())
continue;
- *fptr++ = outparam->field[i];
+ *dst++= *src;
}
- (*fptr)= 0; // End marker
+ (*dst)= NULL;
outparam->vers_write= true;
}
else
{
- outparam->non_generated_field= NULL;
+ outparam->vers_user_field= NULL;
outparam->vers_write= false;
}
@@ -7698,6 +7698,7 @@ int TABLE::update_default_fields(bool update_command, bool ignore_errors)
DBUG_RETURN(res);
}
+
void TABLE::vers_update_fields()
{
DBUG_ENTER("vers_update_fields");