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,
|
HA_EXTRA_PREPARE_FOR_FORCED_CLOSE,
|
||||||
/* Inform handler that we will do an alter table */
|
/* Inform handler that we will do an alter table */
|
||||||
HA_EXTRA_PREPARE_FOR_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 */
|
/* Compatible option, to be deleted in 6.0 */
|
||||||
|
@ -45,6 +45,8 @@ extern "C" {
|
|||||||
/* compatibility functions */
|
/* compatibility functions */
|
||||||
#define bitmap_init(A,B,C,D) my_bitmap_init(A,B,C,D)
|
#define bitmap_init(A,B,C,D) my_bitmap_init(A,B,C,D)
|
||||||
#define bitmap_free(A) my_bitmap_free(A)
|
#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 void create_last_word_mask(MY_BITMAP *map);
|
||||||
extern my_bool my_bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,
|
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
|
test.t1 analyze status OK
|
||||||
EXPLAIN SELECT b FROM t1 WHERE b between 'L' and 'N' AND a > -100;
|
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
|
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;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug#13007154: Crash in keys_to_use_for_scanning with ORDER BY
|
# 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'
|
AND col3 BETWEEN '2013-03-08 00:00:00' AND '2013-03-12 12:00:00'
|
||||||
GROUP BY 1, 2, 3;
|
GROUP BY 1, 2, 3;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
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
|
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'
|
AND col3 BETWEEN '2013-03-08 00:00:00' AND '2013-03-12 12:00:00'
|
||||||
GROUP BY 1, 2, 3;
|
GROUP BY 1, 2, 3;
|
||||||
|
@ -18,7 +18,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
|||||||
# # # # # # # # # 3 #
|
# # # # # # # # # 3 #
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 7;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 7;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
# # # # # # # # # 10 #
|
# # # # # # # # # 9 #
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 1;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 1;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
# # # # # # # # # 3 #
|
# # # # # # # # # 3 #
|
||||||
@ -105,7 +105,7 @@ a
|
|||||||
6
|
6
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 7;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 7;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
SELECT * FROM t1 WHERE a <= 1;
|
||||||
a
|
a
|
||||||
-1
|
-1
|
||||||
@ -168,7 +168,7 @@ a
|
|||||||
6
|
6
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 6;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 6;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
SELECT * FROM t1 WHERE a <= 7;
|
||||||
a
|
a
|
||||||
-1
|
-1
|
||||||
@ -182,7 +182,7 @@ a
|
|||||||
7
|
7
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 7;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 7;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
SELECT * FROM t1 WHERE a = 1;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
@ -424,7 +424,7 @@ a
|
|||||||
5
|
5
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 6;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < 6;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
SELECT * FROM t1 WHERE a <= 1;
|
||||||
a
|
a
|
||||||
-1
|
-1
|
||||||
@ -474,7 +474,7 @@ a
|
|||||||
5
|
5
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 5;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 5;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
SELECT * FROM t1 WHERE a <= 6;
|
||||||
a
|
a
|
||||||
-1
|
-1
|
||||||
@ -487,7 +487,7 @@ a
|
|||||||
6
|
6
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 6;
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= 6;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
SELECT * FROM t1 WHERE a = 1;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
@ -744,13 +744,13 @@ a
|
|||||||
1001-01-01
|
1001-01-01
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE 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
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
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
|
1 SIMPLE t1 p1001-01-01 system a NULL NULL NULL 1
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-00-00';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
1 SIMPLE t1 pNULL ref a a 4 const 1 Using index
|
||||||
# Disabling warnings for the invalid date
|
# Disabling warnings for the invalid date
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
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
|
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';
|
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
|
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';
|
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
|
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';
|
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
|
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';
|
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
|
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
|
# test without index
|
||||||
ALTER TABLE t1 DROP KEY a;
|
ALTER TABLE t1 DROP KEY a;
|
||||||
SELECT * FROM t1 WHERE a < '1001-01-01';
|
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
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
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
|
# Disabling warnings for the invalid date
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
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
|
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';
|
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
|
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';
|
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
|
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';
|
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
|
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
|
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
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
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
|
# Disabling warnings for the invalid date
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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';
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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
|
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
|
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';
|
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
|
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';
|
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
|
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';
|
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
|
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
|
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
|
1 SIMPLE t2 p0,p1,p2 ALL NULL NULL NULL NULL 510 Using where
|
||||||
explain partitions select * from t2 where b = 4;
|
explain partitions select * from t2 where b = 4;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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;
|
explain extended select * from t2 where b = 6;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
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:
|
Warnings:
|
||||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` = 6
|
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;
|
explain partitions select * from t2 where b = 6;
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
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);
|
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
|
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:
|
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)
|
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);
|
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
|
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);
|
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
|
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:
|
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)
|
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);
|
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
|
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);
|
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
|
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:
|
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)
|
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);
|
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
|
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL b NULL NULL NULL 910 Using where
|
||||||
explain extended select * from t2 where b > 5;
|
explain extended select * from t2 where b > 5;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
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:
|
Warnings:
|
||||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t2` where `test`.`t2`.`b` > 5
|
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;
|
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
|
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;
|
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
|
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:
|
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
|
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;
|
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
|
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;
|
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
|
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:
|
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
|
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;
|
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
|
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;
|
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
|
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:
|
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
|
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;
|
explain partitions select * from t2 where b > 0 and b < 5;
|
||||||
@ -2960,10 +2960,10 @@ flush status;
|
|||||||
delete from t2 where b = 7;
|
delete from t2 where b = 7;
|
||||||
show status like 'Handler_read_rnd_next';
|
show status like 'Handler_read_rnd_next';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Handler_read_rnd_next 915
|
Handler_read_rnd_next 0
|
||||||
show status like 'Handler_read_key';
|
show status like 'Handler_read_key';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Handler_read_key 0
|
Handler_read_key 5
|
||||||
flush status;
|
flush status;
|
||||||
delete from t2 where b > 5;
|
delete from t2 where b > 5;
|
||||||
show status like 'Handler_read_rnd_next';
|
show status like 'Handler_read_rnd_next';
|
||||||
|
@ -961,7 +961,7 @@ INSERT INTO t2 SELECT * FROM t1;
|
|||||||
# plans should be identical
|
# plans should be identical
|
||||||
EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10,100) GROUP BY a;
|
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
|
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;
|
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
|
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
|
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.
|
# Should be no more than 4 reads.
|
||||||
SHOW status LIKE 'handler_read_key';
|
SHOW status LIKE 'handler_read_key';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Handler_read_key 4
|
Handler_read_key 2
|
||||||
FLUSH status;
|
FLUSH status;
|
||||||
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
||||||
a MAX(b)
|
a MAX(b)
|
||||||
|
@ -22,7 +22,7 @@ INSERT INTO t2 SELECT * FROM t1;
|
|||||||
# plans should be identical
|
# plans should be identical
|
||||||
EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10,100) GROUP BY a;
|
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
|
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;
|
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
|
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
|
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.
|
# Should be no more than 4 reads.
|
||||||
SHOW status LIKE 'handler_read_key';
|
SHOW status LIKE 'handler_read_key';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Handler_read_key 4
|
Handler_read_key 2
|
||||||
FLUSH status;
|
FLUSH status;
|
||||||
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
||||||
a MAX(b)
|
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);
|
(257,257,'2010-03-06','address257','city257',40,47);
|
||||||
--enable_query_log
|
--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 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';
|
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 */
|
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 my_bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,
|
||||||
my_bool thread_safe)
|
my_bool thread_safe)
|
||||||
|
1227
sql/ha_partition.cc
1227
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);
|
extern "C" int cmp_key_rowid_part_id(void *ptr, uchar *ref1, uchar *ref2);
|
||||||
|
|
||||||
@ -115,11 +141,12 @@ private:
|
|||||||
{
|
{
|
||||||
partition_index_read= 0,
|
partition_index_read= 0,
|
||||||
partition_index_first= 1,
|
partition_index_first= 1,
|
||||||
partition_index_first_unordered= 2,
|
|
||||||
partition_index_last= 3,
|
partition_index_last= 3,
|
||||||
partition_index_read_last= 4,
|
partition_index_read_last= 4,
|
||||||
partition_read_range = 5,
|
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 */
|
/* Data for the partition handler */
|
||||||
int m_mode; // Open mode
|
int m_mode; // Open mode
|
||||||
@ -201,6 +228,7 @@ private:
|
|||||||
bool m_create_handler; // Handler used to create table
|
bool m_create_handler; // Handler used to create table
|
||||||
bool m_is_sub_partitioned; // Is subpartitioned
|
bool m_is_sub_partitioned; // Is subpartitioned
|
||||||
bool m_ordered_scan_ongoing;
|
bool m_ordered_scan_ongoing;
|
||||||
|
bool m_rnd_init_and_first;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If set, this object was created with ha_partition::clone and doesn't
|
If set, this object was created with ha_partition::clone and doesn't
|
||||||
@ -253,6 +281,8 @@ private:
|
|||||||
ha_rows m_bulk_inserted_rows;
|
ha_rows m_bulk_inserted_rows;
|
||||||
/** used for prediction of start_bulk_insert rows */
|
/** used for prediction of start_bulk_insert rows */
|
||||||
enum_monotonicity_info m_part_func_monotonicity_info;
|
enum_monotonicity_info m_part_func_monotonicity_info;
|
||||||
|
bool m_pre_calling;
|
||||||
|
bool m_pre_call_use_parallel;
|
||||||
/** keep track of locked partitions */
|
/** keep track of locked partitions */
|
||||||
MY_BITMAP m_locked_partitions;
|
MY_BITMAP m_locked_partitions;
|
||||||
/** Stores shared auto_increment etc. */
|
/** Stores shared auto_increment etc. */
|
||||||
@ -282,6 +312,9 @@ public:
|
|||||||
m_part_info= part_info;
|
m_part_info= part_info;
|
||||||
m_is_sub_partitioned= part_info->is_sub_partitioned();
|
m_is_sub_partitioned= part_info->is_sub_partitioned();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void return_record_by_parent();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
MODULE create/delete handler object
|
MODULE create/delete handler object
|
||||||
@ -611,26 +644,65 @@ public:
|
|||||||
virtual int read_first_row(uchar *buf, uint primary_key);
|
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_range_first(const key_range * start_key,
|
virtual int read_range_first(const key_range * start_key,
|
||||||
const key_range * end_key,
|
const key_range * end_key,
|
||||||
bool eq_range, bool sorted);
|
bool eq_range, bool sorted);
|
||||||
virtual int read_range_next();
|
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:
|
private:
|
||||||
bool init_record_priority_queue();
|
bool init_record_priority_queue();
|
||||||
void destroy_record_priority_queue();
|
void destroy_record_priority_queue();
|
||||||
int common_index_read(uchar * buf, bool have_start_key);
|
int common_index_read(uchar * buf, bool have_start_key);
|
||||||
int common_first_last(uchar * buf);
|
int common_first_last(uchar * buf);
|
||||||
int partition_scan_set_up(uchar * buf, bool idx_read_flag);
|
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_next(uchar * buf, bool next_same);
|
||||||
int handle_unordered_scan_next_partition(uchar * buf);
|
int handle_unordered_scan_next_partition(uchar * buf);
|
||||||
int handle_ordered_index_scan(uchar * buf, bool reverse_order);
|
int handle_ordered_index_scan(uchar * buf, bool reverse_order);
|
||||||
@ -920,7 +992,7 @@ public:
|
|||||||
special file for handling names of partitions, engine types.
|
special file for handling names of partitions, engine types.
|
||||||
HA_REC_NOT_IN_SEQ is always set for partition handler since we cannot
|
HA_REC_NOT_IN_SEQ is always set for partition handler since we cannot
|
||||||
guarantee that the records will be returned in sequence.
|
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
|
HA_CAN_INSERT_DELAYED, HA_PRIMARY_KEY_REQUIRED_FOR_POSITION is disabled
|
||||||
until further investigated.
|
until further investigated.
|
||||||
*/
|
*/
|
||||||
@ -1287,5 +1359,4 @@ public:
|
|||||||
|
|
||||||
friend int cmp_key_rowid_part_id(void *ptr, uchar *ref1, uchar *ref2);
|
friend int cmp_key_rowid_part_id(void *ptr, uchar *ref1, uchar *ref2);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* HA_PARTITION_INCLUDED */
|
#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.
|
Read first row between two ranges.
|
||||||
Store ranges for future calls to read_range_next.
|
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
|
Number of rows in table. It will only be called if
|
||||||
(table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0
|
(table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0
|
||||||
*/
|
*/
|
||||||
|
virtual int pre_records() { return 0; }
|
||||||
virtual ha_rows records() { return stats.records; }
|
virtual ha_rows records() { return stats.records; }
|
||||||
/**
|
/**
|
||||||
Return upper bound of current number of records in the table
|
Return upper bound of current number of records in the table
|
||||||
@ -3172,6 +3173,37 @@ public:
|
|||||||
DBUG_ASSERT(FALSE);
|
DBUG_ASSERT(FALSE);
|
||||||
return HA_ERR_WRONG_COMMAND;
|
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
|
@brief
|
||||||
Positions an index cursor to the index specified in the
|
Positions an index cursor to the index specified in the
|
||||||
@ -3467,6 +3499,7 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
virtual void set_part_info(partition_info *part_info) {return;}
|
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;
|
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,
|
QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD *thd, TABLE *table, uint key_nr,
|
||||||
bool no_alloc, MEM_ROOT *parent_alloc,
|
bool no_alloc, MEM_ROOT *parent_alloc,
|
||||||
bool *create_error)
|
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;
|
my_bitmap_map *bitmap;
|
||||||
DBUG_ENTER("QUICK_RANGE_SELECT::QUICK_RANGE_SELECT");
|
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
|
class QUICK_RANGE_SELECT : public QUICK_SELECT_I
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
THD *thd;
|
||||||
|
bool no_alloc;
|
||||||
|
MEM_ROOT *parent_alloc;
|
||||||
|
|
||||||
/* true if we enabled key only reads */
|
/* true if we enabled key only reads */
|
||||||
handler *file;
|
handler *file;
|
||||||
|
|
||||||
@ -1085,6 +1089,9 @@ public:
|
|||||||
QUICK_RANGE_SELECT(THD *thd, TABLE *table,uint index_arg,bool no_alloc,
|
QUICK_RANGE_SELECT(THD *thd, TABLE *table,uint index_arg,bool no_alloc,
|
||||||
MEM_ROOT *parent_alloc, bool *create_err);
|
MEM_ROOT *parent_alloc, bool *create_err);
|
||||||
~QUICK_RANGE_SELECT();
|
~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();
|
void need_sorted_output();
|
||||||
int init();
|
int init();
|
||||||
@ -1155,6 +1162,12 @@ public:
|
|||||||
:QUICK_RANGE_SELECT(thd, table, index_arg, no_alloc, parent_alloc,
|
:QUICK_RANGE_SELECT(thd, table, index_arg, no_alloc, parent_alloc,
|
||||||
create_err)
|
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();
|
virtual int get_next();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1584,6 +1597,8 @@ class QUICK_SELECT_DESC: public QUICK_RANGE_SELECT
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QUICK_SELECT_DESC(QUICK_RANGE_SELECT *q, uint used_key_parts);
|
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();
|
int get_next();
|
||||||
bool reverse_sorted() { return 1; }
|
bool reverse_sorted() { return 1; }
|
||||||
int get_type() { return QS_TYPE_RANGE_DESC; }
|
int get_type() { return QS_TYPE_RANGE_DESC; }
|
||||||
@ -1658,6 +1673,8 @@ public:
|
|||||||
QUICK_RANGE_SELECT (thd, table, key, 1, NULL, create_err)
|
QUICK_RANGE_SELECT (thd, table, key, 1, NULL, create_err)
|
||||||
{ (void) init(); }
|
{ (void) init(); }
|
||||||
~FT_SELECT() { file->ft_end(); }
|
~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 init() { return file->ft_init(); }
|
||||||
int reset() { return 0; }
|
int reset() { return 0; }
|
||||||
int get_next() { return file->ha_ft_read(record); }
|
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_BKA(JOIN *j, JOIN_TAB *tab, uint flags, JOIN_CACHE *prev)
|
||||||
:JOIN_CACHE(j, tab, prev), mrr_mode(flags) {}
|
: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; }
|
uchar **get_curr_association_ptr() { return &curr_association; }
|
||||||
|
|
||||||
/* Initialize the BKA cache */
|
/* Initialize the BKA cache */
|
||||||
@ -1421,6 +1425,10 @@ public:
|
|||||||
JOIN_CACHE_BKAH(JOIN *j, JOIN_TAB *tab, uint flags, JOIN_CACHE *prev)
|
JOIN_CACHE_BKAH(JOIN *j, JOIN_TAB *tab, uint flags, JOIN_CACHE *prev)
|
||||||
:JOIN_CACHE_BNLH(j, tab, prev), mrr_mode(flags) {}
|
: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; }
|
uchar **get_curr_association_ptr() { return &curr_matching_chain; }
|
||||||
|
|
||||||
/* Initialize the BKAH cache */
|
/* 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:
|
case HA_EXTRA_DETACH_CHILDREN:
|
||||||
inspected = "HA_EXTRA_DETACH_CHILDREN";
|
inspected = "HA_EXTRA_DETACH_CHILDREN";
|
||||||
break;
|
break;
|
||||||
|
case HA_EXTRA_STARTING_ORDERED_INDEX_SCAN:
|
||||||
|
break;
|
||||||
#ifdef MRN_HAVE_HA_EXTRA_EXPORT
|
#ifdef MRN_HAVE_HA_EXTRA_EXPORT
|
||||||
case HA_EXTRA_EXPORT:
|
case HA_EXTRA_EXPORT:
|
||||||
inspected = "HA_EXTRA_EXPORT";
|
inspected = "HA_EXTRA_EXPORT";
|
||||||
|
@ -1872,9 +1872,9 @@ int ha_spider::extra(
|
|||||||
DBUG_RETURN(error_num);
|
DBUG_RETURN(error_num);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HA_EXTRA_HAS_HA_EXTRA_USE_CMP_REF
|
#ifdef HA_EXTRA_HAS_STARTING_ORDERED_INDEX_SCAN
|
||||||
case HA_EXTRA_USE_CMP_REF:
|
case HA_EXTRA_STARTING_ORDERED_INDEX_SCAN:
|
||||||
DBUG_PRINT("info",("spider HA_EXTRA_USE_CMP_REF"));
|
DBUG_PRINT("info",("spider HA_EXTRA_STARTING_ORDERED_INDEX_SCAN"));
|
||||||
if (table_share->primary_key != MAX_KEY)
|
if (table_share->primary_key != MAX_KEY)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info",("spider need primary key columns"));
|
DBUG_PRINT("info",("spider need primary key columns"));
|
||||||
|
@ -21,6 +21,15 @@
|
|||||||
#define SPIDER_HANDLER_START_BULK_INSERT_HAS_FLAGS
|
#define SPIDER_HANDLER_START_BULK_INSERT_HAS_FLAGS
|
||||||
#endif
|
#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_MAX_LEN 64
|
||||||
#define SPIDER_CONNECT_INFO_PATH_MAX_LEN FN_REFLEN
|
#define SPIDER_CONNECT_INFO_PATH_MAX_LEN FN_REFLEN
|
||||||
#define SPIDER_LONGLONG_LEN 20
|
#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