List:Internals« Previous MessageNext Message »
From:eugene Date:September 27 2005 8:58pm
Subject:bk commit into 4.1 tree (evgen:1.2457) BUG#13356
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of evgen. When evgen does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2457 05/09/28 00:58:12 evgen@stripped +3 -0
  Fix bug#13356 resolve_const_item() wasn't able to handle Item_row items.
  
  resolve_const_item() assumed to be not called for Item_row items. For
  ensuring that DBUG_ASSERT(0) was set there.
  
  This patch adds section for Item_row items. If it can it recursively calls
  resolve_const_item() for each item the Item_row contains. If any of the
  contained items is null then whole Item_row substitued by Item_null. Otherwise
  it just returns.

  mysql-test/r/select.result
    1.63 05/09/28 00:40:41 evgen@stripped +9 -0
    Test case for bug#13356 resolve_const_item() wasn't able to handle Item_row items.

  mysql-test/t/select.test
    1.47 05/09/28 00:40:10 evgen@stripped +10 -0
    Test case for bug#13356 resolve_const_item() wasn't able to handle Item_row items.

  sql/item.cc
    1.222 05/09/28 00:39:39 evgen@stripped +29 -0
    Fix bug#13356 resolve_const_item() wasn't able to handle Item_row items.
    
    Added section to resolve_const_item() for Item_row items. If it can it
    recursively calls resolve_const_item() for each item the Item_row contains. If
    any of the contained items is null then Item_row is substituted by Item_null.
    Otherwise it just returns.
    Comment moved closer to function it belongs to.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	evgen
# Host:	moonbone.local
# Root:	/work/13356-bug-4.1-mysql

--- 1.221/sql/item.cc	2005-09-09 12:22:12 +04:00
+++ 1.222/sql/item.cc	2005-09-28 00:39:39 +04:00
@@ -2870,6 +2870,35 @@
     new_item= (null_value ? (Item*) new Item_null(name) :
                (Item*) new Item_int(name, result, length));
   }
+  else if (res_type == ROW_RESULT)
+  {
+    new_item= 0;
+    /*
+      If item and comp_item are both Item_rows and have same number of cols
+      then process items in Item_row one by one. If Item_row contain nulls
+      substitute it by Item_null. Otherwise just return.
+    */
+    if (item->result_type() == comp_item->result_type() &&
+        ((Item_row*)item)->cols() == ((Item_row*)comp_item)->cols())
+    {
+      Item_row *item_row= (Item_row*)item,*comp_item_row= (Item_row*)comp_item;
+      if (item_row->null_inside())
+        new_item= (Item*) new Item_null(name);
+      else
+      {
+        int i= item_row->cols() - 1;
+        for (; i >= 0; i--)
+        {
+          if (item_row->maybe_null && item_row->el(i)->is_null())
+          {
+            new_item= (Item*) new Item_null(name);
+            break;
+          }
+          resolve_const_item(thd, item_row->addr(i), comp_item_row->el(i));
+        }
+      }
+    }
+  }
   else
   {						// It must REAL_RESULT
     double result=item->val();

--- 1.62/mysql-test/r/select.result	2005-07-19 20:24:58 +04:00
+++ 1.63/mysql-test/r/select.result	2005-09-28 00:40:41 +04:00
@@ -2617,3 +2617,12 @@
 found_rows()
 1
 DROP TABLE t1;
+create table t1(f1 int, f2 int);
+create table t2(f3 int);
+select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1));
+f1
+select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1));
+f1
+select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL));
+f1
+drop table t1,t2;

--- 1.46/mysql-test/t/select.test	2005-07-28 04:21:49 +04:00
+++ 1.47/mysql-test/t/select.test	2005-09-28 00:40:10 +04:00
@@ -2164,4 +2164,14 @@
 
 DROP TABLE t1;
 
+#
+# Bug #13356 assertion failed in resolve_const_item()
+#
+create table t1(f1 int, f2 int);
+create table t2(f3 int);
+select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1));
+select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1));
+select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL));
+drop table t1,t2; 
+
 # End of 4.1 tests
Thread
bk commit into 4.1 tree (evgen:1.2457) BUG#13356eugene27 Sep