Commit 2305666a authored by Aleksey Midenkov's avatar Aleksey Midenkov

SQL: insert delayed fix [#365 bug 3]

Affected tests (forced mode): rpl.rpl_timezone
parent 8d548f8e
......@@ -89,7 +89,7 @@ set @str= concat('
engine ', engine);
prepare stmt from @str; execute stmt; drop prepare stmt;
insert into t1(x, y) values(3, 4);
insert into t1(x, y) values(2, 3);
insert delayed into t1(x, y) values(2, 3);
insert into t1 values(40, 33);
set @str= concat('select x, y, ', fields, ' from t1');
prepare stmt from @str; execute stmt; drop prepare stmt;
......
......@@ -17,7 +17,7 @@ begin
engine ', engine);
prepare stmt from @str; execute stmt; drop prepare stmt;
insert into t1(x, y) values(3, 4);
insert into t1(x, y) values(2, 3);
insert delayed into t1(x, y) values(2, 3);
insert into t1 values(40, 33);
set @str= concat('select x, y, ', fields, ' from t1');
prepare stmt from @str; execute stmt; drop prepare stmt;
......
......@@ -2221,7 +2221,9 @@ Field *Field::make_new_field(MEM_ROOT *root, TABLE *new_table,
*/
tmp->unireg_check= Field::NONE;
tmp->flags&= (NOT_NULL_FLAG | BLOB_FLAG | UNSIGNED_FLAG |
ZEROFILL_FLAG | BINARY_FLAG | ENUM_FLAG | SET_FLAG);
ZEROFILL_FLAG | BINARY_FLAG | ENUM_FLAG | SET_FLAG |
VERS_SYS_START_FLAG | VERS_SYS_END_FLAG |
VERS_UPDATE_UNVERSIONED_FLAG | HIDDEN_FLAG);
tmp->reset_fields();
return tmp;
}
......
......@@ -8025,6 +8025,7 @@ fill_record(THD *thd, TABLE *table_arg, List<Item> &fields, List<Item> &values,
goto err;
}
value=v++;
DBUG_ASSERT(value);
Field *rfield= field->field;
TABLE* table= rfield->table;
if (table->next_number_field &&
......
......@@ -683,7 +683,7 @@ Field **TABLE::field_to_fill()
inline
Field **TABLE::user_fields()
Field **TABLE::vers_user_field_to_fill()
{
if (versioned())
{
......@@ -1019,7 +1019,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
}
table->reset_default_fields();
if (fill_record_n_invoke_before_triggers(thd, table,
table->user_fields(),
table->vers_user_field_to_fill(),
*values, 0, TRG_EVENT_INSERT))
{
if (values_list.elements != 1 && ! thd->is_error())
......@@ -2597,6 +2597,9 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd)
}
*field=0;
if (copy->versioned() && copy->vers_update_user_field())
goto error;
if (share->virtual_fields || share->default_expressions ||
share->default_fields)
{
......@@ -3892,7 +3895,7 @@ void select_insert::store_values(List<Item> &values)
fill_record_n_invoke_before_triggers(thd, table, *fields, values, 1,
TRG_EVENT_INSERT);
else
fill_record_n_invoke_before_triggers(thd, table, table->user_fields(),
fill_record_n_invoke_before_triggers(thd, table, table->vers_user_field_to_fill(),
values, 1, TRG_EVENT_INSERT);
DBUG_VOID_RETURN;
......
......@@ -3197,20 +3197,8 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share,
if (share->versioned)
{
Field **dst= (Field **) alloc_root(&outparam->mem_root,
(share->fields - VERSIONING_FIELDS + 1) *
sizeof(Field*));
if (!dst)
if (outparam->vers_update_user_field())
goto err;
outparam->vers_user_field= dst;
for (Field **src= outparam->field; *src; src++)
{
if ((*src)->vers_sys_field())
continue;
*dst++= *src;
}
(*dst)= NULL;
outparam->vers_write= true;
}
else
......@@ -7714,6 +7702,27 @@ void TABLE::vers_update_fields()
}
bool TABLE::vers_update_user_field()
{
DBUG_ASSERT(versioned());
Field **dst= (Field **) alloc_root(&mem_root,
(s->fields - VERSIONING_FIELDS + 1) *
sizeof(Field*));
if (!dst)
return true;
vers_user_field= dst;
for (Field **src= field; *src; src++)
{
if ((*src)->vers_sys_field())
continue;
*dst++= *src;
}
(*dst)= NULL;
return false;
}
bool TABLE_LIST::vers_vtmd_name(String& out) const
{
static const char *vtmd_suffix= "_vtmd";
......
......@@ -1487,7 +1487,8 @@ struct TABLE
bool prepare_triggers_for_update_stmt_or_event();
Field **field_to_fill();
Field **user_fields();
Field **vers_user_field_to_fill();
bool vers_update_user_field();
bool validate_default_values_of_unset_fields(THD *thd) const;
bool insert_all_rows_into_tmp_table(THD *thd,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment