summaryrefslogtreecommitdiff
path: root/sql/sql_cursor.cc
diff options
context:
space:
mode:
authorkostja@dipika.(none) <>2008-02-19 14:43:01 +0300
committerkostja@dipika.(none) <>2008-02-19 14:43:01 +0300
commitacf9b1f346e8b9dc59ad8e1f6a1ff20ef96d0dcd (patch)
treee540052e63f7376b653b6418116db3340c22b891 /sql/sql_cursor.cc
parent48d326612aa16f2d7fdcc9e78f5f7b99f0e3c0a7 (diff)
downloadmariadb-git-acf9b1f346e8b9dc59ad8e1f6a1ff20ef96d0dcd.tar.gz
A fix and a test case for Bug#12713 "Error in a stored function called from
a SELECT doesn't cause ROLLBACK of statem". The idea of the fix is to ensure that we always commit the current statement at the end of dispatch_command(). In order to not issue redundant disc syncs, an optimization of the two-phase commit protocol is implemented to bypass the two phase commit if the transaction is read-only.
Diffstat (limited to 'sql/sql_cursor.cc')
-rw-r--r--sql/sql_cursor.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc
index 2301b561797..6f2bac73dc4 100644
--- a/sql/sql_cursor.cc
+++ b/sql/sql_cursor.cc
@@ -322,9 +322,10 @@ Sensitive_cursor::post_open(THD *thd)
close_at_commit= FALSE; /* reset in case we're reusing the cursor */
info= &ht_info[0];
- for (handlerton **pht= thd->transaction.stmt.ht; *pht; pht++)
+ for (Ha_trx_info *ha_trx_info= thd->transaction.stmt.ha_list;
+ ha_trx_info; ha_trx_info= ha_trx_info->next())
{
- handlerton *ht= *pht;
+ handlerton *ht= ha_trx_info->ht();
close_at_commit|= test(ht->flags & HTON_CLOSE_CURSORS_AT_COMMIT);
if (ht->create_cursor_read_view)
{