MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Gleb Shchepa Date:September 3 2008 8:06am
Subject:bzr commit into mysql-5.1 branch (gshchepa:2677)
View as plain text  
#At file:///work/bzr/mysql-5.1-5.1.29-rc/

 2677 Gleb Shchepa	2008-09-03 [merge]
      merge 5.0 --> 5.1
modified:
  mysql-test/r/default.result
  mysql-test/t/default.test
  sql/item.cc

=== modified file 'mysql-test/r/default.result'
--- a/mysql-test/r/default.result	2007-09-20 09:10:05 +0000
+++ b/mysql-test/r/default.result	2008-09-03 08:06:03 +0000
@@ -205,4 +205,19 @@ Warnings:
 Warning	1364	Field 'id' doesn't have a default value
 drop view v1;
 drop table t1;
+create table t1 (a int unique);
+create table t2 (b int default 10);
+insert into t1 (a) values (1);
+insert into t2 (b) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default;
+select * from t1;
+a
+NULL
+insert into t1 (a) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default(b);
+select * from t1;
+a
+NULL
+10
+drop table t1, t2;
 End of 5.0 tests.

=== modified file 'mysql-test/t/default.test'
--- a/mysql-test/t/default.test	2007-02-12 11:41:36 +0000
+++ b/mysql-test/t/default.test	2008-09-03 07:32:43 +0000
@@ -145,5 +145,24 @@ insert into t1 values(default);
 drop view v1;
 drop table t1;
 
+#
+# Bug #39002: crash with
+#             INSERT ... SELECT ... ON DUPLICATE KEY UPDATE col=DEFAULT
+#
+
+create table t1 (a int unique);
+create table t2 (b int default 10);
+insert into t1 (a) values (1);
+insert into t2 (b) values (1);
+
+insert into t1 (a) select b from t2 on duplicate key update a=default;
+select * from t1;
+
+insert into t1 (a) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default(b);
+select * from t1;
+
+drop table t1, t2;
+
 --echo End of 5.0 tests.
 

=== modified file 'sql/item.cc'
--- a/sql/item.cc	2008-08-20 11:42:01 +0000
+++ b/sql/item.cc	2008-09-03 08:06:03 +0000
@@ -6210,6 +6210,13 @@ Item *Item_default_value::transform(Item
 {
   DBUG_ASSERT(!current_thd->is_stmt_prepare());
 
+  /*
+    If the value of arg is NULL, then this object represents a constant,
+    so further transformation is unnecessary (and impossible).
+  */
+  if (!arg)
+    return 0;
+
   Item *new_item= arg->transform(transformer, args);
   if (!new_item)
     return 0;

Thread
bzr commit into mysql-5.1 branch (gshchepa:2677) Gleb Shchepa3 Sep