diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2017-11-28 22:56:01 +0300 |
---|---|---|
committer | Aleksey Midenkov <midenok@gmail.com> | 2017-11-29 10:48:14 +0300 |
commit | 8d548f8e86e1fb67df111348e88a0a73d0f13c98 (patch) | |
tree | eaeae3494f04b4ca5bc6172952bb44ffabd990aa /sql/table.cc | |
parent | 47ea526efa755750c17b68e799617fb69169a2e7 (diff) | |
download | mariadb-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.cc | 21 |
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"); |