summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagne Mahre <magne.mahre@sun.com>2009-11-25 19:29:52 +0100
committerMagne Mahre <magne.mahre@sun.com>2009-11-25 19:29:52 +0100
commitdd6fd68f93aff0e3f9bd11c926685265638c699f (patch)
treecbbe5a4f8edf1ba7e17710f2b90f65ab9f0c1693
parentbe0add42f53b23d8a5e279cb3041a3fc93e375a0 (diff)
downloadmariadb-git-dd6fd68f93aff0e3f9bd11c926685265638c699f.tar.gz
Bug#40677 Archive tables joined on primary return no result
Select queries on archive tables when joined on their primary keys returns no results(empty set) Archive storage doesn't inform the handler about the fetched record status when it is found. Fixed the archive storage engine to update the record status when it fetches successfully
-rw-r--r--mysql-test/r/archive.result10
-rw-r--r--mysql-test/t/archive.test12
-rw-r--r--storage/archive/ha_archive.cc4
3 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result
index e865d775c6a..a250821d12b 100644
--- a/mysql-test/r/archive.result
+++ b/mysql-test/r/archive.result
@@ -12717,3 +12717,13 @@ COUNT(t1.a)
729
DROP TABLE t1;
SET @@join_buffer_size= @save_join_buffer_size;
+End of 5.1 tests
+CREATE TABLE t1(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id)) ENGINE=archive;
+INSERT INTO t1 VALUES(NULL,'a'),(NULL,'a');
+CREATE TABLE t2(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id)) ENGINE=archive;
+INSERT INTO t2 VALUES(NULL,'b'),(NULL,'b');
+SELECT t1.id, t2.id, t1.name, t2.name FROM t1,t2 WHERE t1.id = t2.id;
+id id name name
+1 1 a b
+2 2 a b
+DROP TABLE t1,t2;
diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test
index aad3d19455d..a27efcf9583 100644
--- a/mysql-test/t/archive.test
+++ b/mysql-test/t/archive.test
@@ -1623,3 +1623,15 @@ INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
SELECT COUNT(t1.a) FROM t1, t1 a, t1 b, t1 c, t1 d, t1 e;
DROP TABLE t1;
SET @@join_buffer_size= @save_join_buffer_size;
+
+--echo End of 5.1 tests
+
+#
+# BUG#40677 - Archive tables joined on primary return no result
+#
+CREATE TABLE t1(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id)) ENGINE=archive;
+INSERT INTO t1 VALUES(NULL,'a'),(NULL,'a');
+CREATE TABLE t2(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id)) ENGINE=archive;
+INSERT INTO t2 VALUES(NULL,'b'),(NULL,'b');
+SELECT t1.id, t2.id, t1.name, t2.name FROM t1,t2 WHERE t1.id = t2.id;
+DROP TABLE t1,t2;
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc
index a341843662f..f69b19369b2 100644
--- a/storage/archive/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -953,7 +953,11 @@ int ha_archive::index_read_idx(uchar *buf, uint index, const uchar *key,
}
if (found)
+ {
+ /* notify handler that a record has been found */
+ table->status= 0;
DBUG_RETURN(0);
+ }
error:
DBUG_RETURN(rc ? rc : HA_ERR_END_OF_FILE);