Adding multi_range_read support to partitions
Other things: - Cleanup of allocated bitmaps done in open(), which simplifies init_partition_bitmaps() - Add needed defines in ha_spider.cc to enable new spider code - Fixed some DBUG_PRINT() to be consistent with normal code - Removed end space - The changes in test cases partition_innodb, partition_range, partition_pruning etc are becasue partitions can now more exactly calculate the number of rows in a range. Contains spider patches: 014,015,023,033,035,037,040,042,044,045,049,050,051,053,059
This commit is contained in:
parent
d5268a610a
commit
8eeb689e9f
@ -204,6 +204,11 @@ enum ha_extra_function {
|
||||
HA_EXTRA_PREPARE_FOR_FORCED_CLOSE,
|
||||
/* Inform handler that we will do an alter table */
|
||||
HA_EXTRA_PREPARE_FOR_ALTER_TABLE,
|
||||
/*
|
||||
Used in ha_partition::handle_ordered_index_scan() to inform engine
|
||||
that we are starting an ordered index scan. Needed by Spider
|
||||
*/
|
||||
HA_EXTRA_STARTING_ORDERED_INDEX_SCAN
|
||||
};
|
||||
|
||||
/* Compatible option, to be deleted in 6.0 */
|
||||
|
@ -45,6 +45,8 @@ extern "C" {
|
||||
/* compatibility functions */
|
||||
#define bitmap_init(A,B,C,D) my_bitmap_init(A,B,C,D)
|
||||
#define bitmap_free(A) my_bitmap_free(A)
|
||||
/* Reset memory. Faster then doing a full bzero */
|
||||
#define my_bitmap_clear(A) ((A)->bitmap= 0)
|
||||
|
||||
extern void create_last_word_mask(MY_BITMAP *map);
|
||||
extern my_bool my_bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,
|
||||
|
@ -29,7 +29,7 @@ Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
EXPLAIN SELECT b FROM t1 WHERE b between 'L' and 'N' AND a > -100;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range PRIMARY,b b 67 NULL 18 Using where; Using index
|
||||
1 SIMPLE t1 range PRIMARY,b b 67 NULL 34 Using where; Using index
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#13007154: Crash in keys_to_use_for_scanning with ORDER BY
|
||||
@ -663,7 +663,7 @@ EXPLAIN SELECT * FROM t1 WHERE col1 = 1 AND col2 = 2
|
||||
AND col3 BETWEEN '2013-03-08 00:00:00' AND '2013-03-12 12:00:00'
|
||||
GROUP BY 1, 2, 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge PRIMARY,col1,col2 col1,col2 8,8 NULL # Using intersect(col1,col2); Using where; Using index; Using filesort
|
||||
1 SIMPLE t1 range PRIMARY,col1,col2 PRIMARY 5 NULL # Using where; Using filesort
|
||||
SELECT * FROM t1 USE INDEX () WHERE col1 = 1 AND col2 = 2
|
||||
AND col3 BETWEEN '2013-03-08 00:00:00' AND '2013-03-12 12:00:00'
|
||||
GROUP BY 1, 2, 3;
|
||||
|
@ -18,7 +18,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
# # # # # # # # # 3 #
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 7;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
# # # # # # # # # 10 #
|
||||
# # # # # # # # # 9 #
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
# # # # # # # # # 3 #
|
||||
@ -105,7 +105,7 @@ a
|
||||
6
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 7;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,p5,max index PRIMARY PRIMARY 4 NULL 10 Using where; Using index
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,p5,max range PRIMARY PRIMARY 4 NULL 9 Using where; Using index
|
||||
SELECT * FROM t1 WHERE a <= 1;
|
||||
a
|
||||
-1
|
||||
@ -168,7 +168,7 @@ a
|
||||
6
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 6;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,p5,max index PRIMARY PRIMARY 4 NULL 10 Using where; Using index
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,p5,max range PRIMARY PRIMARY 4 NULL 9 Using where; Using index
|
||||
SELECT * FROM t1 WHERE a <= 7;
|
||||
a
|
||||
-1
|
||||
@ -182,7 +182,7 @@ a
|
||||
7
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 7;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,p5,max index PRIMARY PRIMARY 4 NULL 10 Using where; Using index
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,p5,max range PRIMARY PRIMARY 4 NULL 9 Using where; Using index
|
||||
SELECT * FROM t1 WHERE a = 1;
|
||||
a
|
||||
1
|
||||
@ -424,7 +424,7 @@ a
|
||||
5
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 6;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,max index PRIMARY PRIMARY 4 NULL 9 Using where; Using index
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,max range PRIMARY PRIMARY 4 NULL 8 Using where; Using index
|
||||
SELECT * FROM t1 WHERE a <= 1;
|
||||
a
|
||||
-1
|
||||
@ -474,7 +474,7 @@ a
|
||||
5
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,max index PRIMARY PRIMARY 4 NULL 9 Using where; Using index
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,max range PRIMARY PRIMARY 4 NULL 8 Using where; Using index
|
||||
SELECT * FROM t1 WHERE a <= 6;
|
||||
a
|
||||
-1
|
||||
@ -487,7 +487,7 @@ a
|
||||
6
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 6;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,max index PRIMARY PRIMARY 4 NULL 9 Using where; Using index
|
||||
1 SIMPLE t1 p0,p1,p2,p3,p4,max range PRIMARY PRIMARY 4 NULL 8 Using where; Using index
|
||||
SELECT * FROM t1 WHERE a = 1;
|
||||
a
|
||||
1
|
||||
@ -744,13 +744,13 @@ a
|
||||
1001-01-01
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 index a a 4 NULL 6 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 index a a 4 NULL 6 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p2001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
@ -759,26 +759,26 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1001-01-01 system a NULL NULL NULL 1
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 index a a 4 NULL 6 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 index a a 4 NULL 6 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL ref a a 4 const 1 Using index
|
||||
# Disabling warnings for the invalid date
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01,p2001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01,p2001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01,p2001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01,p2001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p2001-01-01 index a a 4 NULL 4 Using where; Using index
|
||||
@ -790,16 +790,16 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL ref a a 4 const 1 Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01,p2001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01,p2001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 index a a 4 NULL 6 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 index a a 4 NULL 5 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p1001-01-01,p2001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 index a a 4 NULL 6 Using where; Using index
|
||||
1 SIMPLE t1 pNULL,p0001-01-01,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
# test without index
|
||||
ALTER TABLE t1 DROP KEY a;
|
||||
SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||
@ -1076,7 +1076,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
@ -1104,10 +1104,10 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
# Disabling warnings for the invalid date
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2001-01-01,pNULL index a a 4 NULL 4 Using where; Using index
|
||||
@ -1119,10 +1119,10 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL ref a a 4 const 1 Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p1001-01-01 index a a 4 NULL 4 Using where; Using index
|
||||
@ -1405,7 +1405,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 range a a 4 NULL 3 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
@ -1433,10 +1433,10 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
# Disabling warnings for the invalid date
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2001-01-01,pNULL index a a 4 NULL 4 Using where; Using index
|
||||
@ -1448,10 +1448,10 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL ref a a 4 const 1 Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pNULL,p1001-01-01 index a a 4 NULL 4 Using where; Using index
|
||||
@ -2867,18 +2867,18 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2 ALL NULL NULL NULL NULL 510 Using where
|
||||
explain partitions select * from t2 where b = 4;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ref b b 5 const 96
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ref b b 5 const 76
|
||||
explain extended select * from t2 where b = 6;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ref b b 5 const 96 100.00
|
||||
1 SIMPLE t2 ref b b 5 const 76 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` = 6
|
||||
explain partitions select * from t2 where b = 6;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ref b b 5 const 96
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ref b b 5 const 76
|
||||
explain extended select * from t2 where b in (1,3,5);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 51.65 Using where
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 40.66 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` in (1,3,5)
|
||||
explain partitions select * from t2 where b in (1,3,5);
|
||||
@ -2886,7 +2886,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL b NULL NULL NULL 910 Using where
|
||||
explain extended select * from t2 where b in (2,4,6);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 31.65 Using where
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 25.05 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` in (2,4,6)
|
||||
explain partitions select * from t2 where b in (2,4,6);
|
||||
@ -2894,7 +2894,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL b NULL NULL NULL 910 Using where
|
||||
explain extended select * from t2 where b in (7,8,9);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 19.12 Using where
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 36.70 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` in (7,8,9)
|
||||
explain partitions select * from t2 where b in (7,8,9);
|
||||
@ -2902,7 +2902,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL b NULL NULL NULL 910 Using where
|
||||
explain extended select * from t2 where b > 5;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 29.23 Using where
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 44.84 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` > 5
|
||||
explain partitions select * from t2 where b > 5;
|
||||
@ -2910,7 +2910,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL b NULL NULL NULL 910 Using where
|
||||
explain extended select * from t2 where b > 5 and b < 8;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 28.13 Using where
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 22.09 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` > 5 and `test`.`t2`.`b` < 8
|
||||
explain partitions select * from t2 where b > 5 and b < 8;
|
||||
@ -2918,15 +2918,15 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL b NULL NULL NULL 910 Using where
|
||||
explain extended select * from t2 where b > 5 and b < 7;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 range b b 5 NULL 96 100.00 Using where
|
||||
1 SIMPLE t2 range b b 5 NULL 76 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` > 5 and `test`.`t2`.`b` < 7
|
||||
explain partitions select * from t2 where b > 5 and b < 7;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 range b b 5 NULL 96 Using where
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 range b b 5 NULL 76 Using where
|
||||
explain extended select * from t2 where b > 0 and b < 5;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 53.19 Using where
|
||||
1 SIMPLE t2 ALL b NULL NULL NULL 910 41.65 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` > 0 and `test`.`t2`.`b` < 5
|
||||
explain partitions select * from t2 where b > 0 and b < 5;
|
||||
@ -2960,10 +2960,10 @@ flush status;
|
||||
delete from t2 where b = 7;
|
||||
show status like 'Handler_read_rnd_next';
|
||||
Variable_name Value
|
||||
Handler_read_rnd_next 915
|
||||
Handler_read_rnd_next 0
|
||||
show status like 'Handler_read_key';
|
||||
Variable_name Value
|
||||
Handler_read_key 0
|
||||
Handler_read_key 5
|
||||
flush status;
|
||||
delete from t2 where b > 5;
|
||||
show status like 'Handler_read_rnd_next';
|
||||
|
@ -961,7 +961,7 @@ INSERT INTO t2 SELECT * FROM t1;
|
||||
# plans should be identical
|
||||
EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10,100) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 5 NULL 1 Using where; Using index for group-by
|
||||
1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
|
||||
EXPLAIN SELECT a, MAX(b) FROM t2 WHERE a IN (10,100) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range a a 5 NULL 2 Using where; Using index for group-by
|
||||
@ -972,7 +972,7 @@ a MAX(b)
|
||||
# Should be no more than 4 reads.
|
||||
SHOW status LIKE 'handler_read_key';
|
||||
Variable_name Value
|
||||
Handler_read_key 4
|
||||
Handler_read_key 2
|
||||
FLUSH status;
|
||||
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
||||
a MAX(b)
|
||||
|
@ -22,7 +22,7 @@ INSERT INTO t2 SELECT * FROM t1;
|
||||
# plans should be identical
|
||||
EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10,100) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 5 NULL 1 Using where; Using index for group-by
|
||||
1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
|
||||
EXPLAIN SELECT a, MAX(b) FROM t2 WHERE a IN (10,100) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range a a 5 NULL 2 Using where; Using index for group-by
|
||||
@ -33,7 +33,7 @@ a MAX(b)
|
||||
# Should be no more than 4 reads.
|
||||
SHOW status LIKE 'handler_read_key';
|
||||
Variable_name Value
|
||||
Handler_read_key 4
|
||||
Handler_read_key 2
|
||||
FLUSH status;
|
||||
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
||||
a MAX(b)
|
||||
|
@ -2812,6 +2812,7 @@ INSERT INTO t1 VALUES (123,123,'2001-04-14','address123','city123',40,51),
|
||||
(257,257,'2010-03-06','address257','city257',40,47);
|
||||
--enable_query_log
|
||||
|
||||
--sorted_result
|
||||
select * from t1 where hours_worked_per_week = 40 and weeks_worked_last_year = 52 and dob < '1949-11-21';
|
||||
select * from t1 IGNORE INDEX(dob, weeks_worked_last_year, hours_worked_per_week) where hours_worked_per_week = 40 and weeks_worked_last_year = 52 and dob < '1949-11-21';
|
||||
|
||||
|
@ -166,6 +166,9 @@ static inline uint get_first_set(my_bitmap_map value, uint word_pos)
|
||||
return MY_BIT_NONE; /* Impossible */
|
||||
}
|
||||
|
||||
/*
|
||||
Initialize a bitmap object. All bits will be set to zero
|
||||
*/
|
||||
|
||||
my_bool my_bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,
|
||||
my_bool thread_safe)
|
||||
|
1357
sql/ha_partition.cc
1357
sql/ha_partition.cc
File diff suppressed because it is too large
Load Diff
@ -105,6 +105,32 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct st_partition_key_multi_range
|
||||
{
|
||||
uint id;
|
||||
uchar *key[2];
|
||||
uint length[2];
|
||||
KEY_MULTI_RANGE key_multi_range;
|
||||
range_id_t ptr;
|
||||
st_partition_key_multi_range *next;
|
||||
} PARTITION_KEY_MULTI_RANGE;
|
||||
|
||||
|
||||
typedef struct st_partition_part_key_multi_range
|
||||
{
|
||||
PARTITION_KEY_MULTI_RANGE *partition_key_multi_range;
|
||||
st_partition_part_key_multi_range *next;
|
||||
} PARTITION_PART_KEY_MULTI_RANGE;
|
||||
|
||||
|
||||
class ha_partition;
|
||||
typedef struct st_partition_part_key_multi_range_hld
|
||||
{
|
||||
ha_partition *partition;
|
||||
uint32 part_id;
|
||||
PARTITION_PART_KEY_MULTI_RANGE *partition_part_key_multi_range;
|
||||
} PARTITION_PART_KEY_MULTI_RANGE_HLD;
|
||||
|
||||
|
||||
extern "C" int cmp_key_rowid_part_id(void *ptr, uchar *ref1, uchar *ref2);
|
||||
|
||||
@ -115,16 +141,17 @@ private:
|
||||
{
|
||||
partition_index_read= 0,
|
||||
partition_index_first= 1,
|
||||
partition_index_first_unordered= 2,
|
||||
partition_index_last= 3,
|
||||
partition_index_read_last= 4,
|
||||
partition_read_range = 5,
|
||||
partition_no_index_scan= 6
|
||||
partition_no_index_scan= 6,
|
||||
partition_read_multi_range = 7,
|
||||
partition_ft_read= 8
|
||||
};
|
||||
/* Data for the partition handler */
|
||||
int m_mode; // Open mode
|
||||
uint m_open_test_lock; // Open test_if_locked
|
||||
uchar *m_file_buffer; // Content of the .par file
|
||||
uchar *m_file_buffer; // Content of the .par file
|
||||
char *m_name_buffer_ptr; // Pointer to first partition name
|
||||
MEM_ROOT m_mem_root;
|
||||
plugin_ref *m_engine_array; // Array of types of the handlers
|
||||
@ -153,7 +180,7 @@ private:
|
||||
Length of an element in m_ordered_rec_buffer. The elements are composed of
|
||||
|
||||
[part_no] [table->record copy] [underlying_table_rowid]
|
||||
|
||||
|
||||
underlying_table_rowid is only stored when the table has no extended keys.
|
||||
*/
|
||||
uint m_priority_queue_rec_len;
|
||||
@ -201,14 +228,15 @@ private:
|
||||
bool m_create_handler; // Handler used to create table
|
||||
bool m_is_sub_partitioned; // Is subpartitioned
|
||||
bool m_ordered_scan_ongoing;
|
||||
bool m_rnd_init_and_first;
|
||||
|
||||
/*
|
||||
/*
|
||||
If set, this object was created with ha_partition::clone and doesn't
|
||||
"own" the m_part_info structure.
|
||||
*/
|
||||
ha_partition *m_is_clone_of;
|
||||
MEM_ROOT *m_clone_mem_root;
|
||||
|
||||
|
||||
/*
|
||||
We keep track if all underlying handlers are MyISAM since MyISAM has a
|
||||
great number of extra flags not needed by other handlers.
|
||||
@ -253,6 +281,8 @@ private:
|
||||
ha_rows m_bulk_inserted_rows;
|
||||
/** used for prediction of start_bulk_insert rows */
|
||||
enum_monotonicity_info m_part_func_monotonicity_info;
|
||||
bool m_pre_calling;
|
||||
bool m_pre_call_use_parallel;
|
||||
/** keep track of locked partitions */
|
||||
MY_BITMAP m_locked_partitions;
|
||||
/** Stores shared auto_increment etc. */
|
||||
@ -282,6 +312,9 @@ public:
|
||||
m_part_info= part_info;
|
||||
m_is_sub_partitioned= part_info->is_sub_partitioned();
|
||||
}
|
||||
|
||||
virtual void return_record_by_parent();
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------
|
||||
MODULE create/delete handler object
|
||||
@ -607,16 +640,8 @@ public:
|
||||
read_first_row is virtual method but is only implemented by
|
||||
handler.cc, no storage engine has implemented it so neither
|
||||
will the partition handler.
|
||||
|
||||
virtual int read_first_row(uchar *buf, uint primary_key);
|
||||
*/
|
||||
|
||||
/*
|
||||
We don't implement multi read range yet, will do later.
|
||||
virtual int read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
|
||||
KEY_MULTI_RANGE *ranges, uint range_count,
|
||||
bool sorted, HANDLER_BUFFER *buffer);
|
||||
virtual int read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
|
||||
virtual int read_first_row(uchar *buf, uint primary_key);
|
||||
*/
|
||||
|
||||
|
||||
@ -625,12 +650,59 @@ public:
|
||||
bool eq_range, bool sorted);
|
||||
virtual int read_range_next();
|
||||
|
||||
|
||||
HANDLER_BUFFER *m_mrr_buffer;
|
||||
uint *m_mrr_buffer_size;
|
||||
uchar *m_mrr_full_buffer;
|
||||
uint m_mrr_full_buffer_size;
|
||||
uint m_mrr_new_full_buffer_size;
|
||||
MY_BITMAP m_mrr_used_partitions;
|
||||
uint *m_stock_range_seq;
|
||||
uint m_current_range_seq;
|
||||
uint m_mrr_mode;
|
||||
uint m_mrr_n_ranges;
|
||||
range_id_t *m_range_info;
|
||||
bool m_multi_range_read_first;
|
||||
uint m_mrr_range_init_flags;
|
||||
uint m_mrr_range_length;
|
||||
PARTITION_KEY_MULTI_RANGE *m_mrr_range_first;
|
||||
PARTITION_KEY_MULTI_RANGE *m_mrr_range_current;
|
||||
uint *m_part_mrr_range_length;
|
||||
PARTITION_PART_KEY_MULTI_RANGE **m_part_mrr_range_first;
|
||||
PARTITION_PART_KEY_MULTI_RANGE **m_part_mrr_range_current;
|
||||
PARTITION_PART_KEY_MULTI_RANGE_HLD *m_partition_part_key_multi_range_hld;
|
||||
range_seq_t m_seq;
|
||||
RANGE_SEQ_IF *m_seq_if;
|
||||
RANGE_SEQ_IF m_part_seq_if;
|
||||
|
||||
virtual int multi_range_key_create_key(
|
||||
RANGE_SEQ_IF *seq,
|
||||
range_seq_t seq_it
|
||||
);
|
||||
virtual ha_rows multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
|
||||
void *seq_init_param,
|
||||
uint n_ranges, uint *bufsz,
|
||||
uint *mrr_mode,
|
||||
Cost_estimate *cost);
|
||||
virtual ha_rows multi_range_read_info(uint keyno, uint n_ranges, uint keys,
|
||||
uint key_parts, uint *bufsz,
|
||||
uint *mrr_mode, Cost_estimate *cost);
|
||||
virtual int multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
|
||||
uint n_ranges, uint mrr_mode,
|
||||
HANDLER_BUFFER *buf);
|
||||
virtual int multi_range_read_next(range_id_t *range_info);
|
||||
virtual int multi_range_read_explain_info(uint mrr_mode, char *str,
|
||||
size_t size);
|
||||
|
||||
|
||||
private:
|
||||
bool init_record_priority_queue();
|
||||
void destroy_record_priority_queue();
|
||||
int common_index_read(uchar * buf, bool have_start_key);
|
||||
int common_first_last(uchar * buf);
|
||||
int partition_scan_set_up(uchar * buf, bool idx_read_flag);
|
||||
bool check_parallel_search();
|
||||
int handle_pre_scan(bool reverse_order, bool use_parallel);
|
||||
int handle_unordered_next(uchar * buf, bool next_same);
|
||||
int handle_unordered_scan_next_partition(uchar * buf);
|
||||
int handle_ordered_index_scan(uchar * buf, bool reverse_order);
|
||||
@ -920,7 +992,7 @@ public:
|
||||
special file for handling names of partitions, engine types.
|
||||
HA_REC_NOT_IN_SEQ is always set for partition handler since we cannot
|
||||
guarantee that the records will be returned in sequence.
|
||||
HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_DUPLICATE_POS,
|
||||
HA_CAN_FULLTEXT, HA_DUPLICATE_POS,
|
||||
HA_CAN_INSERT_DELAYED, HA_PRIMARY_KEY_REQUIRED_FOR_POSITION is disabled
|
||||
until further investigated.
|
||||
*/
|
||||
@ -1002,7 +1074,7 @@ public:
|
||||
|
||||
The maximum supported values is the minimum of all handlers in the table
|
||||
*/
|
||||
uint min_of_the_max_uint(uint (handler::*operator_func)(void) const) const;
|
||||
uint min_of_the_max_uint(uint (handler::*operator_func)(void) const) const;
|
||||
virtual uint max_supported_record_length() const;
|
||||
virtual uint max_supported_keys() const;
|
||||
virtual uint max_supported_key_parts() const;
|
||||
@ -1287,5 +1359,4 @@ public:
|
||||
|
||||
friend int cmp_key_rowid_part_id(void *ptr, uchar *ref1, uchar *ref2);
|
||||
};
|
||||
|
||||
#endif /* HA_PARTITION_INCLUDED */
|
||||
|
@ -5344,6 +5344,27 @@ int ha_discover_table_names(THD *thd, LEX_CSTRING *db, MY_DIR *dirp,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
int handler::pre_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
|
||||
KEY_MULTI_RANGE *ranges,
|
||||
uint range_count,
|
||||
bool sorted, HANDLER_BUFFER *buffer,
|
||||
bool use_parallel)
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("handler::pre_read_multi_range_first");
|
||||
result = pre_read_range_first(ranges->start_key.keypart_map ?
|
||||
&ranges->start_key : 0,
|
||||
ranges->end_key.keypart_map ?
|
||||
&ranges->end_key : 0,
|
||||
test(ranges->range_flag & EQ_RANGE),
|
||||
sorted,
|
||||
use_parallel);
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
Read first row between two ranges.
|
||||
Store ranges for future calls to read_range_next.
|
||||
|
@ -3095,6 +3095,7 @@ public:
|
||||
Number of rows in table. It will only be called if
|
||||
(table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0
|
||||
*/
|
||||
virtual int pre_records() { return 0; }
|
||||
virtual ha_rows records() { return stats.records; }
|
||||
/**
|
||||
Return upper bound of current number of records in the table
|
||||
@ -3172,6 +3173,37 @@ public:
|
||||
DBUG_ASSERT(FALSE);
|
||||
return HA_ERR_WRONG_COMMAND;
|
||||
}
|
||||
virtual int pre_index_read_map(const uchar *key,
|
||||
key_part_map keypart_map,
|
||||
enum ha_rkey_function find_flag,
|
||||
bool use_parallel)
|
||||
{ return 0; }
|
||||
virtual int pre_index_first(bool use_parallel)
|
||||
{ return 0; }
|
||||
virtual int pre_index_last(bool use_parallel)
|
||||
{ return 0; }
|
||||
virtual int pre_index_read_last_map(const uchar *key,
|
||||
key_part_map keypart_map,
|
||||
bool use_parallel)
|
||||
{ return 0; }
|
||||
/*
|
||||
virtual int pre_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
|
||||
KEY_MULTI_RANGE *ranges,
|
||||
uint range_count,
|
||||
bool sorted, HANDLER_BUFFER *buffer,
|
||||
bool use_parallel);
|
||||
*/
|
||||
virtual int pre_multi_range_read_next(bool use_parallel)
|
||||
{ return 0; }
|
||||
virtual int pre_read_range_first(const key_range *start_key,
|
||||
const key_range *end_key,
|
||||
bool eq_range, bool sorted,
|
||||
bool use_parallel)
|
||||
{ return 0; }
|
||||
virtual int pre_ft_read(bool use_parallel)
|
||||
{ return 0; }
|
||||
virtual int pre_rnd_next(bool use_parallel)
|
||||
{ return 0; }
|
||||
/**
|
||||
@brief
|
||||
Positions an index cursor to the index specified in the
|
||||
@ -3467,6 +3499,7 @@ public:
|
||||
return 0;
|
||||
}
|
||||
virtual void set_part_info(partition_info *part_info) {return;}
|
||||
virtual void return_record_by_parent() {return;}
|
||||
|
||||
virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0;
|
||||
|
||||
|
@ -1236,7 +1236,8 @@ QUICK_SELECT_I::QUICK_SELECT_I()
|
||||
QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD *thd, TABLE *table, uint key_nr,
|
||||
bool no_alloc, MEM_ROOT *parent_alloc,
|
||||
bool *create_error)
|
||||
:free_file(0),cur_range(NULL),last_range(0),dont_free(0)
|
||||
:thd(thd), no_alloc(no_alloc), parent_alloc(parent_alloc),
|
||||
free_file(0),cur_range(NULL),last_range(0),dont_free(0)
|
||||
{
|
||||
my_bitmap_map *bitmap;
|
||||
DBUG_ENTER("QUICK_RANGE_SELECT::QUICK_RANGE_SELECT");
|
||||
|
@ -1047,6 +1047,10 @@ bool quick_range_seq_next(range_seq_t rseq, KEY_MULTI_RANGE *range);
|
||||
class QUICK_RANGE_SELECT : public QUICK_SELECT_I
|
||||
{
|
||||
protected:
|
||||
THD *thd;
|
||||
bool no_alloc;
|
||||
MEM_ROOT *parent_alloc;
|
||||
|
||||
/* true if we enabled key only reads */
|
||||
handler *file;
|
||||
|
||||
@ -1085,6 +1089,9 @@ public:
|
||||
QUICK_RANGE_SELECT(THD *thd, TABLE *table,uint index_arg,bool no_alloc,
|
||||
MEM_ROOT *parent_alloc, bool *create_err);
|
||||
~QUICK_RANGE_SELECT();
|
||||
virtual QUICK_RANGE_SELECT *clone(bool *create_error)
|
||||
{ return new QUICK_RANGE_SELECT(thd, head, index, no_alloc, parent_alloc,
|
||||
create_error); }
|
||||
|
||||
void need_sorted_output();
|
||||
int init();
|
||||
@ -1155,6 +1162,12 @@ public:
|
||||
:QUICK_RANGE_SELECT(thd, table, index_arg, no_alloc, parent_alloc,
|
||||
create_err)
|
||||
{};
|
||||
virtual QUICK_RANGE_SELECT *clone(bool *create_error)
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
return new QUICK_RANGE_SELECT_GEOM(thd, head, index, no_alloc,
|
||||
parent_alloc, create_error);
|
||||
}
|
||||
virtual int get_next();
|
||||
};
|
||||
|
||||
@ -1584,6 +1597,8 @@ class QUICK_SELECT_DESC: public QUICK_RANGE_SELECT
|
||||
{
|
||||
public:
|
||||
QUICK_SELECT_DESC(QUICK_RANGE_SELECT *q, uint used_key_parts);
|
||||
virtual QUICK_RANGE_SELECT *clone(bool *create_error)
|
||||
{ DBUG_ASSERT(0); return new QUICK_SELECT_DESC(this, used_key_parts); }
|
||||
int get_next();
|
||||
bool reverse_sorted() { return 1; }
|
||||
int get_type() { return QS_TYPE_RANGE_DESC; }
|
||||
@ -1658,6 +1673,8 @@ public:
|
||||
QUICK_RANGE_SELECT (thd, table, key, 1, NULL, create_err)
|
||||
{ (void) init(); }
|
||||
~FT_SELECT() { file->ft_end(); }
|
||||
virtual QUICK_RANGE_SELECT *clone(bool *create_error)
|
||||
{ DBUG_ASSERT(0); return new FT_SELECT(thd, head, index, create_error); }
|
||||
int init() { return file->ft_init(); }
|
||||
int reset() { return 0; }
|
||||
int get_next() { return file->ha_ft_read(record); }
|
||||
|
@ -1325,6 +1325,10 @@ public:
|
||||
JOIN_CACHE_BKA(JOIN *j, JOIN_TAB *tab, uint flags, JOIN_CACHE *prev)
|
||||
:JOIN_CACHE(j, tab, prev), mrr_mode(flags) {}
|
||||
|
||||
JOIN_CACHE_BKA(JOIN_CACHE_BKA *bka)
|
||||
:JOIN_CACHE(bka->join, bka->join_tab, bka->prev_cache),
|
||||
mrr_mode(bka->mrr_mode) {}
|
||||
|
||||
uchar **get_curr_association_ptr() { return &curr_association; }
|
||||
|
||||
/* Initialize the BKA cache */
|
||||
@ -1421,6 +1425,10 @@ public:
|
||||
JOIN_CACHE_BKAH(JOIN *j, JOIN_TAB *tab, uint flags, JOIN_CACHE *prev)
|
||||
:JOIN_CACHE_BNLH(j, tab, prev), mrr_mode(flags) {}
|
||||
|
||||
JOIN_CACHE_BKAH(JOIN_CACHE_BKAH *bkah)
|
||||
:JOIN_CACHE_BNLH(bkah->join, bkah->join_tab, bkah->prev_cache),
|
||||
mrr_mode(bkah->mrr_mode) {}
|
||||
|
||||
uchar **get_curr_association_ptr() { return &curr_matching_chain; }
|
||||
|
||||
/* Initialize the BKAH cache */
|
||||
|
@ -541,6 +541,8 @@ static const char *mrn_inspect_extra_function(enum ha_extra_function operation)
|
||||
case HA_EXTRA_DETACH_CHILDREN:
|
||||
inspected = "HA_EXTRA_DETACH_CHILDREN";
|
||||
break;
|
||||
case HA_EXTRA_STARTING_ORDERED_INDEX_SCAN:
|
||||
break;
|
||||
#ifdef MRN_HAVE_HA_EXTRA_EXPORT
|
||||
case HA_EXTRA_EXPORT:
|
||||
inspected = "HA_EXTRA_EXPORT";
|
||||
|
@ -1872,9 +1872,9 @@ int ha_spider::extra(
|
||||
DBUG_RETURN(error_num);
|
||||
break;
|
||||
#endif
|
||||
#ifdef HA_EXTRA_HAS_HA_EXTRA_USE_CMP_REF
|
||||
case HA_EXTRA_USE_CMP_REF:
|
||||
DBUG_PRINT("info",("spider HA_EXTRA_USE_CMP_REF"));
|
||||
#ifdef HA_EXTRA_HAS_STARTING_ORDERED_INDEX_SCAN
|
||||
case HA_EXTRA_STARTING_ORDERED_INDEX_SCAN:
|
||||
DBUG_PRINT("info",("spider HA_EXTRA_STARTING_ORDERED_INDEX_SCAN"));
|
||||
if (table_share->primary_key != MAX_KEY)
|
||||
{
|
||||
DBUG_PRINT("info",("spider need primary key columns"));
|
||||
|
@ -21,6 +21,15 @@
|
||||
#define SPIDER_HANDLER_START_BULK_INSERT_HAS_FLAGS
|
||||
#endif
|
||||
|
||||
#if MYSQL_VERSION_ID >= 100203
|
||||
#define HANDLER_HAS_TOP_TABLE_FIELDS
|
||||
#define PARTITION_HAS_EXTRA_ATTACH_CHILDREN
|
||||
#define PARTITION_HAS_GET_CHILD_HANDLERS
|
||||
#define PARTITION_HAS_EXTRA_ATTACH_CHILDREN
|
||||
#define PARTITION_HAS_GET_CHILD_HANDLERS
|
||||
#define HA_EXTRA_HAS_STARTING_ORDERED_INDEX_SCAN
|
||||
#endif
|
||||
|
||||
#define SPIDER_CONNECT_INFO_MAX_LEN 64
|
||||
#define SPIDER_CONNECT_INFO_PATH_MAX_LEN FN_REFLEN
|
||||
#define SPIDER_LONGLONG_LEN 20
|
||||
|
@ -0,0 +1,20 @@
|
||||
--let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
|
||||
--let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
|
||||
--let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
|
||||
--let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
|
||||
--let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
|
||||
--let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
|
||||
--let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
|
||||
--let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
|
||||
--let $CHILD2_3_DROP_TABLES= $CHILD2_3_DROP_TABLES_BACKUP
|
||||
--let $CHILD2_3_CREATE_TABLES= $CHILD2_3_CREATE_TABLES_BACKUP
|
||||
--let $CHILD2_3_SELECT_TABLES= $CHILD2_3_SELECT_TABLES_BACKUP
|
||||
--let $OUTPUT_CHILD_GROUP2= $OUTPUT_CHILD_GROUP2_BACKUP
|
||||
--let $USE_GENERAL_LOG= $USE_GENERAL_LOG_BACKUP
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--source ../t/test_deinit.inc
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
--enable_warnings
|
@ -0,0 +1,58 @@
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--source ../t/test_init.inc
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
--enable_warnings
|
||||
--let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
|
||||
let $MASTER_1_COMMENT_2_1=
|
||||
COMMENT='table "tbl_a"'
|
||||
PARTITION BY KEY(value) (
|
||||
PARTITION pt1 COMMENT='srv "s_2_1"',
|
||||
PARTITION pt2 COMMENT='srv "s_2_2"',
|
||||
PARTITION pt3 COMMENT='srv "s_2_3"'
|
||||
);
|
||||
--let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
|
||||
let $CHILD2_1_DROP_TABLES=
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
--let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
|
||||
let $CHILD2_1_CREATE_TABLES=
|
||||
CREATE TABLE tbl_a (
|
||||
value int NOT NULL
|
||||
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
|
||||
--let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
|
||||
let $CHILD2_1_SELECT_TABLES=
|
||||
SELECT value FROM tbl_a ORDER BY value;
|
||||
let $CHILD2_1_SELECT_ARGUMENT1=
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
--let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
|
||||
let $CHILD2_2_DROP_TABLES=
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
--let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
|
||||
let $CHILD2_2_CREATE_TABLES=
|
||||
CREATE TABLE tbl_a (
|
||||
value int NOT NULL
|
||||
) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
|
||||
--let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
|
||||
let $CHILD2_2_SELECT_TABLES=
|
||||
SELECT value FROM tbl_a ORDER BY value;
|
||||
let $CHILD2_2_SELECT_ARGUMENT1=
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
--let $CHILD2_3_DROP_TABLES_BACKUP= $CHILD2_3_DROP_TABLES
|
||||
let $CHILD2_3_DROP_TABLES=
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
--let $CHILD2_3_CREATE_TABLES_BACKUP= $CHILD2_3_CREATE_TABLES
|
||||
let $CHILD2_3_CREATE_TABLES=
|
||||
CREATE TABLE tbl_a (
|
||||
value int NOT NULL
|
||||
) $CHILD2_3_ENGINE $CHILD2_3_CHARSET;
|
||||
--let $CHILD2_3_SELECT_TABLES_BACKUP= $CHILD2_3_SELECT_TABLES
|
||||
let $CHILD2_3_SELECT_TABLES=
|
||||
SELECT value FROM tbl_a ORDER BY value;
|
||||
let $CHILD2_3_SELECT_ARGUMENT1=
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
--let $OUTPUT_CHILD_GROUP2_BACKUP= $OUTPUT_CHILD_GROUP2
|
||||
--let $OUTPUT_CHILD_GROUP2= 1
|
||||
--let $USE_GENERAL_LOG_BACKUP= $USE_GENERAL_LOG
|
||||
--let $USE_GENERAL_LOG= 1
|
@ -0,0 +1,23 @@
|
||||
--let $MASTER_1_COMMENT_2_1= $MASTER_1_COMMENT_2_1_BACKUP
|
||||
--let $MASTER_1_COMMENT_2_2= $MASTER_1_COMMENT_2_2_BACKUP
|
||||
--let $CHILD2_1_DROP_TABLES= $CHILD2_1_DROP_TABLES_BACKUP
|
||||
--let $CHILD2_1_CREATE_TABLES= $CHILD2_1_CREATE_TABLES_BACKUP
|
||||
--let $CHILD2_1_SELECT_TABLES= $CHILD2_1_SELECT_TABLES_BACKUP
|
||||
--let $CHILD2_2_DROP_TABLES= $CHILD2_2_DROP_TABLES_BACKUP
|
||||
--let $CHILD2_2_CREATE_TABLES= $CHILD2_2_CREATE_TABLES_BACKUP
|
||||
--let $CHILD2_2_SELECT_TABLES= $CHILD2_2_SELECT_TABLES_BACKUP
|
||||
--let $CHILD2_3_DROP_TABLES= $CHILD2_3_DROP_TABLES_BACKUP
|
||||
--let $CHILD2_3_CREATE_TABLES= $CHILD2_3_CREATE_TABLES_BACKUP
|
||||
--let $CHILD2_3_SELECT_TABLES= $CHILD2_3_SELECT_TABLES_BACKUP
|
||||
--let $OUTPUT_CHILD_GROUP2= $OUTPUT_CHILD_GROUP2_BACKUP
|
||||
--let $USE_GENERAL_LOG= $USE_GENERAL_LOG_BACKUP
|
||||
--connection master_1
|
||||
set session join_cache_level= @old_join_cache_level;
|
||||
set session optimizer_switch= @old_optimizer_switch;
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--source ../t/test_deinit.inc
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
--enable_warnings
|
@ -0,0 +1,92 @@
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--source ../t/test_init.inc
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
--enable_warnings
|
||||
--let $MASTER_1_COMMENT_2_1_BACKUP= $MASTER_1_COMMENT_2_1
|
||||
let $MASTER_1_COMMENT_2_1=
|
||||
COMMENT='table "tbl_a", bka_mode "1"'
|
||||
PARTITION BY KEY(pkey) (
|
||||
PARTITION pt1 COMMENT='srv "s_2_1"',
|
||||
PARTITION pt2 COMMENT='srv "s_2_2"',
|
||||
PARTITION pt3 COMMENT='srv "s_2_3"'
|
||||
);
|
||||
--let $MASTER_1_COMMENT_2_2_BACKUP= $MASTER_1_COMMENT_2_2
|
||||
let $MASTER_1_COMMENT_2_2=
|
||||
COMMENT='table "tbl_b", bka_mode "1"'
|
||||
PARTITION BY KEY(pkey) (
|
||||
PARTITION pt1 COMMENT='srv "s_2_2"',
|
||||
PARTITION pt2 COMMENT='srv "s_2_3"',
|
||||
PARTITION pt3 COMMENT='srv "s_2_1"'
|
||||
);
|
||||
--let $CHILD2_1_DROP_TABLES_BACKUP= $CHILD2_1_DROP_TABLES
|
||||
let $CHILD2_1_DROP_TABLES=
|
||||
DROP TABLE IF EXISTS tbl_a $STR_SEMICOLON
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
--let $CHILD2_1_CREATE_TABLES_BACKUP= $CHILD2_1_CREATE_TABLES
|
||||
let $CHILD2_1_CREATE_TABLES=
|
||||
CREATE TABLE tbl_a (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET $STR_SEMICOLON
|
||||
CREATE TABLE tbl_b (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
|
||||
--let $CHILD2_1_SELECT_TABLES_BACKUP= $CHILD2_1_SELECT_TABLES
|
||||
let $CHILD2_1_SELECT_TABLES=
|
||||
SELECT pkey FROM tbl_a ORDER BY pkey $STR_SEMICOLON
|
||||
SELECT pkey FROM tbl_b ORDER BY pkey;
|
||||
let $CHILD2_1_SELECT_ARGUMENT1=
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
--let $CHILD2_2_DROP_TABLES_BACKUP= $CHILD2_2_DROP_TABLES
|
||||
let $CHILD2_2_DROP_TABLES=
|
||||
DROP TABLE IF EXISTS tbl_a $STR_SEMICOLON
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
--let $CHILD2_2_CREATE_TABLES_BACKUP= $CHILD2_2_CREATE_TABLES
|
||||
let $CHILD2_2_CREATE_TABLES=
|
||||
CREATE TABLE tbl_a (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $CHILD2_2_ENGINE $CHILD2_2_CHARSET $STR_SEMICOLON
|
||||
CREATE TABLE tbl_b (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
|
||||
--let $CHILD2_2_SELECT_TABLES_BACKUP= $CHILD2_2_SELECT_TABLES
|
||||
let $CHILD2_2_SELECT_TABLES=
|
||||
SELECT pkey FROM tbl_a ORDER BY pkey $STR_SEMICOLON
|
||||
SELECT pkey FROM tbl_b ORDER BY pkey;
|
||||
let $CHILD2_2_SELECT_ARGUMENT1=
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
--let $CHILD2_3_DROP_TABLES_BACKUP= $CHILD2_3_DROP_TABLES
|
||||
let $CHILD2_3_DROP_TABLES=
|
||||
DROP TABLE IF EXISTS tbl_a $STR_SEMICOLON
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
--let $CHILD2_3_CREATE_TABLES_BACKUP= $CHILD2_3_CREATE_TABLES
|
||||
let $CHILD2_3_CREATE_TABLES=
|
||||
CREATE TABLE tbl_a (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $CHILD2_3_ENGINE $CHILD2_3_CHARSET $STR_SEMICOLON
|
||||
CREATE TABLE tbl_b (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $CHILD2_3_ENGINE $CHILD2_3_CHARSET;
|
||||
--let $CHILD2_3_SELECT_TABLES_BACKUP= $CHILD2_3_SELECT_TABLES
|
||||
let $CHILD2_3_SELECT_TABLES=
|
||||
SELECT pkey FROM tbl_a ORDER BY pkey $STR_SEMICOLON
|
||||
SELECT pkey FROM tbl_b ORDER BY pkey;
|
||||
let $CHILD2_3_SELECT_ARGUMENT1=
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
--let $OUTPUT_CHILD_GROUP2_BACKUP= $OUTPUT_CHILD_GROUP2
|
||||
--let $OUTPUT_CHILD_GROUP2= 1
|
||||
--let $USE_GENERAL_LOG_BACKUP= $USE_GENERAL_LOG
|
||||
--let $USE_GENERAL_LOG= 1
|
||||
--connection master_1
|
||||
set @old_join_cache_level= @@join_cache_level;
|
||||
set session join_cache_level= 5;
|
||||
set @old_optimizer_switch= @@optimizer_switch;
|
||||
set session optimizer_switch= 'mrr=on';
|
168
storage/spider/mysql-test/spider/r/partition_cond_push.result
Normal file
168
storage/spider/mysql-test/spider/r/partition_cond_push.result
Normal file
@ -0,0 +1,168 @@
|
||||
for master_1
|
||||
for child2
|
||||
child2_1
|
||||
child2_2
|
||||
child2_3
|
||||
for child3
|
||||
child3_1
|
||||
child3_2
|
||||
child3_3
|
||||
|
||||
drop and create databases
|
||||
connection master_1;
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
CREATE DATABASE auto_test_local;
|
||||
USE auto_test_local;
|
||||
connection child2_1;
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
CREATE DATABASE auto_test_remote;
|
||||
USE auto_test_remote;
|
||||
connection child2_2;
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
CREATE DATABASE auto_test_remote2;
|
||||
USE auto_test_remote2;
|
||||
connection child2_3;
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
CREATE DATABASE auto_test_remote3;
|
||||
USE auto_test_remote3;
|
||||
|
||||
create table and insert
|
||||
connection child2_1;
|
||||
CHILD2_1_DROP_TABLES
|
||||
CHILD2_1_CREATE_TABLES
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection child2_2;
|
||||
CHILD2_2_DROP_TABLES
|
||||
CHILD2_2_CREATE_TABLES
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection child2_3;
|
||||
CHILD2_3_DROP_TABLES
|
||||
CHILD2_3_CREATE_TABLES
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection master_1;
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
CREATE TABLE tbl_a (
|
||||
value int NOT NULL
|
||||
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
|
||||
INSERT INTO tbl_a (value) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
INSERT INTO tbl_a (value) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||
INSERT INTO tbl_a (value) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
|
||||
|
||||
select test
|
||||
connection child2_1;
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection master_1;
|
||||
SELECT value FROM tbl_a WHERE value < 100;
|
||||
value
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
16
|
||||
17
|
||||
22
|
||||
23
|
||||
28
|
||||
29
|
||||
0
|
||||
1
|
||||
6
|
||||
7
|
||||
12
|
||||
13
|
||||
18
|
||||
19
|
||||
24
|
||||
25
|
||||
2
|
||||
3
|
||||
8
|
||||
9
|
||||
14
|
||||
15
|
||||
20
|
||||
21
|
||||
26
|
||||
27
|
||||
connection child2_1;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
argument
|
||||
select `value` from `auto_test_remote`.`tbl_a` where (`value` < 100)
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
|
||||
SELECT value FROM tbl_a ORDER BY value;
|
||||
value
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
16
|
||||
17
|
||||
22
|
||||
23
|
||||
28
|
||||
29
|
||||
connection child2_2;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
argument
|
||||
select `value` from `auto_test_remote2`.`tbl_a` where (`value` < 100)
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
|
||||
SELECT value FROM tbl_a ORDER BY value;
|
||||
value
|
||||
0
|
||||
1
|
||||
6
|
||||
7
|
||||
12
|
||||
13
|
||||
18
|
||||
19
|
||||
24
|
||||
25
|
||||
connection child2_3;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
argument
|
||||
select `value` from `auto_test_remote3`.`tbl_a` where (`value` < 100)
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
|
||||
SELECT value FROM tbl_a ORDER BY value;
|
||||
value
|
||||
2
|
||||
3
|
||||
8
|
||||
9
|
||||
14
|
||||
15
|
||||
20
|
||||
21
|
||||
26
|
||||
27
|
||||
|
||||
deinit
|
||||
connection master_1;
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
connection child2_1;
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
connection child2_2;
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
connection child2_3;
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
for master_1
|
||||
for child2
|
||||
child2_1
|
||||
child2_2
|
||||
child2_3
|
||||
for child3
|
||||
child3_1
|
||||
child3_2
|
||||
child3_3
|
||||
|
||||
end of test
|
223
storage/spider/mysql-test/spider/r/partition_mrr.result
Normal file
223
storage/spider/mysql-test/spider/r/partition_mrr.result
Normal file
@ -0,0 +1,223 @@
|
||||
for master_1
|
||||
for child2
|
||||
child2_1
|
||||
child2_2
|
||||
child2_3
|
||||
for child3
|
||||
child3_1
|
||||
child3_2
|
||||
child3_3
|
||||
connection master_1;
|
||||
set @old_join_cache_level= @@join_cache_level;
|
||||
set session join_cache_level= 5;
|
||||
set @old_optimizer_switch= @@optimizer_switch;
|
||||
set session optimizer_switch= 'mrr=on';
|
||||
|
||||
drop and create databases
|
||||
connection master_1;
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
CREATE DATABASE auto_test_local;
|
||||
USE auto_test_local;
|
||||
connection child2_1;
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
CREATE DATABASE auto_test_remote;
|
||||
USE auto_test_remote;
|
||||
connection child2_2;
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
CREATE DATABASE auto_test_remote2;
|
||||
USE auto_test_remote2;
|
||||
connection child2_3;
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
CREATE DATABASE auto_test_remote3;
|
||||
USE auto_test_remote3;
|
||||
|
||||
create table and insert
|
||||
connection child2_1;
|
||||
CHILD2_1_DROP_TABLES
|
||||
CHILD2_1_CREATE_TABLES
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection child2_2;
|
||||
CHILD2_2_DROP_TABLES
|
||||
CHILD2_2_CREATE_TABLES
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection child2_3;
|
||||
CHILD2_3_DROP_TABLES
|
||||
CHILD2_3_CREATE_TABLES
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection master_1;
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
CREATE TABLE tbl_a (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
|
||||
CREATE TABLE tbl_b (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2
|
||||
INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||
INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
|
||||
INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||
INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
|
||||
|
||||
select test
|
||||
connection child2_1;
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
connection master_1;
|
||||
SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
|
||||
pkey
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
16
|
||||
17
|
||||
22
|
||||
23
|
||||
28
|
||||
29
|
||||
0
|
||||
1
|
||||
6
|
||||
7
|
||||
12
|
||||
13
|
||||
18
|
||||
19
|
||||
24
|
||||
25
|
||||
2
|
||||
3
|
||||
8
|
||||
9
|
||||
14
|
||||
15
|
||||
20
|
||||
21
|
||||
26
|
||||
27
|
||||
connection child2_1;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
argument
|
||||
select `pkey` from `auto_test_remote`.`tbl_a` order by `pkey`
|
||||
select a.id,b.`pkey` from auto_test_remote.tmp_spider_bka_xxxx a,`auto_test_remote`.`tbl_b` b where a.c0 <=> b.`pkey`
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
|
||||
SELECT pkey FROM tbl_a ORDER BY pkey ;
|
||||
SELECT pkey FROM tbl_b ORDER BY pkey;
|
||||
pkey
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
16
|
||||
17
|
||||
22
|
||||
23
|
||||
28
|
||||
29
|
||||
pkey
|
||||
2
|
||||
3
|
||||
8
|
||||
9
|
||||
14
|
||||
15
|
||||
20
|
||||
21
|
||||
26
|
||||
27
|
||||
connection child2_2;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
argument
|
||||
select `pkey` from `auto_test_remote2`.`tbl_a` order by `pkey`
|
||||
select a.id,b.`pkey` from auto_test_remote2.tmp_spider_bka_xxxx a,`auto_test_remote2`.`tbl_b` b where a.c0 <=> b.`pkey`
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
|
||||
SELECT pkey FROM tbl_a ORDER BY pkey ;
|
||||
SELECT pkey FROM tbl_b ORDER BY pkey;
|
||||
pkey
|
||||
0
|
||||
1
|
||||
6
|
||||
7
|
||||
12
|
||||
13
|
||||
18
|
||||
19
|
||||
24
|
||||
25
|
||||
pkey
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
16
|
||||
17
|
||||
22
|
||||
23
|
||||
28
|
||||
29
|
||||
connection child2_3;
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
|
||||
argument
|
||||
select `pkey` from `auto_test_remote3`.`tbl_a` order by `pkey`
|
||||
select a.id,b.`pkey` from auto_test_remote3.tmp_spider_bka_xxxx a,`auto_test_remote3`.`tbl_b` b where a.c0 <=> b.`pkey`
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
|
||||
SELECT pkey FROM tbl_a ORDER BY pkey ;
|
||||
SELECT pkey FROM tbl_b ORDER BY pkey;
|
||||
pkey
|
||||
2
|
||||
3
|
||||
8
|
||||
9
|
||||
14
|
||||
15
|
||||
20
|
||||
21
|
||||
26
|
||||
27
|
||||
pkey
|
||||
0
|
||||
1
|
||||
6
|
||||
7
|
||||
12
|
||||
13
|
||||
18
|
||||
19
|
||||
24
|
||||
25
|
||||
|
||||
deinit
|
||||
connection master_1;
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
connection child2_1;
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
connection child2_2;
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
connection child2_3;
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
connection master_1;
|
||||
set session join_cache_level= @old_join_cache_level;
|
||||
set session optimizer_switch= @old_optimizer_switch;
|
||||
for master_1
|
||||
for child2
|
||||
child2_1
|
||||
child2_2
|
||||
child2_3
|
||||
for child3
|
||||
child3_1
|
||||
child3_2
|
||||
child3_3
|
||||
|
||||
end of test
|
219
storage/spider/mysql-test/spider/t/partition_cond_push.test
Normal file
219
storage/spider/mysql-test/spider/t/partition_cond_push.test
Normal file
@ -0,0 +1,219 @@
|
||||
--source ../include/partition_cond_push_init.inc
|
||||
if (!$HAVE_PARTITION)
|
||||
{
|
||||
--source ../include/partition_cond_push_deinit.inc
|
||||
skip Test requires partitioning;
|
||||
}
|
||||
|
||||
--echo
|
||||
--echo drop and create databases
|
||||
--connection master_1
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
CREATE DATABASE auto_test_local;
|
||||
USE auto_test_local;
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
--connection child2_1
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
}
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
CREATE DATABASE auto_test_remote;
|
||||
USE auto_test_remote;
|
||||
--connection child2_2
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
}
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
CREATE DATABASE auto_test_remote2;
|
||||
USE auto_test_remote2;
|
||||
--connection child2_3
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
}
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
CREATE DATABASE auto_test_remote3;
|
||||
USE auto_test_remote3;
|
||||
}
|
||||
--enable_warnings
|
||||
|
||||
--echo
|
||||
--echo create table and insert
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
}
|
||||
--connection child2_1
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
echo CHILD2_1_DROP_TABLES;
|
||||
echo CHILD2_1_CREATE_TABLES;
|
||||
}
|
||||
--disable_warnings
|
||||
eval $CHILD2_1_DROP_TABLES;
|
||||
--enable_warnings
|
||||
eval $CHILD2_1_CREATE_TABLES;
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
}
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
--connection child2_2
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
echo CHILD2_2_DROP_TABLES;
|
||||
echo CHILD2_2_CREATE_TABLES;
|
||||
}
|
||||
--disable_warnings
|
||||
eval $CHILD2_2_DROP_TABLES;
|
||||
--enable_warnings
|
||||
eval $CHILD2_2_CREATE_TABLES;
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
}
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
--connection child2_3
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
echo CHILD2_3_DROP_TABLES;
|
||||
echo CHILD2_3_CREATE_TABLES;
|
||||
}
|
||||
--disable_warnings
|
||||
eval $CHILD2_3_DROP_TABLES;
|
||||
--enable_warnings
|
||||
eval $CHILD2_3_CREATE_TABLES;
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
}
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
}
|
||||
--connection master_1
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
--enable_warnings
|
||||
--disable_query_log
|
||||
echo CREATE TABLE tbl_a (
|
||||
value int NOT NULL
|
||||
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
|
||||
eval CREATE TABLE tbl_a (
|
||||
value int NOT NULL
|
||||
) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
|
||||
--enable_query_log
|
||||
INSERT INTO tbl_a (value) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
INSERT INTO tbl_a (value) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||
INSERT INTO tbl_a (value) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
|
||||
|
||||
--echo
|
||||
--echo select test
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
}
|
||||
--connection child2_1
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
}
|
||||
--connection master_1
|
||||
SELECT value FROM tbl_a WHERE value < 100;
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
}
|
||||
--connection child2_1
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
eval $CHILD2_1_SELECT_ARGUMENT1;
|
||||
}
|
||||
eval $CHILD2_1_SELECT_TABLES;
|
||||
--connection child2_2
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
eval $CHILD2_2_SELECT_ARGUMENT1;
|
||||
}
|
||||
eval $CHILD2_2_SELECT_TABLES;
|
||||
--connection child2_3
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
eval $CHILD2_3_SELECT_ARGUMENT1;
|
||||
}
|
||||
eval $CHILD2_3_SELECT_TABLES;
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
}
|
||||
|
||||
--echo
|
||||
--echo deinit
|
||||
--disable_warnings
|
||||
--connection master_1
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
--connection child2_1
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
}
|
||||
--connection child2_2
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
}
|
||||
--connection child2_3
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
}
|
||||
}
|
||||
--enable_warnings
|
||||
--source ../include/partition_cond_push_deinit.inc
|
||||
--echo
|
||||
--echo end of test
|
235
storage/spider/mysql-test/spider/t/partition_mrr.test
Normal file
235
storage/spider/mysql-test/spider/t/partition_mrr.test
Normal file
@ -0,0 +1,235 @@
|
||||
--source ../include/partition_mrr_init.inc
|
||||
if (!$HAVE_PARTITION)
|
||||
{
|
||||
--source ../include/partition_mrr_deinit.inc
|
||||
skip Test requires partitioning;
|
||||
}
|
||||
|
||||
--echo
|
||||
--echo drop and create databases
|
||||
--connection master_1
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
CREATE DATABASE auto_test_local;
|
||||
USE auto_test_local;
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
--connection child2_1
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
}
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
CREATE DATABASE auto_test_remote;
|
||||
USE auto_test_remote;
|
||||
--connection child2_2
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
}
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
CREATE DATABASE auto_test_remote2;
|
||||
USE auto_test_remote2;
|
||||
--connection child2_3
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET @old_log_output = @@global.log_output;
|
||||
SET GLOBAL log_output = 'TABLE,FILE';
|
||||
}
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
CREATE DATABASE auto_test_remote3;
|
||||
USE auto_test_remote3;
|
||||
}
|
||||
--enable_warnings
|
||||
|
||||
--echo
|
||||
--echo create table and insert
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
}
|
||||
--connection child2_1
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
echo CHILD2_1_DROP_TABLES;
|
||||
echo CHILD2_1_CREATE_TABLES;
|
||||
}
|
||||
--disable_warnings
|
||||
eval $CHILD2_1_DROP_TABLES;
|
||||
--enable_warnings
|
||||
eval $CHILD2_1_CREATE_TABLES;
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
}
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
--connection child2_2
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
echo CHILD2_2_DROP_TABLES;
|
||||
echo CHILD2_2_CREATE_TABLES;
|
||||
}
|
||||
--disable_warnings
|
||||
eval $CHILD2_2_DROP_TABLES;
|
||||
--enable_warnings
|
||||
eval $CHILD2_2_CREATE_TABLES;
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
}
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
--connection child2_3
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
echo CHILD2_3_DROP_TABLES;
|
||||
echo CHILD2_3_CREATE_TABLES;
|
||||
}
|
||||
--disable_warnings
|
||||
eval $CHILD2_3_DROP_TABLES;
|
||||
--enable_warnings
|
||||
eval $CHILD2_3_CREATE_TABLES;
|
||||
if ($OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
}
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
}
|
||||
--connection master_1
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS tbl_a;
|
||||
DROP TABLE IF EXISTS tbl_b;
|
||||
--enable_warnings
|
||||
--disable_query_log
|
||||
echo CREATE TABLE tbl_a (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
|
||||
echo CREATE TABLE tbl_b (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_2;
|
||||
eval CREATE TABLE tbl_a (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
|
||||
eval CREATE TABLE tbl_b (
|
||||
pkey int NOT NULL,
|
||||
PRIMARY KEY (pkey)
|
||||
) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_2;
|
||||
--enable_query_log
|
||||
INSERT INTO tbl_a (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
INSERT INTO tbl_a (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||
INSERT INTO tbl_a (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
|
||||
INSERT INTO tbl_b (pkey) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
INSERT INTO tbl_b (pkey) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||
INSERT INTO tbl_b (pkey) VALUES (20),(21),(22),(23),(24),(25),(26),(27),(28),(29);
|
||||
|
||||
--echo
|
||||
--echo select test
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
}
|
||||
--connection child2_1
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
}
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
}
|
||||
--connection master_1
|
||||
SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
}
|
||||
--connection child2_1
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
|
||||
eval $CHILD2_1_SELECT_ARGUMENT1;
|
||||
}
|
||||
eval $CHILD2_1_SELECT_TABLES;
|
||||
--connection child2_2
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
|
||||
eval $CHILD2_2_SELECT_ARGUMENT1;
|
||||
}
|
||||
eval $CHILD2_2_SELECT_TABLES;
|
||||
--connection child2_3
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
--replace_regex /tmp_spider_bka_0x[0-9a-f]*/tmp_spider_bka_xxxx/
|
||||
eval $CHILD2_3_SELECT_ARGUMENT1;
|
||||
}
|
||||
eval $CHILD2_3_SELECT_TABLES;
|
||||
if (!$OUTPUT_CHILD_GROUP2)
|
||||
{
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
}
|
||||
}
|
||||
|
||||
--echo
|
||||
--echo deinit
|
||||
--disable_warnings
|
||||
--connection master_1
|
||||
DROP DATABASE IF EXISTS auto_test_local;
|
||||
if ($USE_CHILD_GROUP2)
|
||||
{
|
||||
--connection child2_1
|
||||
DROP DATABASE IF EXISTS auto_test_remote;
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
}
|
||||
--connection child2_2
|
||||
DROP DATABASE IF EXISTS auto_test_remote2;
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
}
|
||||
--connection child2_3
|
||||
DROP DATABASE IF EXISTS auto_test_remote3;
|
||||
if ($USE_GENERAL_LOG)
|
||||
{
|
||||
SET GLOBAL log_output = @old_log_output;
|
||||
}
|
||||
}
|
||||
--enable_warnings
|
||||
--source ../include/partition_mrr_deinit.inc
|
||||
--echo
|
||||
--echo end of test
|
Loading…
x
Reference in New Issue
Block a user