List:Commits« Previous MessageNext Message »
From:Sergey Vojtovich Date:April 18 2007 11:22am
Subject:bk commit into 5.0 tree (svoj:1.2441)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of svoj. When svoj 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, 2007-04-18 16:22:23+05:00, svoj@stripped +5 -0
  Merge mysql.com:/home/svoj/devel/mysql/BUG24342/mysql-4.1-engines
  into  mysql.com:/home/svoj/devel/mysql/BUG24342/mysql-5.0-engines
  MERGE: 1.1616.3010.2

  myisam/mi_rkey.c@stripped, 2007-04-18 16:20:04+05:00, svoj@stripped +0 -0
    Auto merged
    MERGE: 1.16.1.8

  myisam/myisamdef.h@stripped, 2007-04-18 16:20:04+05:00, svoj@stripped +0 -0
    Auto merged
    MERGE: 1.59.1.24

  myisammrg/myrg_rkey.c@stripped, 2007-04-18 16:20:04+05:00, svoj@stripped +0 -0
    Auto merged
    MERGE: 1.17.1.1

  mysql-test/r/merge.result@stripped, 2007-04-18 16:22:21+05:00, svoj@stripped +0 -0
    SCCS merged
    MERGE: 1.32.1.15

  mysql-test/t/merge.test@stripped, 2007-04-18 16:20:04+05:00, svoj@stripped +0 -0
    Auto merged
    MERGE: 1.28.1.16

# 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:	svoj
# Host:	june.mysql.com
# Root:	/home/svoj/devel/mysql/BUG24342/mysql-5.0-engines/RESYNC

--- 1.28/myisam/mi_rkey.c	2006-12-31 00:02:05 +04:00
+++ 1.29/myisam/mi_rkey.c	2007-04-18 16:20:04 +05:00
@@ -49,7 +49,7 @@ int mi_rkey(MI_INFO *info, byte *buf, in
     key_buff=info->lastkey+info->s->base.max_key_length;
     pack_key_length= key_len;
     bmove(key_buff,key,key_len);
-    last_used_keyseg= 0;
+    last_used_keyseg= info->s->keyinfo[inx].seg + info->last_used_keyseg;
   }
   else
   {
@@ -61,6 +61,7 @@ int mi_rkey(MI_INFO *info, byte *buf, in
 				 key_len, &last_used_keyseg);
     /* Save packed_key_length for use by the MERGE engine. */
     info->pack_key_length= pack_key_length;
+    info->last_used_keyseg= last_used_keyseg - info->s->keyinfo[inx].seg;
     DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE, keyinfo->seg,
 				     key_buff, pack_key_length););
   }

--- 1.89/myisam/myisamdef.h	2007-01-03 11:52:45 +04:00
+++ 1.90/myisam/myisamdef.h	2007-04-18 16:20:04 +05:00
@@ -263,6 +263,7 @@ struct st_myisam_info {
   enum ha_rkey_function last_key_func;  /* CONTAIN, OVERLAP, etc */
   uint  save_lastkey_length;
   uint  pack_key_length;                /* For MYISAMMRG */
+  uint16 last_used_keyseg;              /* For MyISAMMRG */
   int	errkey;				/* Got last error on this key */
   int   lock_type;			/* How database was locked */
   int   tmp_lock_type;			/* When locked by readinfo */

--- 1.59/mysql-test/r/merge.result	2007-03-20 17:53:54 +04:00
+++ 1.60/mysql-test/r/merge.result	2007-04-18 16:22:21 +05:00
@@ -816,6 +816,17 @@ ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
 SELECT * FROM m1;
 c1	c2	c3	c4	c5	c6	c7	c8	c9
 DROP TABLE t1, m1;
+CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci,
+b INT, INDEX(a,b));
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2);
+INSERT INTO t1 VALUES ('ss',1);
+INSERT INTO t2 VALUES ('ss',2),(0xDF,2);
+SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2;
+COUNT(*)
+2
+DROP TABLE t1,t2,t3;
 create table t1 (b bit(1));
 create table t2 (b bit(1));
 create table tm (b bit(1)) engine = merge union = (t1,t2);

--- 1.49/mysql-test/t/merge.test	2007-03-20 17:53:54 +04:00
+++ 1.50/mysql-test/t/merge.test	2007-04-18 16:20:04 +05:00
@@ -447,6 +447,19 @@ ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
 SELECT * FROM m1;
 DROP TABLE t1, m1;
 
+#
+# BUG#24342 - Incorrect results with query over MERGE table
+#
+CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci,
+                 b INT, INDEX(a,b));
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2);
+INSERT INTO t1 VALUES ('ss',1);
+INSERT INTO t2 VALUES ('ss',2),(0xDF,2);
+SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2;
+DROP TABLE t1,t2,t3;
+
 # End of 4.1 tests
 
 #

--- 1.20/myisammrg/myrg_rkey.c	2006-12-31 00:02:05 +04:00
+++ 1.21/myisammrg/myrg_rkey.c	2007-04-18 16:20:04 +05:00
@@ -40,12 +40,14 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,
 {
   byte *key_buff;
   uint pack_key_length;
+  uint16 last_used_keyseg;
   MYRG_TABLE *table;
   MI_INFO *mi;
   int err;
   DBUG_ENTER("myrg_rkey");
   LINT_INIT(key_buff);
   LINT_INIT(pack_key_length);
+  LINT_INIT(last_used_keyseg);
 
   if (_myrg_init_queue(info,inx,search_flag))
     DBUG_RETURN(my_errno);
@@ -60,10 +62,12 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,
       /* Get the saved packed key and packed key length. */
       key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length;
       pack_key_length=mi->pack_key_length;
+      last_used_keyseg= mi->last_used_keyseg;
     }
     else
     {
       mi->once_flags|= USE_PACKED_KEYS;
+      mi->last_used_keyseg= last_used_keyseg;
       err=mi_rkey(mi,0,inx,key_buff,pack_key_length,search_flag);
     }
     info->last_used_table=table+1;
Thread
bk commit into 5.0 tree (svoj:1.2441)Sergey Vojtovich18 Apr