Commit 37c98812 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/users/lthalmann/bkroot/mysql-4.1

into  mysql.com:/users/lthalmann/bk/mysql-5.0


myisam/mi_rkey.c:
  Auto merged
mysql-test/r/subselect2.result:
  Auto merged
mysql-test/t/select.test:
  Auto merged
ndb/src/mgmsrv/InitConfigFileParser.cpp:
  Auto merged
scripts/make_binary_distribution.sh:
  Auto merged
configure.in:
  After merge fixes
myisam/mi_search.c:
  After merge fixes
mysql-test/r/select.result:
  After merge fixes
sql/item.cc:
  After merge fixes
sql/sql_parse.cc:
  After merge fixes
sql/sql_update.cc:
  After merge fixes
parents 93177142 5d2bc925
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -31,8 +31,8 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
  HA_KEYSEG *last_used_keyseg;
  uint pack_key_length, use_key_length, nextflag;
  DBUG_ENTER("mi_rkey");
  DBUG_PRINT("enter", ("base: %p  buf: %p  inx: %d  search_flag: %d",
                       info, buf, inx, search_flag));
  DBUG_PRINT("enter", ("base: %lx  buf: %lx  inx: %d  search_flag: %d",
                       (long) info, (long) buf, inx, search_flag));

  if ((inx = _mi_check_index(info,inx)) < 0)
    DBUG_RETURN(my_errno);
+25 −20
Original line number Diff line number Diff line
@@ -259,15 +259,16 @@ int _mi_seq_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
    {
      mi_print_error(info->s, HA_ERR_CRASHED);
      my_errno=HA_ERR_CRASHED;
      DBUG_PRINT("error",("Found wrong key:  length: %u  page: %p  end: %p",
                          length, page, end));
      DBUG_PRINT("error",("Found wrong key:  length: %u  page: %lx  end: %lx",
                          length, (long) page, (long) end));
      DBUG_RETURN(MI_FOUND_WRONG_KEY);
    }
    if ((flag=ha_key_cmp(keyinfo->seg,t_buff,key,key_len,comp_flag,
                          &not_used)) >= 0)
      break;
#ifdef EXTRA_DEBUG
    DBUG_PRINT("loop",("page: %p  key: '%s'  flag: %d", page, t_buff, flag));
    DBUG_PRINT("loop",("page: %lx  key: '%s'  flag: %d", (long) page, t_buff,
                       flag));
#endif
    memcpy(buff,t_buff,length);
    *ret_pos=page;
@@ -275,7 +276,7 @@ int _mi_seq_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
  if (flag == 0)
    memcpy(buff,t_buff,length);                 /* Result is first key */
  *last_key= page == end;
  DBUG_PRINT("exit",("flag: %d  ret_pos: %p", flag, *ret_pos));
  DBUG_PRINT("exit",("flag: %d  ret_pos: %lx", flag, (long) *ret_pos));
  DBUG_RETURN(flag);
} /* _mi_seq_search */

@@ -415,8 +416,8 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
    {
      mi_print_error(info->s, HA_ERR_CRASHED);
      my_errno=HA_ERR_CRASHED;
      DBUG_PRINT("error",("Found wrong key:  length: %u  page: %p  end: %p",
                          length, page, end));
      DBUG_PRINT("error",("Found wrong key:  length: %u  page: %lx  end: %lx",
                          length, (long) page, (long) end));
      DBUG_RETURN(MI_FOUND_WRONG_KEY);
    }

@@ -550,7 +551,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,

  *last_key= page == end;

  DBUG_PRINT("exit",("flag: %d  ret_pos: %p", flag, *ret_pos));
  DBUG_PRINT("exit",("flag: %d  ret_pos: %lx", flag, (long) *ret_pos));
  DBUG_RETURN(flag);
} /* _mi_prefix_search */

@@ -812,8 +813,8 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
	  if (length > keyseg->length)
	  {
	    DBUG_PRINT("error",
                       ("Found too long null packed key: %u of %u at %p",
                        length, keyseg->length, *page_pos));
                       ("Found too long null packed key: %u of %u at %lx",
                        length, keyseg->length, (long) *page_pos));
	    DBUG_DUMP("key",(char*) *page_pos,16);
            mi_print_error(keyinfo->share, HA_ERR_CRASHED);
	    my_errno=HA_ERR_CRASHED;
@@ -869,8 +870,8 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
      }
      if (length > (uint) keyseg->length)
      {
        DBUG_PRINT("error",("Found too long packed key: %u of %u at %p",
                            length, keyseg->length, *page_pos));
        DBUG_PRINT("error",("Found too long packed key: %u of %u at %lx",
                            length, keyseg->length, (long) *page_pos));
        DBUG_DUMP("key",(char*) *page_pos,16);
        mi_print_error(keyinfo->share, HA_ERR_CRASHED);
        my_errno=HA_ERR_CRASHED;
@@ -935,8 +936,8 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
  {
    if (length > keyinfo->maxlength)
    {
      DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %p",
                          length, keyinfo->maxlength, *page_pos));
      DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %lx",
                          length, keyinfo->maxlength, (long) *page_pos));
      DBUG_DUMP("key",(char*) *page_pos,16);
      mi_print_error(keyinfo->share, HA_ERR_CRASHED);
      my_errno=HA_ERR_CRASHED;
@@ -983,8 +984,8 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
      length-=tmp;
      from=page; from_end=page_end;
    }
    DBUG_PRINT("info",("key: %p  from: %p  length: %u",
		       key, from, length));
    DBUG_PRINT("info",("key: %lx  from: %lx  length: %u",
		       (long) key, (long) from, length));
    memcpy_overlap((byte*) key, (byte*) from, (size_t) length);
    key+=length;
    from+=length;
@@ -1041,7 +1042,8 @@ uchar *_mi_get_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page,
      }
    }
  }
  DBUG_PRINT("exit",("page: %p  length: %u", page, *return_key_length));
  DBUG_PRINT("exit",("page: %lx  length: %u", (long) page,
                     *return_key_length));
  DBUG_RETURN(page);
} /* _mi_get_key */

@@ -1093,7 +1095,7 @@ uchar *_mi_get_last_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page,
  uint nod_flag;
  uchar *lastpos;
  DBUG_ENTER("_mi_get_last_key");
  DBUG_PRINT("enter",("page: %p  endpos:  %p", page, endpos));
  DBUG_PRINT("enter",("page: %lx  endpos: %lx", (long) page, (long) endpos));

  nod_flag=mi_test_if_nod(page);
  if (! (keyinfo->flag & (HA_VAR_LENGTH_KEY | HA_BINARY_PACK_KEY)))
@@ -1113,14 +1115,16 @@ uchar *_mi_get_last_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page,
      *return_key_length=(*keyinfo->get_key)(keyinfo,nod_flag,&page,lastkey);
      if (*return_key_length == 0)
      {
        DBUG_PRINT("error",("Couldn't find last key:  page: %p", page));
        DBUG_PRINT("error",("Couldn't find last key:  page: %lx",
                            (long) page));
        mi_print_error(info->s, HA_ERR_CRASHED);
        my_errno=HA_ERR_CRASHED;
        DBUG_RETURN(0);
      }
    }
  }
  DBUG_PRINT("exit",("lastpos: %p  length: %u", lastpos, *return_key_length));
  DBUG_PRINT("exit",("lastpos: %lx  length: %u", (long) lastpos,
                     *return_key_length));
  DBUG_RETURN(lastpos);
} /* _mi_get_last_key */

@@ -1659,7 +1663,8 @@ _mi_calc_var_pack_key_length(MI_KEYDEF *keyinfo,uint nod_flag,uchar *next_key,
        ref_length=0;
        next_length_pack=0;
     }
      DBUG_PRINT("test",("length: %d  next_key: %p", length, next_key));
      DBUG_PRINT("test",("length: %d  next_key: %lx", length,
                         (long) next_key));

      {
        uint tmp_length;
+72 −0
Original line number Diff line number Diff line
@@ -122,3 +122,75 @@ SELECT * FROM t1;
i	j	x	y	z
1	2	23	24	71
DROP TABLE t1, t2, t3;
DROP TABLE IF EXISTS t1;
Warnings:
Note	1051	Unknown table 't1'
DROP TABLE IF EXISTS t2;
Warnings:
Note	1051	Unknown table 't2'
CREATE TABLE t1 (
idp int(11) NOT NULL default '0',
idpro int(11) default NULL,
price decimal(19,4) default NULL,
PRIMARY KEY (idp)
);
CREATE TABLE t2 (
idpro int(11) NOT NULL default '0',
price decimal(19,4) default NULL,
nbprice int(11) default NULL,
PRIMARY KEY (idpro)
);
INSERT INTO t1 VALUES 
(1,1,'3.0000'),
(2,2,'1.0000'),
(3,1,'1.0000'),
(4,1,'4.0000'),
(5,3,'2.0000'),
(6,2,'4.0000');
INSERT INTO t2 VALUES 
(1,'0.0000',0),
(2,'0.0000',0),
(3,'0.0000',0);
update 
t2
join 
( select    idpro, min(price) as min_price, count(*) as nbr_price
from      t1 
where     idpro>0 and price>0 
group by  idpro
) as table_price
on   t2.idpro = table_price.idpro 
set  t2.price = table_price.min_price, 
t2.nbprice = table_price.nbr_price;
select "-- MASTER AFTER JOIN --" as "";

-- MASTER AFTER JOIN --
select * from t1;
idp	idpro	price
1	1	3.0000
2	2	1.0000
3	1	1.0000
4	1	4.0000
5	3	2.0000
6	2	4.0000
select * from t2;
idpro	price	nbprice
1	1.0000	3
2	1.0000	2
3	2.0000	1
select "-- SLAVE AFTER JOIN --" as "";

-- SLAVE AFTER JOIN --
select * from t1;
idp	idpro	price
1	1	3.0000
2	2	1.0000
3	1	1.0000
4	1	4.0000
5	3	2.0000
6	2	4.0000
select * from t2;
idpro	price	nbprice
1	1.0000	3
2	1.0000	2
3	2.0000	1
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ DOCID VARCHAR(32)BINARY NOT NULL
, PRIMARY KEY ( DOCID )
) ENGINE=InnoDB
;
INSERT INTO t1 (DOCID) VALUES ("1"), ("2");
CREATE TABLE t2
(
DOCID VARCHAR(32)BINARY NOT NULL
+59 −0
Original line number Diff line number Diff line
@@ -158,4 +158,63 @@ SELECT * FROM t1;
connection master;
DROP TABLE t1, t2, t3;

##############################################################################
#
# BUG#12618
#
# TEST: Replication of a statement containing a join in a multi-update.

DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;

CREATE TABLE t1 (
  idp int(11) NOT NULL default '0',
  idpro int(11) default NULL,
  price decimal(19,4) default NULL,
  PRIMARY KEY (idp)
);

CREATE TABLE t2 (
  idpro int(11) NOT NULL default '0',
  price decimal(19,4) default NULL,
  nbprice int(11) default NULL,
  PRIMARY KEY (idpro)
);

INSERT INTO t1 VALUES 
  (1,1,'3.0000'),
  (2,2,'1.0000'),
  (3,1,'1.0000'),
  (4,1,'4.0000'),
  (5,3,'2.0000'),
  (6,2,'4.0000');

INSERT INTO t2 VALUES 
  (1,'0.0000',0),
  (2,'0.0000',0),
  (3,'0.0000',0);

# This update sets t2 to the minimal prices for each product
update 
  t2
    join 
  ( select    idpro, min(price) as min_price, count(*) as nbr_price
    from      t1 
    where     idpro>0 and price>0 
    group by  idpro
  ) as table_price
on   t2.idpro = table_price.idpro 
set  t2.price = table_price.min_price, 
     t2.nbprice = table_price.nbr_price;

select "-- MASTER AFTER JOIN --" as "";
select * from t1;
select * from t2;

sync_slave_with_master;

select "-- SLAVE AFTER JOIN --" as "";
select * from t1;
select * from t2;

# End of 4.1 tests
Loading