summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorserg@serg.mylan <>2004-06-25 15:12:13 +0200
committerserg@serg.mylan <>2004-06-25 15:12:13 +0200
commit3b59dd1bd0e064dc40127e58c46af4c62f4a1b7b (patch)
treeab0efb23a703bc511f61c4ac63c0c4da1e8ce346
parent02f411124d8bc9306074b8b64912de2e3d3c6b6a (diff)
downloadmariadb-git-3b59dd1bd0e064dc40127e58c46af4c62f4a1b7b.tar.gz
bug#4008 - merge table cannot determine what key caused "dupl. key" error
-rw-r--r--myisammrg/myrg_write.c4
-rw-r--r--mysql-test/r/merge.result18
-rw-r--r--mysql-test/t/merge.test8
3 files changed, 28 insertions, 2 deletions
diff --git a/myisammrg/myrg_write.c b/myisammrg/myrg_write.c
index 0f191edc23c..532709e361d 100644
--- a/myisammrg/myrg_write.c
+++ b/myisammrg/myrg_write.c
@@ -22,9 +22,9 @@ int myrg_write(register MYRG_INFO *info, byte *rec)
{
/* [phi] MERGE_WRITE_DISABLED is handled by the else case */
if (info->merge_insert_method == MERGE_INSERT_TO_FIRST)
- return mi_write(info->open_tables[0].table,rec);
+ return mi_write((info->current_table=info->open_tables)->table,rec);
else if (info->merge_insert_method == MERGE_INSERT_TO_LAST)
- return mi_write(info->end_table[-1].table,rec);
+ return mi_write((info->current_table=info->end_table-1)->table,rec);
else /* unsupported insertion method */
return (my_errno= HA_ERR_WRONG_COMMAND);
}
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result
index 63e0a228aa5..83f8230f11c 100644
--- a/mysql-test/r/merge.result
+++ b/mysql-test/r/merge.result
@@ -544,6 +544,24 @@ insert into t1 values (99,NULL);
select * from t4 where a+0 > 90;
a b
99 1
+insert t5 values (1,1);
+ERROR 23000: Duplicate entry '1-1' for key 1
+insert t6 values (2,1);
+ERROR 23000: Duplicate entry '2-1' for key 1
+insert t5 values (1,1) on duplicate key update b=b+10;
+insert t6 values (2,1) on duplicate key update b=b+20;
+select * from t5 where a < 3;
+a b
+1 2
+1 3
+1 4
+1 5
+1 11
+2 2
+2 3
+2 4
+2 5
+2 21
drop table t6, t5, t4, t3, t2, t1;
CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1,1), (2,1);
diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test
index 1f61e200613..cf55c26fb69 100644
--- a/mysql-test/t/merge.test
+++ b/mysql-test/t/merge.test
@@ -190,6 +190,14 @@ select * from t5 order by a,b;
select * from t6 order by a,b;
insert into t1 values (99,NULL);
select * from t4 where a+0 > 90;
+# bug#4008 - cannot determine a unique key that caused "dupl. key error"
+--error 1062
+insert t5 values (1,1);
+--error 1062
+insert t6 values (2,1);
+insert t5 values (1,1) on duplicate key update b=b+10;
+insert t6 values (2,1) on duplicate key update b=b+20;
+select * from t5 where a < 3;
drop table t6, t5, t4, t3, t2, t1;
CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) ENGINE=MyISAM;