summaryrefslogtreecommitdiff
path: root/sql/sql_insert.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r--sql/sql_insert.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 25ed03c4051..966fe45e690 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -730,6 +730,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
uint used_fields_buff_size= bitmap_buffer_size(table->s->fields);
uint32 *used_fields_buff= (uint32*)thd->alloc(used_fields_buff_size);
MY_BITMAP used_fields;
+ bool save_set_query_id= thd->set_query_id;
DBUG_ENTER("check_key_in_view");
if (!used_fields_buff)
@@ -741,15 +742,26 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
bitmap_clear_all(&used_fields);
view->contain_auto_increment= 0;
+ /*
+ we must not set query_id for fields as they're not
+ really used in this context
+ */
+ thd->set_query_id= 0;
/* check simplicity and prepare unique test of view */
for (trans= trans_start; trans != trans_end; trans++)
{
if (!trans->item->fixed && trans->item->fix_fields(thd, &trans->item))
- return TRUE;
+ {
+ thd->set_query_id= save_set_query_id;
+ DBUG_RETURN(TRUE);
+ }
Item_field *field;
/* simple SELECT list entry (field without expression) */
if (!(field= trans->item->filed_for_view_update()))
+ {
+ thd->set_query_id= save_set_query_id;
DBUG_RETURN(TRUE);
+ }
if (field->field->unireg_check == Field::NEXT_NUMBER)
view->contain_auto_increment= 1;
/* prepare unique test */
@@ -759,6 +771,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
*/
trans->item= field;
}
+ thd->set_query_id= save_set_query_id;
/* unique test */
for (trans= trans_start; trans != trans_end; trans++)
{