mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Bug #24010: INSERT INTO ... SELECT fails on unique constraint with data
it doesn't select. This bug was fixed along with bug #16861: User defined variable can have a wrong value if a tmp table was used. There the fix consisted of Item_func_set_user_var overloading the method Item::save_in_field. Consider the query from the test case: INSERT INTO foo( bar, baz ) SELECT bar, @newBaz := 1 + baz FROM foo WHERE quux <= 0.1; Here the assignment expression '@newBaz := 1 + baz' is represented by an Item_func_set_user_var. Its member method save_in_field, which writes the value of this assignment into the result field, writes the val_xxx() value, which is not updated at this point. In the fix introduced by the patch, the save_in_field method reads the actual variable value instead. See also comment for ChangeSet@1.2368.1.3, 2007-01-09 23:24:56+03:00, evgen@moonbone.local +4 -0 and comment for Item_func_set_user_var::save_in_field (item_func.cc)
This commit is contained in:
parent
30614d22c1
commit
340ab21795
2 changed files with 45 additions and 0 deletions
|
@ -434,3 +434,22 @@ Handler_read_prev 0
|
|||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 21
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
a INT(11),
|
||||
quux decimal( 31, 30 ),
|
||||
UNIQUE KEY bar (a),
|
||||
KEY quux (quux)
|
||||
);
|
||||
INSERT INTO
|
||||
t1 ( a, quux )
|
||||
VALUES
|
||||
( 1, 1 ),
|
||||
( 2, 0.1 );
|
||||
INSERT INTO t1( a )
|
||||
SELECT @newA := 1 + a FROM t1 WHERE quux <= 0.1;
|
||||
SELECT * FROM t1;
|
||||
a quux
|
||||
1 1.000000000000000000000000000000
|
||||
2 0.100000000000000000000000000000
|
||||
3 NULL
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -342,3 +342,29 @@ UPDATE t1 SET user_id=null WHERE request_id=999999999999999999999999999999;
|
|||
show status like '%Handler_read%';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #24010: INSERT INTO ... SELECT fails on unique constraint with data it
|
||||
# doesn't select
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
|
||||
a INT(11),
|
||||
quux decimal( 31, 30 ),
|
||||
|
||||
UNIQUE KEY bar (a),
|
||||
KEY quux (quux)
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
t1 ( a, quux )
|
||||
VALUES
|
||||
( 1, 1 ),
|
||||
( 2, 0.1 );
|
||||
|
||||
INSERT INTO t1( a )
|
||||
SELECT @newA := 1 + a FROM t1 WHERE quux <= 0.1;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
Loading…
Reference in a new issue