summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <eric@mysql.com>2005-09-02 11:40:21 -0700
committerunknown <eric@mysql.com>2005-09-02 11:40:21 -0700
commit6189933e782a1bf79d3aee8ff1807e762dbc701c (patch)
treeba2502205f0cd536f893ba05b44f5d86dc343905
parent38b7c29a808bf519ce08f851759a2726a39dbb35 (diff)
downloadmariadb-git-6189933e782a1bf79d3aee8ff1807e762dbc701c.tar.gz
delete row now pulls error message from remote server.
Added test cases with archive (where delete & update will always fail) http://bugs.mysql.com/bug.php?id=12659 sql/ha_federated.cc: populate the error buffer with error message from remote system
-rw-r--r--mysql-test/r/federated_archive.result48
-rw-r--r--mysql-test/t/federated_archive.test58
-rw-r--r--sql/ha_federated.cc2
3 files changed, 108 insertions, 0 deletions
diff --git a/mysql-test/r/federated_archive.result b/mysql-test/r/federated_archive.result
new file mode 100644
index 00000000000..f0eded42c38
--- /dev/null
+++ b/mysql-test/r/federated_archive.result
@@ -0,0 +1,48 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+stop slave;
+DROP DATABASE IF EXISTS federated;
+CREATE DATABASE federated;
+DROP DATABASE IF EXISTS federated;
+CREATE DATABASE federated;
+DROP TABLE IF EXISTS federated.archive_table;
+CREATE TABLE federated.archive_table (
+`id` int(4) NOT NULL,
+`name` varchar(54) default NULL
+) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
+DROP TABLE IF EXISTS federated.t1;
+CREATE TABLE federated.t1 (
+`id` int(4) NOT NULL,
+`name` varchar(54) default NULL,
+PRIMARY KEY (`id`)
+)
+ENGINE="FEDERATED" DEFAULT CHARSET=latin1
+COMMENT='mysql://root@127.0.0.1:SLAVE_PORT/federated/archive_table';
+INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
+INSERT INTO federated.t1 (id, name) VALUES (2, 'bar');
+SELECT * FROM federated.t1;
+id name
+1 foo
+2 bar
+DELETE FROM federated.t1 WHERE id = 1;
+ERROR HY000: There was a problem processing the query on the foreign data source. Data source error: ': 1031 : Table storage engine for 'archive_table' doesn't have t'
+SELECT * FROM federated.t1;
+id name
+1 foo
+2 bar
+UPDATE federated.t1 SET name='baz' WHERE id = 1;
+ERROR HY000: There was a problem processing the query on the foreign data source. Data source error: ': 1031 : Table storage engine for 'archive_table' doesn't have t'
+SELECT * FROM federated.t1;
+id name
+1 foo
+2 bar
+DROP TABLE federated.t1;
+DROP TABLE federated.archive_table;
+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/t/federated_archive.test b/mysql-test/t/federated_archive.test
new file mode 100644
index 00000000000..facddebf558
--- /dev/null
+++ b/mysql-test/t/federated_archive.test
@@ -0,0 +1,58 @@
+source include/have_archive.inc;
+source include/federated.inc;
+
+
+connection slave;
+--disable_warnings
+DROP TABLE IF EXISTS federated.archive_table;
+--enable_warnings
+
+CREATE TABLE federated.archive_table (
+ `id` int(4) NOT NULL,
+ `name` varchar(54) default NULL
+ ) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
+
+
+connection master;
+--disable_warnings
+DROP TABLE IF EXISTS federated.t1;
+--enable_warnings
+
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+eval CREATE TABLE federated.t1 (
+ `id` int(4) NOT NULL,
+ `name` varchar(54) default NULL,
+ PRIMARY KEY (`id`)
+ )
+ ENGINE="FEDERATED" DEFAULT CHARSET=latin1
+ COMMENT='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/archive_table';
+
+INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
+INSERT INTO federated.t1 (id, name) VALUES (2, 'bar');
+
+SELECT * FROM federated.t1;
+
+--error 1430
+DELETE FROM federated.t1 WHERE id = 1;
+
+SELECT * FROM federated.t1;
+
+
+--error 1430
+UPDATE federated.t1 SET name='baz' WHERE id = 1;
+
+SELECT * FROM federated.t1;
+
+
+# --error 1430
+# TRUNCATE federated.t1;
+#
+# SELECT * from federated.t1;
+
+DROP TABLE federated.t1;
+connection slave;
+DROP TABLE federated.archive_table;
+
+
+source include/federated_cleanup.inc;
+
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc
index 639f09d10ca..96cb81fe3ec 100644
--- a/sql/ha_federated.cc
+++ b/sql/ha_federated.cc
@@ -1960,6 +1960,8 @@ int ha_federated::delete_row(const byte *buf)
{
int error_code= ER_QUERY_ON_FOREIGN_DATA_SOURCE;
char error_buffer[FEDERATED_QUERY_BUFFER_SIZE];
+ my_sprintf(error_buffer, (error_buffer, ": %d : %s",
+ mysql_errno(mysql), mysql_error(mysql)));
my_error(error_code, MYF(0), error_buffer);
DBUG_RETURN(error_code);
}