summaryrefslogtreecommitdiff
path: root/mysql-test/t/update.test
diff options
context:
space:
mode:
authormhansson/martin@linux-st28.site <>2007-02-22 14:11:01 +0100
committermhansson/martin@linux-st28.site <>2007-02-22 14:11:01 +0100
commit340ab217952229912ad445e74b2a7c0a71cd12b5 (patch)
tree2702c1d1b9e4693cf93c05e0fc1494da118112c9 /mysql-test/t/update.test
parent30614d22c195f25d7b59fb2651cfaca15697002c (diff)
downloadmariadb-git-340ab217952229912ad445e74b2a7c0a71cd12b5.tar.gz
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)
Diffstat (limited to 'mysql-test/t/update.test')
-rw-r--r--mysql-test/t/update.test26
1 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/t/update.test b/mysql-test/t/update.test
index 3ce7ef72670..23ee75d61ea 100644
--- a/mysql-test/t/update.test
+++ b/mysql-test/t/update.test
@@ -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;