Merge gleb.loc:/home/uchum/work/bk/mysql-5.0-opt
into gleb.loc:/home/uchum/work/bk/mysql-5.0-opt-27954
This commit is contained in:
commit
59efb58ffb
@ -336,3 +336,25 @@ id f1
|
||||
0 test1
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE='';
|
||||
CREATE TABLE t1 (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
c1 CHAR(1) UNIQUE KEY,
|
||||
cnt INT DEFAULT 1
|
||||
);
|
||||
INSERT INTO t1 (c1) VALUES ('A'), ('B'), ('C');
|
||||
SELECT * FROM t1;
|
||||
id c1 cnt
|
||||
1 A 1
|
||||
2 B 1
|
||||
3 C 1
|
||||
INSERT INTO t1 (c1) VALUES ('A'), ('X'), ('Y'), ('Z')
|
||||
ON DUPLICATE KEY UPDATE cnt=cnt+1;
|
||||
SELECT * FROM t1;
|
||||
id c1 cnt
|
||||
1 A 2
|
||||
2 B 1
|
||||
3 C 1
|
||||
4 X 1
|
||||
5 Y 1
|
||||
6 Z 1
|
||||
DROP TABLE t1;
|
||||
|
@ -247,3 +247,20 @@ REPLACE INTO t1 VALUES (0,"test1",null);
|
||||
SELECT id, f1 FROM t1;
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE='';
|
||||
|
||||
#
|
||||
# Bug#27954: multi-row INSERT ... ON DUPLICATE with duplicated
|
||||
# row at the first place into table with AUTO_INCREMENT and
|
||||
# additional UNIQUE key.
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
c1 CHAR(1) UNIQUE KEY,
|
||||
cnt INT DEFAULT 1
|
||||
);
|
||||
INSERT INTO t1 (c1) VALUES ('A'), ('B'), ('C');
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 (c1) VALUES ('A'), ('X'), ('Y'), ('Z')
|
||||
ON DUPLICATE KEY UPDATE cnt=cnt+1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
@ -1685,7 +1685,14 @@ void handler::restore_auto_increment()
|
||||
{
|
||||
THD *thd= table->in_use;
|
||||
if (thd->next_insert_id)
|
||||
{
|
||||
thd->next_insert_id= thd->prev_insert_id;
|
||||
if (thd->next_insert_id == 0)
|
||||
{
|
||||
/* we didn't generate a value, engine will be called again */
|
||||
thd->clear_next_insert_id= 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1431,6 +1431,10 @@ public:
|
||||
*/
|
||||
bool insert_id_used;
|
||||
|
||||
/*
|
||||
clear_next_insert_id is set if engine was called at least once
|
||||
for this statement to generate auto_increment value.
|
||||
*/
|
||||
bool clear_next_insert_id;
|
||||
/* for IS NULL => = last_insert_id() fix in remove_eq_conds() */
|
||||
bool substitute_null_with_insert_id;
|
||||
|
Loading…
x
Reference in New Issue
Block a user