diff options
author | Michael Widenius <monty@askmonty.org> | 2009-12-03 13:19:05 +0200 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2009-12-03 13:19:05 +0200 |
commit | 82e910d146fa3803200176875cc6cb5ddf6d1483 (patch) | |
tree | 6395890be2935ea39f0babd666cfc8ac50577510 /storage/federatedx | |
parent | 4c14f9f23c725fd15b6b3c29bff07d925047e8ac (diff) | |
parent | fb8a529d6eeff616ff13fabce2234d3bfe2e4b57 (diff) | |
download | mariadb-git-82e910d146fa3803200176875cc6cb5ddf6d1483.tar.gz |
Merge with maria-5.1-federatedx; A patch to fix bugs in federatedx and enable federated_server.test
Author: Antony Curtis
License: BSD
client/mysql.cc:
Reset variable if CTRL-C was used to kill running query, so that the user can do it again
client/mysqlcheck.c:
Indentation fix
client/mysqlslap.c:
Indentation fixes
client/mysqltest.cc:
Make testing of commands safer by also testing length
Removed not used variable
Fixed indentation to be as it was before last patch
mysql-test/lib/mtr_report.pm:
Fixed typo
mysql-test/mysql-test-run.pl:
Merge (Align code with default mysql-tes-run.pl)
mysql-test/suite/federated/disabled.def:
Removed test case
storage/federatedx/ha_federatedx.cc:
Removed my changes and applied Antony's instead
Diffstat (limited to 'storage/federatedx')
-rw-r--r-- | storage/federatedx/ha_federatedx.cc | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc index 308215fe839..e06f39c073f 100644 --- a/storage/federatedx/ha_federatedx.cc +++ b/storage/federatedx/ha_federatedx.cc @@ -1,5 +1,5 @@ /* -Copyright (c) 2008, Patrick Galbraith +Copyright (c) 2008-2009, Patrick Galbraith & Antony Curtis All rights reserved. Redistribution and use in source and binary forms, with or without @@ -308,7 +308,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#define MYSQL_SERVER 1q +#define MYSQL_SERVER 1 #include "mysql_priv.h" #include <mysql/plugin.h> @@ -1627,7 +1627,13 @@ static int free_server(federatedx_txn *txn, FEDERATEDX_SERVER *server) { MEM_ROOT mem_root; - txn->close(server); + if (!txn) + { + federatedx_txn tmp_txn; + tmp_txn.close(server); + } + else + txn->close(server); DBUG_ASSERT(server->io_count == 0); @@ -1785,21 +1791,25 @@ int ha_federatedx::close(void) if (stored_result) retval= free_result(); - /* Disconnect from mysql. thd may be null during refresh */ - txn= thd ? get_txn(thd, true) : new federatedx_txn(); + /* Disconnect from mysql */ + if (!thd || !(txn= get_txn(thd, true))) + { + federatedx_txn tmp_txn; + + tmp_txn.release(&io); - if (txn) + DBUG_ASSERT(io == NULL); + + if ((error= free_share(&tmp_txn, share))) + retval= error; + } + else { txn->release(&io); - DBUG_ASSERT(io == NULL); if ((error= free_share(txn, share))) retval= error; - - if (!thd) - delete txn; - } DBUG_RETURN(retval); } @@ -2793,14 +2803,16 @@ int ha_federatedx::rnd_end() int ha_federatedx::free_result() { int error; + federatedx_io *tmp_io= 0, **iop; DBUG_ASSERT(stored_result); - if ((error= txn->acquire(share, FALSE, &io))) + if (!*(iop= &io) && (error= txn->acquire(share, TRUE, (iop= &tmp_io)))) { DBUG_ASSERT(0); // Fail when testing return error; } - io->free_result(stored_result); + (*iop)->free_result(stored_result); stored_result= 0; + txn->release(&tmp_io); return 0; } @@ -2985,7 +2997,7 @@ int ha_federatedx::info(uint flag) { char error_buffer[FEDERATEDX_QUERY_BUFFER_SIZE]; uint error_code; - federatedx_io *tmp_io= 0; + federatedx_io *tmp_io= 0, **iop= 0; DBUG_ENTER("ha_federatedx::info"); error_code= ER_QUERY_ON_FOREIGN_DATA_SOURCE; @@ -2993,7 +3005,7 @@ int ha_federatedx::info(uint flag) /* we want not to show table status if not needed to do so */ if (flag & (HA_STATUS_VARIABLE | HA_STATUS_CONST | HA_STATUS_AUTO)) { - if ((error_code= txn->acquire(share, TRUE, &tmp_io))) + if (!*(iop= &io) && (error_code= txn->acquire(share, TRUE, (iop= &tmp_io)))) goto fail; } @@ -3006,13 +3018,13 @@ int ha_federatedx::info(uint flag) if (flag & HA_STATUS_CONST) stats.block_size= 4096; - if (tmp_io->table_metadata(&stats, share->table_name, + if ((*iop)->table_metadata(&stats, share->table_name, share->table_name_length, flag)) goto error; } if (flag & HA_STATUS_AUTO) - stats.auto_increment_value= tmp_io->last_insert_id(); + stats.auto_increment_value= (*iop)->last_insert_id(); /* If ::info created it's own transaction, close it. This happens in case @@ -3023,10 +3035,10 @@ int ha_federatedx::info(uint flag) DBUG_RETURN(0); error: - if (tmp_io) + if (iop && *iop) { my_sprintf(error_buffer, (error_buffer, ": %d : %s", - tmp_io->error_code(), tmp_io->error_str())); + (*iop)->error_code(), (*iop)->error_str())); my_error(error_code, MYF(0), error_buffer); } else |