Commit 6c977025 authored by istruewing@stella.local's avatar istruewing@stella.local
Browse files

Merge stella.local:/home2/mydev/mysql-5.0-ateam

into  stella.local:/home2/mydev/mysql-5.0-axmrg
parents b6c8f8a5 7fa875e4
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -2045,6 +2045,30 @@ select 1 from t1 order by a;
drop table t1;
drop table t1;
drop view v1;
CREATE TABLE t1 (a INT, b INT, KEY(a,b));
INSERT INTO t1 VALUES(NULL,1),(1,NULL),(NULL,NULL),(1,1),(2,2);
CREATE TABLE t1 (a INT, b INT, KEY(a,b)) ENGINE=federated
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
SELECT * FROM t1 WHERE a IS NULL;
a	b
NULL	NULL
NULL	1
SELECT * FROM t1 WHERE a IS NOT NULL;
a	b
1	NULL
1	1
2	2
SELECT * FROM t1 WHERE a=1 AND b=1;
a	b
1	1
SELECT * FROM t1 WHERE a IS NULL AND b=1;
a	b
NULL	1
SELECT * FROM t1 WHERE a IS NOT NULL AND b=1;
a	b
1	1
DROP TABLE t1;
DROP TABLE t1;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
+21 −0
Original line number Diff line number Diff line
@@ -1716,5 +1716,26 @@ connection slave;
drop table t1;
drop view v1;

#
# BUG#33946 - Join on Federated tables with Unique index gives error 1430
#             from storage engine
#
connection slave;
CREATE TABLE t1 (a INT, b INT, KEY(a,b));
INSERT INTO t1 VALUES(NULL,1),(1,NULL),(NULL,NULL),(1,1),(2,2);

connection master;
--replace_result $SLAVE_MYPORT SLAVE_PORT
eval CREATE TABLE t1 (a INT, b INT, KEY(a,b)) ENGINE=federated
CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t1';
SELECT * FROM t1 WHERE a IS NULL;
SELECT * FROM t1 WHERE a IS NOT NULL;
SELECT * FROM t1 WHERE a=1 AND b=1;
SELECT * FROM t1 WHERE a IS NULL AND b=1;
SELECT * FROM t1 WHERE a IS NOT NULL AND b=1;
DROP TABLE t1;

connection slave;
DROP TABLE t1;

source include/federated_cleanup.inc;
+19 −3
Original line number Diff line number Diff line
@@ -1094,10 +1094,20 @@ bool ha_federated::create_where_from_key(String *to,
      {
        if (*ptr++)
        {
          /*
            We got "IS [NOT] NULL" condition against nullable column. We
            distinguish between "IS NOT NULL" and "IS NULL" by flag. For
            "IS NULL", flag is set to HA_READ_KEY_EXACT.
          */
          if (emit_key_part_name(&tmp, key_part) ||
              tmp.append(FEDERATED_ISNULL))
              tmp.append(ranges[i]->flag == HA_READ_KEY_EXACT ?
                         FEDERATED_ISNULL : " IS NOT NULL "))
            DBUG_RETURN(1);
          continue;
          /*
            We need to adjust pointer and length to be prepared for next
            key part. As well as check if this was last key part.
          */
          goto prepare_for_next_key_part;
        }
      }

@@ -1199,12 +1209,18 @@ bool ha_federated::create_where_from_key(String *to,
      if (tmp.append(FEDERATED_CLOSEPAREN))
        DBUG_RETURN(1);

prepare_for_next_key_part:
      if (store_length >= length)
        break;
      DBUG_PRINT("info", ("remainder %d", remainder));
      DBUG_ASSERT(remainder > 1);
      length-= store_length;
      ptr+= store_length;
      /*
        For nullable columns, null-byte is already skipped before, that is
        ptr was incremented by 1. Since store_length still counts null-byte,
        we need to subtract 1 from store_length.
      */
      ptr+= store_length - test(key_part->null_bit);
      if (tmp.append(FEDERATED_AND))
        DBUG_RETURN(1);