diff options
author | kostja@dipika.(none) <> | 2008-02-19 14:43:01 +0300 |
---|---|---|
committer | kostja@dipika.(none) <> | 2008-02-19 14:43:01 +0300 |
commit | acf9b1f346e8b9dc59ad8e1f6a1ff20ef96d0dcd (patch) | |
tree | e540052e63f7376b653b6418116db3340c22b891 /sql/sql_cursor.cc | |
parent | 48d326612aa16f2d7fdcc9e78f5f7b99f0e3c0a7 (diff) | |
download | mariadb-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.cc | 5 |
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) { |