From 84c96a263efc2eacfe3003ed6c997056682adf8a Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 17 Feb 2014 11:09:33 +0100 Subject: [PATCH] different fix for internal Oracle MySQL bug#16324629 that doesn't crash (simply, copied from FederatedX) --- .../federated/federated_maybe_16324629.result | 16 +++++++++++++ .../federated/federated_maybe_16324629.test | 23 +++++++++++++++++++ storage/federated/ha_federated.cc | 3 ++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/federated/federated_maybe_16324629.result create mode 100644 mysql-test/suite/federated/federated_maybe_16324629.test diff --git a/mysql-test/suite/federated/federated_maybe_16324629.result b/mysql-test/suite/federated/federated_maybe_16324629.result new file mode 100644 index 00000000000..b1dd8097cac --- /dev/null +++ b/mysql-test/suite/federated/federated_maybe_16324629.result @@ -0,0 +1,16 @@ +CREATE DATABASE federated; +CREATE DATABASE federated; +create table federated.t1 (a int, b int, unique key (a), key (b)); +create table t1 (a int, b int, unique key (a), key (b)) +engine=federated CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1'; +insert into t1 values (3, 3), (7, 7); +delete t1 from t1 where a = 3; +select * from t1; +a b +3 3 +7 7 +drop table t1; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE IF EXISTS federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE IF EXISTS federated; diff --git a/mysql-test/suite/federated/federated_maybe_16324629.test b/mysql-test/suite/federated/federated_maybe_16324629.test new file mode 100644 index 00000000000..53d79e70c80 --- /dev/null +++ b/mysql-test/suite/federated/federated_maybe_16324629.test @@ -0,0 +1,23 @@ +# +# Inspired by a bug fix for internal Oracle MySQL bug#16324629 +# +source include/federated.inc; + +connection slave; +create table federated.t1 (a int, b int, unique key (a), key (b)); + +connection master; + +--replace_result $SLAVE_MYPORT SLAVE_PORT +eval create table t1 (a int, b int, unique key (a), key (b)) + engine=federated CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1'; + +insert into t1 values (3, 3), (7, 7); +delete t1 from t1 where a = 3; +select * from t1; +drop table t1; + +connection slave; +connection default; +source include/federated_cleanup.inc; + diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 624445dda1a..b3db61355a4 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -2744,7 +2744,8 @@ void ha_federated::position(const uchar *record __attribute__ ((unused))) { DBUG_ENTER("ha_federated::position"); - DBUG_ASSERT(stored_result); + if (!stored_result) + DBUG_VOID_RETURN; position_called= TRUE; /* Store result set address. */