summaryrefslogtreecommitdiff
path: root/sql/handler.cc
diff options
context:
space:
mode:
authorunknown <dlenev@mysql.com>2005-11-19 15:11:57 +0300
committerunknown <dlenev@mysql.com>2005-11-19 15:11:57 +0300
commite2de3a8fc4432788b6e7fff6dce884b8eb7b1a44 (patch)
tree03a4051dfbf4ff6941306a61203be4a69e24499a /sql/handler.cc
parent6ba79a251681a765f491db1428a467a0a06a69bd (diff)
parent11d4d7e6ff3c8b82e47bb62e26b1f10690daabb0 (diff)
downloadmariadb-git-e2de3a8fc4432788b6e7fff6dce884b8eb7b1a44.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-bg13825 sql/ha_innodb.cc: Auto merged sql/handler.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_parse.cc: Auto merged
Diffstat (limited to 'sql/handler.cc')
-rw-r--r--sql/handler.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/sql/handler.cc b/sql/handler.cc
index 7724b27949e..866d9bdf0b5 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -1145,10 +1145,10 @@ int ha_update_statistics()
int ha_rollback_to_savepoint(THD *thd, SAVEPOINT *sv)
{
int error=0;
- THD_TRANS *trans=&thd->transaction.all;
+ THD_TRANS *trans= (thd->in_sub_stmt ? &thd->transaction.stmt :
+ &thd->transaction.all);
handlerton **ht=trans->ht, **end_ht;
DBUG_ENTER("ha_rollback_to_savepoint");
- DBUG_ASSERT(thd->transaction.stmt.ht[0] == 0);
trans->nht=sv->nht;
trans->no_2pc=0;
@@ -1176,7 +1176,7 @@ int ha_rollback_to_savepoint(THD *thd, SAVEPOINT *sv)
for (; *ht ; ht++)
{
int err;
- if ((err= (*(*ht)->rollback)(thd, 1)))
+ if ((err= (*(*ht)->rollback)(thd, !thd->in_sub_stmt)))
{ // cannot happen
my_error(ER_ERROR_DURING_ROLLBACK, MYF(0), err);
error=1;
@@ -1196,10 +1196,10 @@ int ha_rollback_to_savepoint(THD *thd, SAVEPOINT *sv)
int ha_savepoint(THD *thd, SAVEPOINT *sv)
{
int error=0;
- THD_TRANS *trans=&thd->transaction.all;
+ THD_TRANS *trans= (thd->in_sub_stmt ? &thd->transaction.stmt :
+ &thd->transaction.all);
handlerton **ht=trans->ht;
DBUG_ENTER("ha_savepoint");
- DBUG_ASSERT(thd->transaction.stmt.ht[0] == 0);
#ifdef USING_TRANSACTIONS
for (; *ht; ht++)
{
@@ -1225,9 +1225,10 @@ int ha_savepoint(THD *thd, SAVEPOINT *sv)
int ha_release_savepoint(THD *thd, SAVEPOINT *sv)
{
int error=0;
- handlerton **ht=thd->transaction.all.ht, **end_ht;
+ THD_TRANS *trans= (thd->in_sub_stmt ? &thd->transaction.stmt :
+ &thd->transaction.all);
+ handlerton **ht=trans->ht, **end_ht;
DBUG_ENTER("ha_release_savepoint");
- DBUG_ASSERT(thd->transaction.stmt.ht[0] == 0);
end_ht=ht+sv->nht;
for (; ht < end_ht; ht++)