summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2005-06-28 15:06:16 +0300
committerunknown <monty@mysql.com>2005-06-28 15:06:16 +0300
commit05c7edf64801efa5b0d99ca779eb0b31a4d92462 (patch)
treebf56a30c6bb6b1807ab7d923cca1960af81c0459
parent2776aa35b7abc4c0f742eaa94c04b4072e2ba83d (diff)
downloadmariadb-git-05c7edf64801efa5b0d99ca779eb0b31a4d92462.tar.gz
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
-rw-r--r--mysys/thr_alarm.c1
-rw-r--r--sql/opt_range.cc3
-rw-r--r--sql/sql_base.cc1
-rw-r--r--sql/sql_insert.cc4
-rw-r--r--sql/sql_parse.cc2
5 files changed, 8 insertions, 3 deletions
diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index 19611a6027a..05d14073953 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -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);
}
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 9f268804cc3..2dd097cbaab 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -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);
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index c9861790b06..7a36d33a42c 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -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);
}
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index deccc1d4dca..7d613ad6fbf 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -516,6 +516,10 @@ abort:
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)
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index c0283f81315..d7fd3239df5 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2891,12 +2891,12 @@ unsent_create_error:
/* 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;