summaryrefslogtreecommitdiff
path: root/sql/sql_prepare.cc
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2006-04-12 18:30:54 +0400
committerunknown <konstantin@mysql.com>2006-04-12 18:30:54 +0400
commite46a193be82ba9956ac2db8e015fb528c84842da (patch)
tree96d659fbe401a4fa1269027a7637692d3bfc1258 /sql/sql_prepare.cc
parent10633fd8397f8450b5076bb98f336f6d20967b5d (diff)
parentf37d610147cbd51bde10aceac4d18e2f1c415e68 (diff)
downloadmariadb-git-e46a193be82ba9956ac2db8e015fb528c84842da.tar.gz
Merge mysql.com:/opt/local/work/mysql-4.1-16365
into mysql.com:/opt/local/work/mysql-5.0-merge sql/set_var.cc: Auto merged mysql-test/r/ps.result: Manual merge. mysql-test/t/ps.test: Manual merge. sql/item_row.cc: Manual merge. sql/item_row.h: Manual merge. sql/mysql_priv.h: Manual merge. sql/mysqld.cc: Manual merge. sql/set_var.h: Manual merge. sql/sql_class.cc: Manual merge. sql/sql_class.h: Manual merge. sql/sql_prepare.cc: Manual merge.
Diffstat (limited to 'sql/sql_prepare.cc')
-rw-r--r--sql/sql_prepare.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index ac0687b488d..5a15e67da8e 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -1848,8 +1848,11 @@ void mysql_stmt_prepare(THD *thd, const char *packet, uint packet_length)
if (thd->stmt_map.insert(stmt))
{
- delete stmt;
- DBUG_VOID_RETURN; /* out of memory */
+ /*
+ The error is set in the insert. The statement itself
+ will be also deleted there (this is how the hash works).
+ */
+ DBUG_VOID_RETURN;
}
/* Reset warnings from previous command */
@@ -2026,9 +2029,14 @@ void mysql_sql_stmt_prepare(THD *thd)
DBUG_VOID_RETURN; /* out of memory */
}
- if (stmt->set_name(name) || thd->stmt_map.insert(stmt))
+ if (thd->stmt_map.insert(stmt))
{
- delete stmt;
+ /* The statement is deleted and an error is set if insert fails */
+ DBUG_VOID_RETURN;
+ }
+ if (stmt->set_name(name))
+ {
+ thd->stmt_map.erase(stmt);
DBUG_VOID_RETURN;
}