diff options
author | Igor Babaev <igor@askmonty.org> | 2013-01-21 21:29:19 -0800 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2013-01-21 21:29:19 -0800 |
commit | 746152959a8787f3c7cf6b1c710fc1ee6c54419f (patch) | |
tree | fc887933e9d5aaf6d9c83d3e36bba237862c6e65 /sql/sql_insert.cc | |
parent | 2255132f200940186c6e9dfcedae6edb85e7cee7 (diff) | |
parent | 8127e631de90dddc25b3cdffe59e147333eb6c74 (diff) | |
download | mariadb-git-746152959a8787f3c7cf6b1c710fc1ee6c54419f.tar.gz |
Merge 5.2->5.3
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r-- | sql/sql_insert.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 713cc7465fe..bfd08e83ca2 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -2129,6 +2129,7 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd) { my_ptrdiff_t adjust_ptrs; Field **field,**org_field, *found_next_number_field; + Field **vfield; TABLE *copy; TABLE_SHARE *share; uchar *bitmap; @@ -2172,6 +2173,13 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd) if (!copy_tmp) goto error; + if (share->vfields) + { + vfield= (Field **) client_thd->alloc((share->vfields+1)*sizeof(Field*)); + if (!vfield) + goto error; + } + /* Copy the TABLE object. */ copy= new (copy_tmp) TABLE; *copy= *table; @@ -2201,6 +2209,27 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd) } *field=0; + if (share->vfields) + { + copy->vfield= vfield; + for (field= copy->field; *field; field++) + { + if ((*field)->vcol_info) + { + bool error_reported= FALSE; + if (unpack_vcol_info_from_frm(client_thd, + client_thd->mem_root, + copy, + *field, + &(*field)->vcol_info->expr_str, + &error_reported)) + goto error; + *vfield++= *field; + } + } + *vfield= 0; + } + /* Adjust timestamp */ if (table->timestamp_field) { |