Commit 05c7edf6 authored by unknown's avatar unknown
Browse files

Move reset of insert_values to ensure it's done also during error conditions

This fixed a failure of insert_update.test on some platforms


mysys/thr_alarm.c:
  Fixed problem noticed by valgrind
sql/opt_range.cc:
  Simple optimization for common case
sql/sql_base.cc:
  Safety assert
sql/sql_insert.cc:
  Added comment
parent 2776aa35
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ void init_thr_alarm(uint max_alarms)
  {
    struct sigaction sact;
    sact.sa_flags = 0;
    bzero((char*) &sact, sizeof(sact));
    sact.sa_handler = thread_alarm;
    sigaction(THR_CLIENT_ALARM, &sact, (struct sigaction*) 0);
  }
+1 −2
Original line number Diff line number Diff line
@@ -981,8 +981,7 @@ get_mm_parts(PARAM *param, COND *cond_func, Field *field,
    SEL_TREE *tree2= get_mm_parts(param, cond_func,
				  field, Item_func::GT_FUNC,
                                  value, cmp_type);
    if (!tree2)
      DBUG_RETURN(0);
    /* tree_or() will return 0 if tree2 is 0 */
    tree= tree_or(param,tree,tree2);
  }
  DBUG_RETURN(tree);
+1 −0
Original line number Diff line number Diff line
@@ -979,6 +979,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
  if (table->timestamp_field)
    table->timestamp_field_type= table->timestamp_field->get_auto_set_type();
  DBUG_ASSERT(table->key_read == 0);
  DBUG_ASSERT(table->insert_values == 0);
  DBUG_RETURN(table);
}

+4 −0
Original line number Diff line number Diff line
@@ -516,6 +516,10 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
    ON DUPLICATE KEY ...
    we should be able to refer to sum1 in the ON DUPLICATE KEY part

  WARNING
    You MUST set table->insert_values to 0 after calling this function
    before releasing the table object.

  RETURN VALUE
    0   OK
    -1  error (message is not sent to user)
+1 −1
Original line number Diff line number Diff line
@@ -2891,12 +2891,12 @@ mysql_execute_command(THD *thd)
      /* revert changes for SP */
      lex->select_lex.resolve_mode= SELECT_LEX::INSERT_MODE;
      delete result;
      insert_table->insert_values= 0;
      if (thd->net.report_error)
        res= -1;
    }
    else
      res= -1;
    insert_table->insert_values= 0;        // Set by mysql_prepare_insert()
    first_local_table->next= tables;
    lex->select_lex.table_list.first= (byte*) first_local_table;
    break;