List:Commits« Previous MessageNext Message »
From:ramil Date:October 19 2006 1:15pm
Subject:bk commit into 5.0 tree (ramil:1.2308)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of ram. When ram 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@stripped, 2006-10-19 16:15:30+05:00, ramil@stripped +6 -0
  Merge mysql.com:/usr/home/ram/work/bug20732/my41-bug20732
  into  mysql.com:/usr/home/ram/work/bug20732/my50-bug20732
  MERGE: 1.1616.2144.226

  mysql-test/r/range.result@stripped, 2006-10-19 16:15:25+05:00, ramil@stripped +0 -0
    SCCS merged
    MERGE: 1.19.3.8

  mysql-test/t/range.test@stripped, 2006-10-19 16:15:25+05:00, ramil@stripped +0 -0
    SCCS merged
    MERGE: 1.12.2.11

  sql/opt_range.cc@stripped, 2006-10-19 15:46:43+05:00, ramil@stripped +0 -0
    Auto merged
    MERGE: 1.98.2.52

  sql/opt_range.h@stripped, 2006-10-19 15:46:44+05:00, ramil@stripped +0 -0
    Auto merged
    MERGE: 1.28.1.15

  sql/sql_select.cc@stripped, 2006-10-19 15:46:44+05:00, ramil@stripped +0 -0
    Auto merged
    MERGE: 1.216.125.12

  sql/table.cc@stripped, 2006-10-19 15:46:45+05:00, ramil@stripped +0 -0
    Auto merged
    MERGE: 1.111.4.9

# 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:	ramil
# Host:	myoffice.izhnet.ru
# Root:	/usr/home/ram/work/bug20732/my50-bug20732/RESYNC

--- 1.229/sql/opt_range.cc	2006-10-19 16:15:40 +05:00
+++ 1.230/sql/opt_range.cc	2006-10-19 16:15:40 +05:00
@@ -1924,6 +1924,7 @@ int SQL_SELECT::test_quick_select(THD *t
 	key_parts->null_bit=	 key_part_info->null_bit;
         key_parts->image_type =
           (key_info->flags & HA_SPATIAL) ? Field::itMBR : Field::itRAW;
+        key_parts->flag=         key_part_info->key_part_flag;
       }
       param.real_keynr[param.keys++]=idx;
     }
@@ -4347,7 +4348,9 @@ get_mm_leaf(PARAM *param, COND *conf_fun
     }
     break;
   case Item_func::GT_FUNC:
-    if (field_is_equal_to_item(field,value))
+    /* Don't use open ranges for partial key_segments */
+    if (field_is_equal_to_item(field,value) &&
+        !(key_part->flag & HA_PART_KEY_SEG))
       tree->min_flag=NEAR_MIN;
     /* fall through */
   case Item_func::GE_FUNC:
@@ -6237,6 +6240,7 @@ QUICK_RANGE_SELECT *get_quick_select_for
     key_part->length=  	    key_info->key_part[part].length;
     key_part->store_length= key_info->key_part[part].store_length;
     key_part->null_bit=     key_info->key_part[part].null_bit;
+    key_part->flag=         key_info->key_part[part].key_part_flag;
   }
   if (insert_dynamic(&quick->ranges,(gptr)&range))
     goto err;

--- 1.63/sql/opt_range.h	2006-10-19 16:15:40 +05:00
+++ 1.64/sql/opt_range.h	2006-10-19 16:15:40 +05:00
@@ -26,7 +26,7 @@
 
 typedef struct st_key_part {
   uint16           key,part, store_length, length;
-  uint8            null_bit;
+  uint8            null_bit, flag;
   Field            *field;
   Field::imagetype image_type;
 } KEY_PART;

--- 1.463/sql/sql_select.cc	2006-10-19 16:15:40 +05:00
+++ 1.464/sql/sql_select.cc	2006-10-19 16:15:40 +05:00
@@ -11428,7 +11428,7 @@ part_of_refkey(TABLE *table,Field *field
 
     for (uint part=0 ; part < ref_parts ; part++,key_part++)
       if (field->eq(key_part->field) &&
-	  !(key_part->key_part_flag & HA_PART_KEY_SEG))
+	  !(key_part->key_part_flag & (HA_PART_KEY_SEG | HA_NULL_PART)))
 	return table->reginfo.join_tab->ref.items[part];
   }
   return (Item*) 0;

--- 1.235/sql/table.cc	2006-10-19 16:15:40 +05:00
+++ 1.236/sql/table.cc	2006-10-19 16:15:40 +05:00
@@ -820,7 +820,7 @@ int openfrm(THD *thd, const char *name, 
 	    as we need to test for NULL = NULL.
 	  */
 	  if (field->real_maybe_null())
-	    key_part->key_part_flag|= HA_PART_KEY_SEG;
+	    key_part->key_part_flag|= HA_NULL_PART;
 	}
 	else
 	{					// Error: shorten key

--- 1.50/mysql-test/r/range.result	2006-10-19 16:15:40 +05:00
+++ 1.51/mysql-test/r/range.result	2006-10-19 16:15:40 +05:00
@@ -665,6 +665,16 @@ OR ((pk4 =1) AND (((pk1 IN ( 7, 2, 1 )))
 pk1	pk2	pk3	pk4	filler
 2621	2635	1000015	0	filler
 drop table t1, t2;
+create table t1(a char(2), key(a(1)));
+insert into t1 values ('x'), ('xx');
+explain select a from t1 where a > 'x';
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	range	a	a	2	NULL	2	Using where
+select a from t1 where a > 'x';
+a
+xx
+drop table t1;
+End of 4.1 tests
 CREATE TABLE t1 (
 id int(11) NOT NULL auto_increment,
 status varchar(20),

--- 1.42/mysql-test/t/range.test	2006-10-19 16:15:40 +05:00
+++ 1.43/mysql-test/t/range.test	2006-10-19 16:15:40 +05:00
@@ -515,7 +515,17 @@ OR ((pk4 =1) AND (((pk1 IN ( 7, 2, 1 )))
 ) AND (pk3 >=1000000);
 drop table t1, t2;
 
-# End of 4.1 tests
+#
+# Bug #20732: Partial index and long sjis search with '>' fails sometimes
+#
+
+create table t1(a char(2), key(a(1)));
+insert into t1 values ('x'), ('xx');
+explain select a from t1 where a > 'x';
+select a from t1 where a > 'x';
+drop table t1;
+
+--echo End of 4.1 tests
 
 #
 # Test for optimization request #10561: to use keys for
Thread
bk commit into 5.0 tree (ramil:1.2308)ramil19 Oct