List:Commits« Previous MessageNext Message »
From:Gleb Shchepa Date:August 26 2008 9:26pm
Subject:bzr commit into mysql-5.0 branch (gshchepa:2674) Bug#39002
View as plain text  
#At file:///work/bzr/5.0-bugteam-39002/

 2674 Gleb Shchepa	2008-08-27
      Bug #39002: The server crashes on the query:
        INSERT .. SELECT .. ON DUPLICATE KEY UPDATE col=DEFAULT
      
      In order to get correct values from update fields that
      belongs to the SELECT part in the INSERT .. SELECT .. ON
      DUPLICATE KEY UPDATE statement, the server adds referenced
      fields to the select list. Part of the code that does this
      transformation is shared between implementations of
      the DEFAULT(col) function and the DEFAULT keyword (in
      the col=DEFAULT expression), and an implementation of
      the DEFAULT keyword is incomplete.
      
      
      The Item_default_value::transform() function has been
      modified to take into account the fact that the DEFAULT
      keyword has no arguments dislike the DEFAULT(col) function
      that always has an argument.
modified:
  mysql-test/r/default.result
  mysql-test/t/default.test
  sql/item.cc

per-file messages:
  mysql-test/r/default.result
    Added test case for bug #39002.
  mysql-test/t/default.test
    Added test case for bug #39002.
  sql/item.cc
    The Item_default_value::transform() function has been
    modified to take into account the fact that the DEFAULT
    keyword has no arguments dislike the DEFAULT(col) function
    that always has an argument.
=== modified file 'mysql-test/r/default.result'
--- a/mysql-test/r/default.result	2007-09-20 08:54:46 +0000
+++ b/mysql-test/r/default.result	2008-08-26 21:26:19 +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-08-26 21:26:19 +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 09:49:28 +0000
+++ b/sql/item.cc	2008-08-26 21:26:19 +0000
@@ -6046,6 +6046,9 @@ Item *Item_default_value::transform(Item
 {
   DBUG_ASSERT(!current_thd->is_stmt_prepare());
 
+  if (!arg)
+    return 0;
+
   Item *new_item= arg->transform(transformer, args);
   if (!new_item)
     return 0;

Thread
bzr commit into mysql-5.0 branch (gshchepa:2674) Bug#39002Gleb Shchepa26 Aug