Auto-merge from mysql-next-mr.
This commit is contained in:
commit
c3eabe01fc
@ -108,7 +108,7 @@
|
|||||||
int32 ebx=(set & 0xFFFFFFFF), ecx=(set >> 32); \
|
int32 ebx=(set & 0xFFFFFFFF), ecx=(set >> 32); \
|
||||||
asm volatile ("push %%ebx; movl %3, %%ebx;" \
|
asm volatile ("push %%ebx; movl %3, %%ebx;" \
|
||||||
LOCK_prefix "; cmpxchg8b %0; setz %2; pop %%ebx"\
|
LOCK_prefix "; cmpxchg8b %0; setz %2; pop %%ebx"\
|
||||||
: "+m" (*a), "+A" (*cmp), "=q" (ret) \
|
: "+m" (*a), "+A" (*cmp), "=c" (ret) \
|
||||||
:"m" (ebx), "c" (ecx))
|
:"m" (ebx), "c" (ecx))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ extern ulong myisam_bulk_insert_tree_size, myisam_data_pointer_size;
|
|||||||
/* which is normally forbidden */
|
/* which is normally forbidden */
|
||||||
extern int (*myisam_test_invalid_symlink)(const char *filename);
|
extern int (*myisam_test_invalid_symlink)(const char *filename);
|
||||||
extern ulonglong myisam_mmap_size, myisam_mmap_used;
|
extern ulonglong myisam_mmap_size, myisam_mmap_used;
|
||||||
extern pthread_mutex_t THR_LOCK_myisam_mmap;
|
extern mysql_mutex_t THR_LOCK_myisam_mmap;
|
||||||
|
|
||||||
/* Prototypes for myisam-functions */
|
/* Prototypes for myisam-functions */
|
||||||
|
|
||||||
|
@ -27,8 +27,7 @@ extern char * mysql_unix_port;
|
|||||||
CLIENT_TRANSACTIONS | \
|
CLIENT_TRANSACTIONS | \
|
||||||
CLIENT_PROTOCOL_41 | \
|
CLIENT_PROTOCOL_41 | \
|
||||||
CLIENT_SECURE_CONNECTION | \
|
CLIENT_SECURE_CONNECTION | \
|
||||||
CLIENT_MULTI_RESULTS | \
|
CLIENT_MULTI_RESULTS)
|
||||||
CLIENT_PS_MULTI_RESULTS)
|
|
||||||
|
|
||||||
sig_handler my_pipe_sig_handler(int sig);
|
sig_handler my_pipe_sig_handler(int sig);
|
||||||
void read_user_name(char *name);
|
void read_user_name(char *name);
|
||||||
|
@ -104,3 +104,4 @@ EXPORTS
|
|||||||
mysql_stmt_attr_get
|
mysql_stmt_attr_get
|
||||||
mysql_stmt_attr_set
|
mysql_stmt_attr_set
|
||||||
mysql_stmt_field_count
|
mysql_stmt_field_count
|
||||||
|
mysql_stmt_next_result
|
||||||
|
@ -12,7 +12,6 @@ main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_m
|
|||||||
main.lock_multi_bug38691 @solaris # Bug#47792 2009-10-02 alik main.lock_multi_bug38691 times out sporadically on Solaris 10
|
main.lock_multi_bug38691 @solaris # Bug#47792 2009-10-02 alik main.lock_multi_bug38691 times out sporadically on Solaris 10
|
||||||
main.log_tables # Bug#47924 2009-10-08 alik main.log_tables times out sporadically
|
main.log_tables # Bug#47924 2009-10-08 alik main.log_tables times out sporadically
|
||||||
main.plugin # Bug#47146 Linking problem with example plugin when dtrace enabled
|
main.plugin # Bug#47146 Linking problem with example plugin when dtrace enabled
|
||||||
main.plugin_load # Bug#47146
|
|
||||||
|
|
||||||
rpl.rpl_get_master_version_and_clock* # Bug#49191 2009-12-01 Daogang rpl_get_master_version_and_clock failed on PB2: COM_REGISTER_SLAVE failed
|
rpl.rpl_get_master_version_and_clock* # Bug#49191 2009-12-01 Daogang rpl_get_master_version_and_clock failed on PB2: COM_REGISTER_SLAVE failed
|
||||||
rpl.rpl_heartbeat_basic # BUG#43828 2009-10-22 luis fails sporadically
|
rpl.rpl_heartbeat_basic # BUG#43828 2009-10-22 luis fails sporadically
|
||||||
|
6
mysql-test/include/check_key_reads.inc
Normal file
6
mysql-test/include/check_key_reads.inc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# include file for checking if variable key_reads is zero
|
||||||
|
let $key_reads= query_get_value(SHOW STATUS LIKE 'key_reads',Value,1);
|
||||||
|
--disable_query_log
|
||||||
|
eval SELECT IF($key_reads = 0, "Yes!", "No!") as 'Zero key reads?';
|
||||||
|
FLUSH STATUS;
|
||||||
|
--enable_query_log
|
9
mysql-test/include/check_key_req.inc
Normal file
9
mysql-test/include/check_key_req.inc
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# include file for checking if variable key_reads = key_read_requests
|
||||||
|
let $key_reads= query_get_value(SHOW STATUS LIKE 'key_reads',Value,1);
|
||||||
|
let $key_r_req= query_get_value(SHOW STATUS LIKE 'key_read_requests',Value,1);
|
||||||
|
let $key_writes= query_get_value(SHOW STATUS LIKE 'key_writes',Value,1);
|
||||||
|
let $key_w_req= query_get_value(SHOW STATUS LIKE 'key_write_requests',Value,1);
|
||||||
|
--disable_query_log
|
||||||
|
eval SELECT IF($key_reads = $key_r_req, "reads == requests", "reads != requests") as 'reads vs requests';
|
||||||
|
eval SELECT IF($key_writes = $key_w_req, "writes == requests", "writes != requests") as 'writes vs requests';
|
||||||
|
--enable_query_log
|
@ -1,8 +0,0 @@
|
|||||||
drop database if exists events_test;
|
|
||||||
drop database if exists events_test2;
|
|
||||||
drop table if exists t1;
|
|
||||||
CREATE TABLE t1 (
|
|
||||||
Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,
|
|
||||||
Varor_period smallint(4) unsigned DEFAULT '0' NOT NULL
|
|
||||||
) ENGINE=example;
|
|
||||||
drop table t1;
|
|
@ -52,9 +52,9 @@ joined DATE NOT NULL
|
|||||||
)
|
)
|
||||||
PARTITION BY KEY(joined)
|
PARTITION BY KEY(joined)
|
||||||
PARTITIONS 6;
|
PARTITIONS 6;
|
||||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-partition' to have it working
|
Got one of the listed errors
|
||||||
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
|
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
|
||||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-partition' to have it working
|
Got one of the listed errors
|
||||||
drop table t1;
|
drop table t1;
|
||||||
ERROR 42S02: Unknown table 't1'
|
ERROR 42S02: Unknown table 't1'
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -71,7 +71,7 @@ PARTITION p2 VALUES LESS THAN (1980),
|
|||||||
PARTITION p3 VALUES LESS THAN (1990),
|
PARTITION p3 VALUES LESS THAN (1990),
|
||||||
PARTITION p4 VALUES LESS THAN MAXVALUE
|
PARTITION p4 VALUES LESS THAN MAXVALUE
|
||||||
);
|
);
|
||||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-partition' to have it working
|
Got one of the listed errors
|
||||||
drop table t1;
|
drop table t1;
|
||||||
ERROR 42S02: Unknown table 't1'
|
ERROR 42S02: Unknown table 't1'
|
||||||
CREATE TABLE t1 (id INT, purchased DATE)
|
CREATE TABLE t1 (id INT, purchased DATE)
|
||||||
@ -82,7 +82,7 @@ PARTITION p0 VALUES LESS THAN (1990),
|
|||||||
PARTITION p1 VALUES LESS THAN (2000),
|
PARTITION p1 VALUES LESS THAN (2000),
|
||||||
PARTITION p2 VALUES LESS THAN MAXVALUE
|
PARTITION p2 VALUES LESS THAN MAXVALUE
|
||||||
);
|
);
|
||||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-partition' to have it working
|
Got one of the listed errors
|
||||||
drop table t1;
|
drop table t1;
|
||||||
ERROR 42S02: Unknown table 't1'
|
ERROR 42S02: Unknown table 't1'
|
||||||
create table t1 (a varchar(10) charset latin1 collate latin1_bin);
|
create table t1 (a varchar(10) charset latin1 collate latin1_bin);
|
||||||
|
@ -9,6 +9,30 @@ partition by range columns (a,b,c)
|
|||||||
( partition p0 values less than (1, maxvalue, 10),
|
( partition p0 values less than (1, maxvalue, 10),
|
||||||
partition p1 values less than (1, maxvalue, maxvalue));
|
partition p1 values less than (1, maxvalue, maxvalue));
|
||||||
ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition
|
ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition
|
||||||
|
create table t1 (a varchar(5) character set ucs2 collate ucs2_bin)
|
||||||
|
partition by range columns (a)
|
||||||
|
(partition p0 values less than (0x0041));
|
||||||
|
insert into t1 values (0x00410000);
|
||||||
|
select hex(a) from t1 where a like 'A_';
|
||||||
|
hex(a)
|
||||||
|
00410000
|
||||||
|
explain partitions select hex(a) from t1 where a like 'A_';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0 system NULL NULL NULL NULL 1
|
||||||
|
alter table t1 remove partitioning;
|
||||||
|
select hex(a) from t1 where a like 'A_';
|
||||||
|
hex(a)
|
||||||
|
00410000
|
||||||
|
create index a on t1 (a);
|
||||||
|
select hex(a) from t1 where a like 'A_';
|
||||||
|
hex(a)
|
||||||
|
00410000
|
||||||
|
insert into t1 values ('A_');
|
||||||
|
select hex(a) from t1;
|
||||||
|
hex(a)
|
||||||
|
00410000
|
||||||
|
0041005F
|
||||||
|
drop table t1;
|
||||||
create table t1 (a varchar(1) character set latin1 collate latin1_general_ci)
|
create table t1 (a varchar(1) character set latin1 collate latin1_general_ci)
|
||||||
partition by range columns(a)
|
partition by range columns(a)
|
||||||
( partition p0 values less than ('a'),
|
( partition p0 values less than ('a'),
|
||||||
@ -69,7 +93,7 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` varchar(5) DEFAULT NULL
|
`a` varchar(5) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a)
|
/*!50500 PARTITION BY LIST COLUMNS(a)
|
||||||
(PARTITION p0 VALUES IN ('''') ENGINE = MyISAM,
|
(PARTITION p0 VALUES IN ('''') ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN ('\\') ENGINE = MyISAM,
|
PARTITION p1 VALUES IN ('\\') ENGINE = MyISAM,
|
||||||
PARTITION p2 VALUES IN ('\0') ENGINE = MyISAM) */
|
PARTITION p2 VALUES IN ('\0') ENGINE = MyISAM) */
|
||||||
@ -128,7 +152,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`c` varchar(25) DEFAULT NULL,
|
`c` varchar(25) DEFAULT NULL,
|
||||||
`d` datetime DEFAULT NULL
|
`d` datetime DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY RANGE COLUMNS(a,b,c,d)
|
/*!50500 PARTITION BY RANGE COLUMNS(a,b,c,d)
|
||||||
SUBPARTITION BY HASH (to_seconds(d))
|
SUBPARTITION BY HASH (to_seconds(d))
|
||||||
SUBPARTITIONS 4
|
SUBPARTITIONS 4
|
||||||
(PARTITION p0 VALUES LESS THAN (1,'0',MAXVALUE,'1900-01-01') ENGINE = MyISAM,
|
(PARTITION p0 VALUES LESS THAN (1,'0',MAXVALUE,'1900-01-01') ENGINE = MyISAM,
|
||||||
@ -211,7 +235,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`a` int(11) DEFAULT NULL,
|
`a` int(11) DEFAULT NULL,
|
||||||
`b` int(11) DEFAULT NULL
|
`b` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a,b)
|
/*!50500 PARTITION BY LIST COLUMNS(a,b)
|
||||||
(PARTITION p0 VALUES IN ((1,NULL),(2,NULL),(NULL,NULL)) ENGINE = MyISAM,
|
(PARTITION p0 VALUES IN ((1,NULL),(2,NULL),(NULL,NULL)) ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN ((1,1),(2,2)) ENGINE = MyISAM,
|
PARTITION p1 VALUES IN ((1,1),(2,2)) ENGINE = MyISAM,
|
||||||
PARTITION p2 VALUES IN ((3,NULL),(NULL,1)) ENGINE = MyISAM) */
|
PARTITION p2 VALUES IN ((3,NULL),(NULL,1)) ENGINE = MyISAM) */
|
||||||
@ -245,7 +269,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`a` int(11) DEFAULT NULL,
|
`a` int(11) DEFAULT NULL,
|
||||||
`b` int(11) DEFAULT NULL
|
`b` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a,b)
|
/*!50500 PARTITION BY LIST COLUMNS(a,b)
|
||||||
(PARTITION p0 VALUES IN ((1,NULL),(2,NULL),(NULL,NULL)) ENGINE = MyISAM,
|
(PARTITION p0 VALUES IN ((1,NULL),(2,NULL),(NULL,NULL)) ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN ((1,1),(2,2)) ENGINE = MyISAM,
|
PARTITION p1 VALUES IN ((1,1),(2,2)) ENGINE = MyISAM,
|
||||||
PARTITION p2 VALUES IN ((3,NULL),(NULL,1)) ENGINE = MyISAM) */
|
PARTITION p2 VALUES IN ((3,NULL),(NULL,1)) ENGINE = MyISAM) */
|
||||||
@ -299,7 +323,7 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) DEFAULT NULL
|
`a` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a)
|
/*!50500 PARTITION BY LIST COLUMNS(a)
|
||||||
(PARTITION p0 VALUES IN (2,1) ENGINE = MyISAM,
|
(PARTITION p0 VALUES IN (2,1) ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN (4,NULL,3) ENGINE = MyISAM) */
|
PARTITION p1 VALUES IN (4,NULL,3) ENGINE = MyISAM) */
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
@ -314,7 +338,7 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) DEFAULT NULL
|
`a` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a)
|
/*!50500 PARTITION BY LIST COLUMNS(a)
|
||||||
(PARTITION p0 VALUES IN (2,1) ENGINE = MyISAM,
|
(PARTITION p0 VALUES IN (2,1) ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN (4,NULL,3) ENGINE = MyISAM) */
|
PARTITION p1 VALUES IN (4,NULL,3) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
@ -349,7 +373,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`c` varchar(5) DEFAULT NULL,
|
`c` varchar(5) DEFAULT NULL,
|
||||||
`d` int(11) DEFAULT NULL
|
`d` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY RANGE COLUMNS(a,b,c)
|
/*!50500 PARTITION BY RANGE COLUMNS(a,b,c)
|
||||||
SUBPARTITION BY KEY (c,d)
|
SUBPARTITION BY KEY (c,d)
|
||||||
SUBPARTITIONS 3
|
SUBPARTITIONS 3
|
||||||
(PARTITION p0 VALUES LESS THAN (1,'abc','abc') ENGINE = MyISAM,
|
(PARTITION p0 VALUES LESS THAN (1,'abc','abc') ENGINE = MyISAM,
|
||||||
@ -382,7 +406,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`b` varchar(2) DEFAULT NULL,
|
`b` varchar(2) DEFAULT NULL,
|
||||||
`c` int(11) DEFAULT NULL
|
`c` int(11) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY RANGE COLUMNS(a,b,c)
|
/*!50500 PARTITION BY RANGE COLUMNS(a,b,c)
|
||||||
(PARTITION p0 VALUES LESS THAN (1,'A',1) ENGINE = MyISAM,
|
(PARTITION p0 VALUES LESS THAN (1,'A',1) ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES LESS THAN (1,'B',1) ENGINE = MyISAM) */
|
PARTITION p1 VALUES LESS THAN (1,'B',1) ENGINE = MyISAM) */
|
||||||
insert into t1 values (1, 'A', 1);
|
insert into t1 values (1, 'A', 1);
|
||||||
|
417
mysql-test/r/partition_key_cache.result
Normal file
417
mysql-test/r/partition_key_cache.result
Normal file
@ -0,0 +1,417 @@
|
|||||||
|
DROP TABLE IF EXISTS t1, t2, v, x;
|
||||||
|
# Actual test of key caches
|
||||||
|
# Verifing that reads/writes use the key cache correctly
|
||||||
|
SELECT @org_key_cache_buffer_size:= @@global.default.key_buffer_size;
|
||||||
|
@org_key_cache_buffer_size:= @@global.default.key_buffer_size
|
||||||
|
1048576
|
||||||
|
# Minimize default key cache (almost disabled).
|
||||||
|
SET @@global.default.key_buffer_size = 1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect key_buffer_size value: '1'
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b))
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
(PARTITION p0 VALUES LESS THAN (1167602410)
|
||||||
|
(SUBPARTITION sp0,
|
||||||
|
SUBPARTITION sp1),
|
||||||
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION sp2,
|
||||||
|
SUBPARTITION sp3));
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b));
|
||||||
|
FLUSH TABLES;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SET @a:=1167602400;
|
||||||
|
CREATE VIEW v AS SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4;
|
||||||
|
CREATE VIEW x AS SELECT 1 FROM v,v a,v b;
|
||||||
|
FLUSH STATUS;
|
||||||
|
INSERT t1 SELECT @a, @a * (1 - ((@a % 2) * 2)) , 1167612400 - (@a:=@a+1) FROM x, x y;
|
||||||
|
reads vs requests
|
||||||
|
reads == requests
|
||||||
|
writes vs requests
|
||||||
|
writes == requests
|
||||||
|
# row distribution:
|
||||||
|
SELECT PARTITION_NAME, SUBPARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' and TABLE_NAME='t1';
|
||||||
|
PARTITION_NAME SUBPARTITION_NAME TABLE_ROWS
|
||||||
|
p0 sp0 5
|
||||||
|
p0 sp1 5
|
||||||
|
p1 sp2 2043
|
||||||
|
p1 sp3 2043
|
||||||
|
DROP VIEW x;
|
||||||
|
DROP VIEW v;
|
||||||
|
FLUSH TABLES;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
INSERT t2 SELECT a,b,c FROM t1;
|
||||||
|
reads vs requests
|
||||||
|
reads == requests
|
||||||
|
writes vs requests
|
||||||
|
writes == requests
|
||||||
|
FLUSH STATUS;
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
FLUSH TABLES;
|
||||||
|
# Setting the default key cache to 1M
|
||||||
|
SET GLOBAL key_buffer_size = 1024*1024;
|
||||||
|
FLUSH STATUS;
|
||||||
|
# All these have to read the indexes
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
# All these should be able to use the key cache
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
Yes!
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
Yes!
|
||||||
|
FLUSH TABLES;
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1,p0);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
# should not be zero
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
Yes!
|
||||||
|
LOAD INDEX INTO CACHE t2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys status OK
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
# should not be zero
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
Yes!
|
||||||
|
FLUSH TABLES;
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1,p0) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
# should not be zero
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
LOAD INDEX INTO CACHE t2 IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys status OK
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
# should not be zero
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
COUNT(b)
|
||||||
|
2048
|
||||||
|
Zero key reads?
|
||||||
|
No!
|
||||||
|
TRUNCATE TABLE t2;
|
||||||
|
INSERT t2 SELECT a,b,c FROM t1;
|
||||||
|
reads vs requests
|
||||||
|
reads != requests
|
||||||
|
writes vs requests
|
||||||
|
writes != requests
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
SET GLOBAL hot_cache.key_buffer_size = 1024*1024;
|
||||||
|
SET GLOBAL warm_cache.key_buffer_size = 1024*1024;
|
||||||
|
SET @@global.cold_cache.key_buffer_size = 1024*1024;
|
||||||
|
SELECT @@global.default.key_buffer_size a, @@global.default.key_cache_block_size b, @@global.default.key_cache_age_threshold c, @@global.default.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
1048576 1024 300 100
|
||||||
|
SELECT @@global.hot_cache.key_buffer_size a, @@global.hot_cache.key_cache_block_size b, @@global.hot_cache.key_cache_age_threshold c, @@global.hot_cache.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
1048576 1024 300 100
|
||||||
|
SELECT @@global.warm_cache.key_buffer_size a, @@global.warm_cache.key_cache_block_size b, @@global.warm_cache.key_cache_age_threshold c, @@global.warm_cache.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
1048576 1024 300 100
|
||||||
|
SELECT @@global.cold_cache.key_buffer_size a, @@global.cold_cache.key_cache_block_size b, @@global.cold_cache.key_cache_age_threshold c, @@global.cold_cache.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
1048576 1024 300 100
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b VARCHAR(257),
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b),
|
||||||
|
KEY `inx_c`(c))
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
(PARTITION p0 VALUES LESS THAN (10)
|
||||||
|
(SUBPARTITION sp0,
|
||||||
|
SUBPARTITION sp1),
|
||||||
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION sp2,
|
||||||
|
SUBPARTITION sp3));
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a INT,
|
||||||
|
b VARCHAR(257),
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b),
|
||||||
|
KEY `inx_c`(c));
|
||||||
|
SET @a:=1167602400;
|
||||||
|
CREATE VIEW v AS SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4;
|
||||||
|
CREATE VIEW x AS SELECT 1 FROM v,v a,v b;
|
||||||
|
INSERT t1 SELECT @a, CONCAT('X_', @a, ' MySQL'), 1167612400 - (@a:=@a+1) FROM x, x a;
|
||||||
|
DROP VIEW x;
|
||||||
|
DROP VIEW v;
|
||||||
|
INSERT t2 SELECT a, b, c FROM t1;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
4096
|
||||||
|
SELECT COUNT(*) FROM t2;
|
||||||
|
COUNT(*)
|
||||||
|
4096
|
||||||
|
FLUSH TABLES;
|
||||||
|
# Restrict partitioned commands to partitioned tables only
|
||||||
|
CACHE INDEX t2 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||||
|
CACHE INDEX t2 PARTITION (p0,`p1`) INDEX (`PRIMARY`) IN hot_cache;
|
||||||
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||||
|
CACHE INDEX t2 PARTITION (`p1`) INDEX (`PRIMARY`,`inx_b`) IN hot_cache;
|
||||||
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||||
|
CACHE INDEX t2 PARTITION (ALL) KEY (`inx_b`,`PRIMARY`) IN hot_cache;
|
||||||
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||||
|
# Basic key cache testing
|
||||||
|
# The manual correctly says: "The syntax of CACHE INDEX enables you to
|
||||||
|
# specify that only particular indexes from a table should be assigned
|
||||||
|
# to the cache. The current implementation assigns all the table's
|
||||||
|
# indexes to the cache, so there is no reason to specify anything
|
||||||
|
# other than the table name."
|
||||||
|
# So the most of the test only tests the syntax
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t2 KEY (`PRIMARY`) IN warm_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t2 KEY (`PRIMARY`,`inx_b`) IN cold_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t2 INDEX (inx_b,`PRIMARY`) IN default;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN cold_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 PARTITIONS (p0) KEY (`inx_b`) IN cold_cache;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARTITIONS (p0) KEY (`inx_b`) IN cold_cache' at line 1
|
||||||
|
# only one table at a time if specifying partitions
|
||||||
|
CACHE INDEX t1,t2 PARTITION (p0) KEY (`inx_b`) IN cold_cache;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARTITION (p0) KEY (`inx_b`) IN cold_cache' at line 1
|
||||||
|
CACHE INDEX t1 PARTITION (`p0`,p1) INDEX (`PRIMARY`) IN warm_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 PARTITION (`p1`) INDEX (`PRIMARY`,inx_b) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 PARTITION (ALL) KEY (`inx_b`,`PRIMARY`) IN default;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 PARTITION (ALL) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 INDEX (`inx_b`) IN default;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 KEY (`PRIMARY`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 KEY (`PRIMARY`,`inx_b`) IN warm_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 INDEX (`inx_b`,`PRIMARY`) IN cold_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
# Test of non existent key cache:
|
||||||
|
CACHE INDEX t1 IN non_existent_key_cache;
|
||||||
|
ERROR HY000: Unknown key cache 'non_existent_key_cache'
|
||||||
|
# Basic testing of LOAD INDEX
|
||||||
|
LOAD INDEX INTO CACHE t2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys status OK
|
||||||
|
# PRIMARY and secondary keys have different block sizes
|
||||||
|
LOAD INDEX INTO CACHE t2 ignore leaves;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys error Indexes use different block sizes
|
||||||
|
test.t2 preload_keys status Operation failed
|
||||||
|
# Must have INDEX or KEY before the index list
|
||||||
|
LOAD INDEX INTO CACHE t2 (`PRIMARY`);
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(`PRIMARY`)' at line 1
|
||||||
|
# Test of IGNORE LEAVES
|
||||||
|
LOAD INDEX INTO CACHE t2 INDEX (`PRIMARY`);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys status OK
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_b`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys error Indexes use different block sizes
|
||||||
|
test.t2 preload_keys status Operation failed
|
||||||
|
CACHE INDEX t2 IN warm_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t1 IN cold_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys error Indexes use different block sizes
|
||||||
|
test.t2 preload_keys status Operation failed
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`, `inx_c`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`inx_b`, `inx_c`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys error Indexes use different block sizes
|
||||||
|
test.t2 preload_keys status Operation failed
|
||||||
|
CACHE INDEX t2 IN warm_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
CACHE INDEX t2 INDEX (`PRIMARY`, `inx_c`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_c`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys error Indexes use different block sizes
|
||||||
|
test.t2 preload_keys status Operation failed
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`,`PRIMARY`) IN default;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_b`);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys status OK
|
||||||
|
CACHE INDEX t2 IN default;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache status OK
|
||||||
|
LOAD INDEX INTO CACHE t2 IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 preload_keys error Indexes use different block sizes
|
||||||
|
test.t2 preload_keys status Operation failed
|
||||||
|
LOAD INDEX INTO CACHE t2 PARTITION (p1) INDEX (`PRIMARY`);
|
||||||
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||||
|
LOAD INDEX INTO CACHE t1, t2;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
test.t2 preload_keys status OK
|
||||||
|
# only one table at a time if specifying partitions
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p0), t2;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' t2' at line 1
|
||||||
|
LOAD INDEX INTO CACHE t1 IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys error Indexes use different block sizes
|
||||||
|
test.t1 preload_keys error Subpartition sp2 returned error
|
||||||
|
test.t1 preload_keys status Operation failed
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`,`inx_b`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys error Indexes use different block sizes
|
||||||
|
test.t1 preload_keys error Subpartition sp2 returned error
|
||||||
|
test.t1 preload_keys status Operation failed
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`inx_b`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys error Indexes use different block sizes
|
||||||
|
test.t1 preload_keys error Subpartition sp2 returned error
|
||||||
|
test.t1 preload_keys status Operation failed
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys error Indexes use different block sizes
|
||||||
|
test.t1 preload_keys error Subpartition sp2 returned error
|
||||||
|
test.t1 preload_keys status Operation failed
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`,`inx_b`);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1) INDEX (`PRIMARY`);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (`p1`,p0) KEY (`PRIMARY`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys error Indexes use different block sizes
|
||||||
|
test.t1 preload_keys error Subpartition sp2 returned error
|
||||||
|
test.t1 preload_keys status Operation failed
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (ALL);
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys status OK
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITIONS ALL;
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARTITIONS ALL' at line 1
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1,`p0`) IGNORE LEAVES;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 preload_keys error Indexes use different block sizes
|
||||||
|
test.t1 preload_keys error Subpartition sp2 returned error
|
||||||
|
test.t1 preload_keys status Operation failed
|
||||||
|
DROP INDEX `inx_b` on t1;
|
||||||
|
DROP INDEX `inx_b` on t2;
|
||||||
|
CACHE INDEX t2 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
|
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 assign_to_keycache Error Key 'inx_b' doesn't exist in table 't2'
|
||||||
|
test.t2 assign_to_keycache status Operation failed
|
||||||
|
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache error Subpartition sp0 returned error
|
||||||
|
test.t1 assign_to_keycache Error Key 'inx_b' doesn't exist in table 't1'
|
||||||
|
test.t1 assign_to_keycache status Operation failed
|
||||||
|
CACHE INDEX t1 INDEX (`inx_b`) IN hot_cache;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache error Subpartition sp0 returned error
|
||||||
|
test.t1 assign_to_keycache Error Key 'inx_b' doesn't exist in table 't1'
|
||||||
|
test.t1 assign_to_keycache status Operation failed
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
SET GLOBAL hot_cache.key_buffer_size = 0;
|
||||||
|
SET GLOBAL warm_cache.key_buffer_size = 0;
|
||||||
|
SET @@global.cold_cache.key_buffer_size = 0;
|
||||||
|
SELECT @@global.default.key_buffer_size a, @@global.default.key_cache_block_size b, @@global.default.key_cache_age_threshold c, @@global.default.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
1048576 1024 300 100
|
||||||
|
SELECT @@global.hot_cache.key_buffer_size a, @@global.hot_cache.key_cache_block_size b, @@global.hot_cache.key_cache_age_threshold c, @@global.hot_cache.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
0 1024 300 100
|
||||||
|
SELECT @@global.warm_cache.key_buffer_size a, @@global.warm_cache.key_cache_block_size b, @@global.warm_cache.key_cache_age_threshold c, @@global.warm_cache.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
0 1024 300 100
|
||||||
|
SELECT @@global.cold_cache.key_buffer_size a, @@global.cold_cache.key_cache_block_size b, @@global.cold_cache.key_cache_age_threshold c, @@global.cold_cache.key_cache_division_limit d;
|
||||||
|
a b c d
|
||||||
|
0 1024 300 100
|
||||||
|
SET @@global.default.key_buffer_size = @org_key_cache_buffer_size;
|
@ -1,6 +1,19 @@
|
|||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
create table t1 (a int)
|
create table t1 (a int)
|
||||||
partition by range (a)
|
partition by range (a)
|
||||||
|
subpartition by hash(to_seconds(a))
|
||||||
|
(partition p0 values less than (1));
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
/*!50500 PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (to_seconds(a))
|
||||||
|
(PARTITION p0 VALUES LESS THAN (1) ENGINE = MyISAM) */
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (a int)
|
||||||
|
partition by range (a)
|
||||||
( partition p0 values less than (NULL),
|
( partition p0 values less than (NULL),
|
||||||
partition p1 values less than (MAXVALUE));
|
partition p1 values less than (MAXVALUE));
|
||||||
ERROR HY000: Not allowed to use NULL value in VALUES LESS THAN
|
ERROR HY000: Not allowed to use NULL value in VALUES LESS THAN
|
||||||
@ -30,6 +43,14 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
|||||||
explain partitions select * from t1 where a < '2007-03-07 23:59:59';
|
explain partitions select * from t1 where a < '2007-03-07 23:59:59';
|
||||||
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 ALL NULL NULL NULL NULL 4 Using where
|
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` datetime NOT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
/*!50500 PARTITION BY RANGE (TO_SECONDS(a))
|
||||||
|
(PARTITION p0 VALUES LESS THAN (63340531200) ENGINE = MyISAM,
|
||||||
|
PARTITION p1 VALUES LESS THAN (63342604800) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a date)
|
create table t1 (a date)
|
||||||
partition by range(to_seconds(a))
|
partition by range(to_seconds(a))
|
||||||
@ -53,6 +74,14 @@ select * from t1 where a <= '2005-01-01';
|
|||||||
a
|
a
|
||||||
2003-12-30
|
2003-12-30
|
||||||
2004-12-31
|
2004-12-31
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` date DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
/*!50500 PARTITION BY RANGE (to_seconds(a))
|
||||||
|
(PARTITION p0 VALUES LESS THAN (63240134400) ENGINE = MyISAM,
|
||||||
|
PARTITION p1 VALUES LESS THAN (63271756800) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a datetime)
|
create table t1 (a datetime)
|
||||||
partition by range(to_seconds(a))
|
partition by range(to_seconds(a))
|
||||||
@ -75,6 +104,14 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
|||||||
select * from t1 where a <= '2005-01-01';
|
select * from t1 where a <= '2005-01-01';
|
||||||
a
|
a
|
||||||
2004-01-01 11:59:29
|
2004-01-01 11:59:29
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` datetime DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
/*!50500 PARTITION BY RANGE (to_seconds(a))
|
||||||
|
(PARTITION p0 VALUES LESS THAN (63240177600) ENGINE = MyISAM,
|
||||||
|
PARTITION p1 VALUES LESS THAN (63271800000) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a int, b char(20))
|
create table t1 (a int, b char(20))
|
||||||
partition by range columns(a,b)
|
partition by range columns(a,b)
|
||||||
|
@ -7,7 +7,7 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` varchar(2) CHARACTER SET cp1250 DEFAULT NULL
|
`a` varchar(2) CHARACTER SET cp1250 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a)
|
/*!50500 PARTITION BY LIST COLUMNS(a)
|
||||||
(PARTITION p0 VALUES IN (_cp1250 0x81) ENGINE = MyISAM) */
|
(PARTITION p0 VALUES IN (_cp1250 0x81) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a varchar(2) character set cp1250)
|
create table t1 (a varchar(2) character set cp1250)
|
||||||
@ -18,7 +18,7 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` varchar(2) CHARACTER SET cp1250 DEFAULT NULL
|
`a` varchar(2) CHARACTER SET cp1250 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a)
|
/*!50500 PARTITION BY LIST COLUMNS(a)
|
||||||
(PARTITION p0 VALUES IN ('€') ENGINE = MyISAM) */
|
(PARTITION p0 VALUES IN ('€') ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a varchar(1500), b varchar(1570))
|
create table t1 (a varchar(1500), b varchar(1570))
|
||||||
@ -45,7 +45,7 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` varchar(2) CHARACTER SET ucs2 DEFAULT NULL
|
`a` varchar(2) CHARACTER SET ucs2 DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
/*!50100 PARTITION BY LIST COLUMNS(a)
|
/*!50500 PARTITION BY LIST COLUMNS(a)
|
||||||
(PARTITION p0 VALUES IN ('†') ENGINE = MyISAM,
|
(PARTITION p0 VALUES IN ('†') ENGINE = MyISAM,
|
||||||
PARTITION p1 VALUES IN ('') ENGINE = MyISAM) */
|
PARTITION p1 VALUES IN ('') ENGINE = MyISAM) */
|
||||||
insert into t1 values ('');
|
insert into t1 values ('');
|
||||||
|
@ -176,21 +176,6 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
select * from t1 union select sql_cache * from t1;
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select * from t1 where a IN (select sql_cache a from t1);
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select * from t1 where a IN (select a from t1 union select sql_cache a from t1);
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
show status like "Qcache_hits";
|
show status like "Qcache_hits";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_hits 4
|
Qcache_hits 4
|
||||||
@ -207,41 +192,6 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
select * from t1 union select sql_no_cache * from t1;
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select * from t1 where a IN (select sql_no_cache a from t1);
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select sql_cache sql_no_cache * from t1;
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select sql_cache * from t1 union select sql_no_cache * from t1;
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select sql_cache * from t1 where a IN (select sql_no_cache a from t1);
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
select sql_cache * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
|
|
||||||
a
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 0
|
Qcache_queries_in_cache 0
|
||||||
@ -1490,12 +1440,6 @@ insert into t1 values ('c');
|
|||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set GLOBAL query_cache_size= default;
|
set GLOBAL query_cache_size= default;
|
||||||
set GLOBAL query_cache_size=1000000;
|
|
||||||
create table t1 (a char);
|
|
||||||
insert into t1 values ('c');
|
|
||||||
a
|
|
||||||
drop table t1;
|
|
||||||
set GLOBAL query_cache_size= default;
|
|
||||||
SET GLOBAL query_cache_size=64*1024*1024;
|
SET GLOBAL query_cache_size=64*1024*1024;
|
||||||
CREATE TABLE t1 (id INT);
|
CREATE TABLE t1 (id INT);
|
||||||
CREATE PROCEDURE proc29856(IN theUPC TEXT)
|
CREATE PROCEDURE proc29856(IN theUPC TEXT)
|
||||||
@ -1723,4 +1667,55 @@ SELECT 1 FROM t1 GROUP BY
|
|||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET GLOBAL query_cache_size= default;
|
SET GLOBAL query_cache_size= default;
|
||||||
|
CREATE TABLE t1( a INT );
|
||||||
|
SET @v = ( SELECT SQL_CACHE 1 );
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 )' at line 1
|
||||||
|
SET @v = ( SELECT SQL_NO_CACHE 1 );
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 )' at line 1
|
||||||
|
SELECT a FROM t1 WHERE a IN ( SELECT SQL_CACHE a FROM t1 );
|
||||||
|
ERROR 42S22: Unknown column 'SQL_CACHE' in 'field list'
|
||||||
|
SELECT a FROM t1 WHERE a IN ( SELECT SQL_NO_CACHE a FROM t1 );
|
||||||
|
ERROR 42S22: Unknown column 'SQL_NO_CACHE' in 'field list'
|
||||||
|
SELECT ( SELECT SQL_CACHE a FROM t1 );
|
||||||
|
ERROR 42S22: Unknown column 'SQL_CACHE' in 'field list'
|
||||||
|
SELECT ( SELECT SQL_NO_CACHE a FROM t1 );
|
||||||
|
ERROR 42S22: Unknown column 'SQL_NO_CACHE' in 'field list'
|
||||||
|
SELECT SQL_CACHE * FROM t1;
|
||||||
|
a
|
||||||
|
SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_CACHE'
|
||||||
|
SELECT * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_NO_CACHE'
|
||||||
|
SELECT * FROM t1 WHERE a IN (SELECT SQL_CACHE a FROM t1);
|
||||||
|
ERROR 42S22: Unknown column 'SQL_CACHE' in 'field list'
|
||||||
|
SELECT * FROM t1 WHERE a IN (SELECT a FROM t1 UNION SELECT SQL_CACHE a FROM t1);
|
||||||
|
ERROR 42S22: Unknown column 'SQL_CACHE' in 'field list'
|
||||||
|
SELECT * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_NO_CACHE'
|
||||||
|
SELECT * FROM t1 WHERE a IN (SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
ERROR 42S22: Unknown column 'SQL_NO_CACHE' in 'field list'
|
||||||
|
SELECT * FROM t1 WHERE a IN
|
||||||
|
(SELECT a FROM t1 UNION SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
ERROR 42S22: Unknown column 'SQL_NO_CACHE' in 'field list'
|
||||||
|
SELECT SQL_CACHE SQL_NO_CACHE * FROM t1;
|
||||||
|
ERROR HY000: Incorrect usage of SQL_CACHE and SQL_NO_CACHE
|
||||||
|
SELECT SQL_NO_CACHE SQL_CACHE * FROM t1;
|
||||||
|
ERROR HY000: Incorrect usage of SQL_NO_CACHE and SQL_CACHE
|
||||||
|
SELECT SQL_CACHE * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_CACHE'
|
||||||
|
SELECT SQL_CACHE * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_NO_CACHE'
|
||||||
|
SELECT SQL_NO_CACHE * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_CACHE'
|
||||||
|
SELECT SQL_NO_CACHE * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
ERROR 42000: Incorrect usage/placement of 'SQL_NO_CACHE'
|
||||||
|
SELECT SQL_CACHE * FROM t1 WHERE a IN
|
||||||
|
(SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
ERROR 42S22: Unknown column 'SQL_NO_CACHE' in 'field list'
|
||||||
|
SELECT SQL_CACHE * FROM t1 WHERE a IN
|
||||||
|
(SELECT a FROM t1 UNION SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
ERROR 42S22: Unknown column 'SQL_NO_CACHE' in 'field list'
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -737,20 +737,11 @@ View Create View character_set_client collation_connection
|
|||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()` binary binary
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()` binary binary
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
|
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
|
||||||
SHOW CREATE VIEW v1;
|
ERROR HY000: Incorrect usage of SQL_CACHE and SQL_NO_CACHE
|
||||||
View Create View character_set_client collation_connection
|
|
||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()` binary binary
|
|
||||||
DROP VIEW v1;
|
|
||||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
|
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
|
||||||
SHOW CREATE VIEW v1;
|
ERROR HY000: Incorrect usage of SQL_NO_CACHE and SQL_CACHE
|
||||||
View Create View character_set_client collation_connection
|
|
||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()` binary binary
|
|
||||||
DROP VIEW v1;
|
|
||||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
|
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
|
||||||
SHOW CREATE VIEW v1;
|
ERROR HY000: Incorrect usage of SQL_CACHE and SQL_NO_CACHE
|
||||||
View Create View character_set_client collation_connection
|
|
||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache now() AS `NOW()` binary binary
|
|
||||||
DROP VIEW v1;
|
|
||||||
CREATE PROCEDURE p1()
|
CREATE PROCEDURE p1()
|
||||||
BEGIN
|
BEGIN
|
||||||
SET @s= 'CREATE VIEW v1 AS SELECT SQL_CACHE 1';
|
SET @s= 'CREATE VIEW v1 AS SELECT SQL_CACHE 1';
|
||||||
|
@ -13,3 +13,4 @@ kill : Bug#37780 2008-12-03 HHunger need some changes to be
|
|||||||
query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadicallyr
|
query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadicallyr
|
||||||
innodb-autoinc : Bug#49267 2009-12-02 test fails on windows because of different case mode
|
innodb-autoinc : Bug#49267 2009-12-02 test fails on windows because of different case mode
|
||||||
innodb : Bug#49396 2009-12-03 test fails in embedded mode
|
innodb : Bug#49396 2009-12-03 test fails in embedded mode
|
||||||
|
plugin_load : Bug#42144 2009-12-21 alik plugin_load fails
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
#
|
|
||||||
# Simple test for the example storage engine
|
|
||||||
# Taken fromm the select test
|
|
||||||
#
|
|
||||||
-- source include/have_exampledb.inc
|
|
||||||
|
|
||||||
--disable_warnings
|
|
||||||
# Clean up if event's test fails
|
|
||||||
drop database if exists events_test;
|
|
||||||
drop database if exists events_test2;
|
|
||||||
|
|
||||||
drop table if exists t1;
|
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
|
||||||
Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,
|
|
||||||
Varor_period smallint(4) unsigned DEFAULT '0' NOT NULL
|
|
||||||
) ENGINE=example;
|
|
||||||
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
# End of 4.1 tests
|
|
@ -31,7 +31,7 @@ ALTER TABLE t1 ENGINE Memory;
|
|||||||
ALTER TABLE t1 ADD (new INT);
|
ALTER TABLE t1 ADD (new INT);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--error ER_FEATURE_DISABLED
|
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
firstname VARCHAR(25) NOT NULL,
|
firstname VARCHAR(25) NOT NULL,
|
||||||
lastname VARCHAR(25) NOT NULL,
|
lastname VARCHAR(25) NOT NULL,
|
||||||
@ -42,13 +42,13 @@ CREATE TABLE t1 (
|
|||||||
PARTITION BY KEY(joined)
|
PARTITION BY KEY(joined)
|
||||||
PARTITIONS 6;
|
PARTITIONS 6;
|
||||||
|
|
||||||
--error ER_FEATURE_DISABLED
|
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
|
||||||
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
|
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
|
||||||
|
|
||||||
--error ER_BAD_TABLE_ERROR
|
--error ER_BAD_TABLE_ERROR
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
--error ER_FEATURE_DISABLED
|
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
firstname VARCHAR(25) NOT NULL,
|
firstname VARCHAR(25) NOT NULL,
|
||||||
lastname VARCHAR(25) NOT NULL,
|
lastname VARCHAR(25) NOT NULL,
|
||||||
@ -66,7 +66,7 @@ PARTITION BY RANGE( YEAR(joined) ) (
|
|||||||
--error ER_BAD_TABLE_ERROR
|
--error ER_BAD_TABLE_ERROR
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
--error ER_FEATURE_DISABLED
|
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
|
||||||
CREATE TABLE t1 (id INT, purchased DATE)
|
CREATE TABLE t1 (id INT, purchased DATE)
|
||||||
PARTITION BY RANGE( YEAR(purchased) )
|
PARTITION BY RANGE( YEAR(purchased) )
|
||||||
SUBPARTITION BY HASH( TO_DAYS(purchased) )
|
SUBPARTITION BY HASH( TO_DAYS(purchased) )
|
||||||
|
@ -23,6 +23,23 @@ partition by range columns (a,b,c)
|
|||||||
( partition p0 values less than (1, maxvalue, 10),
|
( partition p0 values less than (1, maxvalue, 10),
|
||||||
partition p1 values less than (1, maxvalue, maxvalue));
|
partition p1 values less than (1, maxvalue, maxvalue));
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#48737, Search fails with ucs2
|
||||||
|
#
|
||||||
|
create table t1 (a varchar(5) character set ucs2 collate ucs2_bin)
|
||||||
|
partition by range columns (a)
|
||||||
|
(partition p0 values less than (0x0041));
|
||||||
|
insert into t1 values (0x00410000);
|
||||||
|
select hex(a) from t1 where a like 'A_';
|
||||||
|
explain partitions select hex(a) from t1 where a like 'A_';
|
||||||
|
alter table t1 remove partitioning;
|
||||||
|
select hex(a) from t1 where a like 'A_';
|
||||||
|
create index a on t1 (a);
|
||||||
|
select hex(a) from t1 where a like 'A_';
|
||||||
|
insert into t1 values ('A_');
|
||||||
|
select hex(a) from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# BUG#48161, Delivering too few records using collate syntax with partitions
|
# BUG#48161, Delivering too few records using collate syntax with partitions
|
||||||
#
|
#
|
||||||
|
251
mysql-test/t/partition_key_cache.test
Normal file
251
mysql-test/t/partition_key_cache.test
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
# Test of key cache with partitions
|
||||||
|
--source include/have_partition.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1, t2, v, x;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
--echo # Actual test of key caches
|
||||||
|
--echo # Verifing that reads/writes use the key cache correctly
|
||||||
|
SELECT @org_key_cache_buffer_size:= @@global.default.key_buffer_size;
|
||||||
|
--echo # Minimize default key cache (almost disabled).
|
||||||
|
SET @@global.default.key_buffer_size = 1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b))
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
(PARTITION p0 VALUES LESS THAN (1167602410)
|
||||||
|
(SUBPARTITION sp0,
|
||||||
|
SUBPARTITION sp1),
|
||||||
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION sp2,
|
||||||
|
SUBPARTITION sp3));
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b));
|
||||||
|
FLUSH TABLES;
|
||||||
|
FLUSH STATUS;
|
||||||
|
|
||||||
|
# Genereate 4096 rows. Idea from:
|
||||||
|
# http://datacharmer.blogspot.com/2007/12/data-from-nothing-solution-to-pop-quiz.html
|
||||||
|
SET @a:=1167602400;
|
||||||
|
CREATE VIEW v AS SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4;
|
||||||
|
CREATE VIEW x AS SELECT 1 FROM v,v a,v b;
|
||||||
|
# due to I_S performance, this was substituted with include files which
|
||||||
|
# uses SHOW STATUS
|
||||||
|
#DELIMITER |;
|
||||||
|
#CREATE PROCEDURE was_zero_reads()
|
||||||
|
#BEGIN
|
||||||
|
# SELECT IF(VARIABLE_VALUE = 0,"Yes!","No!") as 'Was zero reads?'
|
||||||
|
# FROM INFORMATION_SCHEMA.SESSION_STATUS
|
||||||
|
# WHERE VARIABLE_NAME = 'KEY_READS';
|
||||||
|
# FLUSH STATUS;
|
||||||
|
#END|
|
||||||
|
#DELIMITER ;|
|
||||||
|
|
||||||
|
FLUSH STATUS;
|
||||||
|
INSERT t1 SELECT @a, @a * (1 - ((@a % 2) * 2)) , 1167612400 - (@a:=@a+1) FROM x, x y;
|
||||||
|
--source include/check_key_req.inc
|
||||||
|
--echo # row distribution:
|
||||||
|
SELECT PARTITION_NAME, SUBPARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' and TABLE_NAME='t1';
|
||||||
|
DROP VIEW x;
|
||||||
|
DROP VIEW v;
|
||||||
|
FLUSH TABLES;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
INSERT t2 SELECT a,b,c FROM t1;
|
||||||
|
--source include/check_key_req.inc
|
||||||
|
FLUSH STATUS;
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
FLUSH TABLES;
|
||||||
|
--echo # Setting the default key cache to 1M
|
||||||
|
SET GLOBAL key_buffer_size = 1024*1024;
|
||||||
|
FLUSH STATUS;
|
||||||
|
--echo # All these have to read the indexes
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1);
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
--echo # All these should be able to use the key cache
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
FLUSH TABLES;
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1,p0);
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
--echo # should not be zero
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
LOAD INDEX INTO CACHE t2;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
--echo # should not be zero
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
FLUSH TABLES;
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1,p0) IGNORE LEAVES;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
--echo # should not be zero
|
||||||
|
SELECT COUNT(b) FROM t1 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
LOAD INDEX INTO CACHE t2 IGNORE LEAVES;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
--echo # should not be zero
|
||||||
|
SELECT COUNT(b) FROM t2 WHERE b >= 0;
|
||||||
|
--source include/check_key_reads.inc
|
||||||
|
TRUNCATE TABLE t2;
|
||||||
|
INSERT t2 SELECT a,b,c FROM t1;
|
||||||
|
--source include/check_key_req.inc
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
SET GLOBAL hot_cache.key_buffer_size = 1024*1024;
|
||||||
|
SET GLOBAL warm_cache.key_buffer_size = 1024*1024;
|
||||||
|
SET @@global.cold_cache.key_buffer_size = 1024*1024;
|
||||||
|
SELECT @@global.default.key_buffer_size a, @@global.default.key_cache_block_size b, @@global.default.key_cache_age_threshold c, @@global.default.key_cache_division_limit d;
|
||||||
|
SELECT @@global.hot_cache.key_buffer_size a, @@global.hot_cache.key_cache_block_size b, @@global.hot_cache.key_cache_age_threshold c, @@global.hot_cache.key_cache_division_limit d;
|
||||||
|
SELECT @@global.warm_cache.key_buffer_size a, @@global.warm_cache.key_cache_block_size b, @@global.warm_cache.key_cache_age_threshold c, @@global.warm_cache.key_cache_division_limit d;
|
||||||
|
SELECT @@global.cold_cache.key_buffer_size a, @@global.cold_cache.key_cache_block_size b, @@global.cold_cache.key_cache_age_threshold c, @@global.cold_cache.key_cache_division_limit d;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b VARCHAR(257),
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b),
|
||||||
|
KEY `inx_c`(c))
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
(PARTITION p0 VALUES LESS THAN (10)
|
||||||
|
(SUBPARTITION sp0,
|
||||||
|
SUBPARTITION sp1),
|
||||||
|
PARTITION p1 VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION sp2,
|
||||||
|
SUBPARTITION sp3));
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a INT,
|
||||||
|
b VARCHAR(257),
|
||||||
|
c INT NOT NULL,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY `inx_b` (b),
|
||||||
|
KEY `inx_c`(c));
|
||||||
|
SET @a:=1167602400;
|
||||||
|
# Genereate 4096 rows. Idea from:
|
||||||
|
# http://datacharmer.blogspot.com/2007/12/data-from-nothing-solution-to-pop-quiz.html
|
||||||
|
CREATE VIEW v AS SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4;
|
||||||
|
CREATE VIEW x AS SELECT 1 FROM v,v a,v b;
|
||||||
|
INSERT t1 SELECT @a, CONCAT('X_', @a, ' MySQL'), 1167612400 - (@a:=@a+1) FROM x, x a;
|
||||||
|
DROP VIEW x;
|
||||||
|
DROP VIEW v;
|
||||||
|
INSERT t2 SELECT a, b, c FROM t1;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT COUNT(*) FROM t2;
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--echo # Restrict partitioned commands to partitioned tables only
|
||||||
|
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||||
|
CACHE INDEX t2 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
|
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||||
|
CACHE INDEX t2 PARTITION (p0,`p1`) INDEX (`PRIMARY`) IN hot_cache;
|
||||||
|
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||||
|
CACHE INDEX t2 PARTITION (`p1`) INDEX (`PRIMARY`,`inx_b`) IN hot_cache;
|
||||||
|
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||||
|
CACHE INDEX t2 PARTITION (ALL) KEY (`inx_b`,`PRIMARY`) IN hot_cache;
|
||||||
|
--echo # Basic key cache testing
|
||||||
|
--echo # The manual correctly says: "The syntax of CACHE INDEX enables you to
|
||||||
|
--echo # specify that only particular indexes from a table should be assigned
|
||||||
|
--echo # to the cache. The current implementation assigns all the table's
|
||||||
|
--echo # indexes to the cache, so there is no reason to specify anything
|
||||||
|
--echo # other than the table name."
|
||||||
|
--echo # So the most of the test only tests the syntax
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
|
||||||
|
CACHE INDEX t2 KEY (`PRIMARY`) IN warm_cache;
|
||||||
|
CACHE INDEX t2 KEY (`PRIMARY`,`inx_b`) IN cold_cache;
|
||||||
|
CACHE INDEX t2 INDEX (inx_b,`PRIMARY`) IN default;
|
||||||
|
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN cold_cache;
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CACHE INDEX t1 PARTITIONS (p0) KEY (`inx_b`) IN cold_cache;
|
||||||
|
--echo # only one table at a time if specifying partitions
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
CACHE INDEX t1,t2 PARTITION (p0) KEY (`inx_b`) IN cold_cache;
|
||||||
|
CACHE INDEX t1 PARTITION (`p0`,p1) INDEX (`PRIMARY`) IN warm_cache;
|
||||||
|
CACHE INDEX t1 PARTITION (`p1`) INDEX (`PRIMARY`,inx_b) IN hot_cache;
|
||||||
|
CACHE INDEX t1 PARTITION (ALL) KEY (`inx_b`,`PRIMARY`) IN default;
|
||||||
|
CACHE INDEX t1 PARTITION (ALL) IN hot_cache;
|
||||||
|
CACHE INDEX t1 INDEX (`inx_b`) IN default;
|
||||||
|
CACHE INDEX t1 KEY (`PRIMARY`) IN hot_cache;
|
||||||
|
CACHE INDEX t1 KEY (`PRIMARY`,`inx_b`) IN warm_cache;
|
||||||
|
CACHE INDEX t1 INDEX (`inx_b`,`PRIMARY`) IN cold_cache;
|
||||||
|
CACHE INDEX t1 IN hot_cache;
|
||||||
|
--echo # Test of non existent key cache:
|
||||||
|
--error ER_UNKNOWN_KEY_CACHE
|
||||||
|
CACHE INDEX t1 IN non_existent_key_cache;
|
||||||
|
--echo # Basic testing of LOAD INDEX
|
||||||
|
LOAD INDEX INTO CACHE t2;
|
||||||
|
--echo # PRIMARY and secondary keys have different block sizes
|
||||||
|
LOAD INDEX INTO CACHE t2 ignore leaves;
|
||||||
|
--echo # Must have INDEX or KEY before the index list
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
LOAD INDEX INTO CACHE t2 (`PRIMARY`);
|
||||||
|
|
||||||
|
--echo # Test of IGNORE LEAVES
|
||||||
|
LOAD INDEX INTO CACHE t2 INDEX (`PRIMARY`);
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_b`) IGNORE LEAVES;
|
||||||
|
CACHE INDEX t2 IN warm_cache;
|
||||||
|
CACHE INDEX t1 IN cold_cache;
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`) IGNORE LEAVES;
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`, `inx_c`) IN hot_cache;
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`inx_b`, `inx_c`) IGNORE LEAVES;
|
||||||
|
CACHE INDEX t2 IN warm_cache;
|
||||||
|
CACHE INDEX t2 INDEX (`PRIMARY`, `inx_c`) IN hot_cache;
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_c`) IGNORE LEAVES;
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`,`PRIMARY`) IN default;
|
||||||
|
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_b`);
|
||||||
|
CACHE INDEX t2 IN default;
|
||||||
|
LOAD INDEX INTO CACHE t2 IGNORE LEAVES;
|
||||||
|
|
||||||
|
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||||
|
LOAD INDEX INTO CACHE t2 PARTITION (p1) INDEX (`PRIMARY`);
|
||||||
|
LOAD INDEX INTO CACHE t1, t2;
|
||||||
|
--echo # only one table at a time if specifying partitions
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p0), t2;
|
||||||
|
LOAD INDEX INTO CACHE t1 IGNORE LEAVES;
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`);
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`,`inx_b`) IGNORE LEAVES;
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`inx_b`) IGNORE LEAVES;
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`) IGNORE LEAVES;
|
||||||
|
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`,`inx_b`);
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1) INDEX (`PRIMARY`);
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (`p1`,p0) KEY (`PRIMARY`) IGNORE LEAVES;
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (ALL);
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITIONS ALL;
|
||||||
|
LOAD INDEX INTO CACHE t1 PARTITION (p1,`p0`) IGNORE LEAVES;
|
||||||
|
DROP INDEX `inx_b` on t1;
|
||||||
|
DROP INDEX `inx_b` on t2;
|
||||||
|
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||||
|
CACHE INDEX t2 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
|
CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
|
||||||
|
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
|
||||||
|
CACHE INDEX t1 INDEX (`inx_b`) IN hot_cache;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
SET GLOBAL hot_cache.key_buffer_size = 0;
|
||||||
|
SET GLOBAL warm_cache.key_buffer_size = 0;
|
||||||
|
SET @@global.cold_cache.key_buffer_size = 0;
|
||||||
|
SELECT @@global.default.key_buffer_size a, @@global.default.key_cache_block_size b, @@global.default.key_cache_age_threshold c, @@global.default.key_cache_division_limit d;
|
||||||
|
SELECT @@global.hot_cache.key_buffer_size a, @@global.hot_cache.key_cache_block_size b, @@global.hot_cache.key_cache_age_threshold c, @@global.hot_cache.key_cache_division_limit d;
|
||||||
|
SELECT @@global.warm_cache.key_buffer_size a, @@global.warm_cache.key_cache_block_size b, @@global.warm_cache.key_cache_age_threshold c, @@global.warm_cache.key_cache_division_limit d;
|
||||||
|
SELECT @@global.cold_cache.key_buffer_size a, @@global.cold_cache.key_cache_block_size b, @@global.cold_cache.key_cache_age_threshold c, @@global.cold_cache.key_cache_division_limit d;
|
||||||
|
--disable_warnings
|
||||||
|
SET @@global.default.key_buffer_size = @org_key_cache_buffer_size;
|
||||||
|
--enable_warnings
|
@ -9,6 +9,16 @@
|
|||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
#BUG#49591, Add proper version number to SHOW CREATE TABLE
|
||||||
|
#
|
||||||
|
create table t1 (a int)
|
||||||
|
partition by range (a)
|
||||||
|
subpartition by hash(to_seconds(a))
|
||||||
|
(partition p0 values less than (1));
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--error ER_NULL_IN_VALUES_LESS_THAN
|
--error ER_NULL_IN_VALUES_LESS_THAN
|
||||||
create table t1 (a int)
|
create table t1 (a int)
|
||||||
partition by range (a)
|
partition by range (a)
|
||||||
@ -30,6 +40,7 @@ explain partitions select * from t1 where a < '2007-03-08 00:00:01';
|
|||||||
explain partitions select * from t1 where a <= '2007-03-08 00:00:00';
|
explain partitions select * from t1 where a <= '2007-03-08 00:00:00';
|
||||||
explain partitions select * from t1 where a <= '2007-03-07 23:59:59';
|
explain partitions select * from t1 where a <= '2007-03-07 23:59:59';
|
||||||
explain partitions select * from t1 where a < '2007-03-07 23:59:59';
|
explain partitions select * from t1 where a < '2007-03-07 23:59:59';
|
||||||
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
# New test cases for new function to_seconds
|
# New test cases for new function to_seconds
|
||||||
@ -44,6 +55,7 @@ explain partitions select * from t1 where a <= '2003-12-31';
|
|||||||
select * from t1 where a <= '2003-12-31';
|
select * from t1 where a <= '2003-12-31';
|
||||||
explain partitions select * from t1 where a <= '2005-01-01';
|
explain partitions select * from t1 where a <= '2005-01-01';
|
||||||
select * from t1 where a <= '2005-01-01';
|
select * from t1 where a <= '2005-01-01';
|
||||||
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
create table t1 (a datetime)
|
create table t1 (a datetime)
|
||||||
@ -56,6 +68,7 @@ explain partitions select * from t1 where a <= '2004-01-01 11:59.59';
|
|||||||
select * from t1 where a <= '2004-01-01 11:59:59';
|
select * from t1 where a <= '2004-01-01 11:59:59';
|
||||||
explain partitions select * from t1 where a <= '2005-01-01';
|
explain partitions select * from t1 where a <= '2005-01-01';
|
||||||
select * from t1 where a <= '2005-01-01';
|
select * from t1 where a <= '2005-01-01';
|
||||||
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -94,10 +94,6 @@ select sql_cache * from t1 union select * from t1;
|
|||||||
set query_cache_type=2;
|
set query_cache_type=2;
|
||||||
select sql_cache * from t1 union select * from t1;
|
select sql_cache * from t1 union select * from t1;
|
||||||
|
|
||||||
# all sql_cache statements, except for the first select, are ignored.
|
|
||||||
select * from t1 union select sql_cache * from t1;
|
|
||||||
select * from t1 where a IN (select sql_cache a from t1);
|
|
||||||
select * from t1 where a IN (select a from t1 union select sql_cache a from t1);
|
|
||||||
show status like "Qcache_hits";
|
show status like "Qcache_hits";
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
set query_cache_type=on;
|
set query_cache_type=on;
|
||||||
@ -110,15 +106,6 @@ show status like "Qcache_queries_in_cache";
|
|||||||
# SELECT SQL_NO_CACHE
|
# SELECT SQL_NO_CACHE
|
||||||
#
|
#
|
||||||
select sql_no_cache * from t1;
|
select sql_no_cache * from t1;
|
||||||
# sql_no_cache can occur in any nested select to turn on cacheing for the whole
|
|
||||||
# expression and it will always override a sql_cache statement.
|
|
||||||
select * from t1 union select sql_no_cache * from t1;
|
|
||||||
select * from t1 where a IN (select sql_no_cache a from t1);
|
|
||||||
select * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
|
|
||||||
select sql_cache sql_no_cache * from t1;
|
|
||||||
select sql_cache * from t1 union select sql_no_cache * from t1;
|
|
||||||
select sql_cache * from t1 where a IN (select sql_no_cache a from t1);
|
|
||||||
select sql_cache * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
|
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
@ -1044,22 +1031,25 @@ set GLOBAL query_cache_size= default;
|
|||||||
# Bug #29053 SQL_CACHE in UNION causes non-deterministic functions to be cached
|
# Bug #29053 SQL_CACHE in UNION causes non-deterministic functions to be cached
|
||||||
#
|
#
|
||||||
|
|
||||||
set GLOBAL query_cache_size=1000000;
|
# This syntax is no longer allowed, therefore the test case has been commented
|
||||||
|
# out.
|
||||||
create table t1 (a char);
|
# See test for Bug#35020 below.
|
||||||
insert into t1 values ('c');
|
#set GLOBAL query_cache_size=1000000;
|
||||||
|
#
|
||||||
let $q1= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
#create table t1 (a char);
|
||||||
let $q2= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
#insert into t1 values ('c');
|
||||||
|
#
|
||||||
|
#let $q1= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
||||||
|
#let $q2= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
||||||
|
#
|
||||||
# disabling the logging of the query because the times are different each run.
|
# disabling the logging of the query because the times are different each run.
|
||||||
--disable_query_log
|
#--disable_query_log
|
||||||
eval select a from t1 where "$q1" = "$q2";
|
#eval select a from t1 where "$q1" = "$q2";
|
||||||
--enable_query_log
|
#--enable_query_log
|
||||||
|
#
|
||||||
drop table t1;
|
#drop table t1;
|
||||||
|
#
|
||||||
set GLOBAL query_cache_size= default;
|
#set GLOBAL query_cache_size= default;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#29856: Insufficient buffer space led to a server crash.
|
# Bug#29856: Insufficient buffer space led to a server crash.
|
||||||
@ -1307,5 +1297,69 @@ SELECT 1 FROM t1 GROUP BY
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET GLOBAL query_cache_size= default;
|
SET GLOBAL query_cache_size= default;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#35020: illegal sql_cache select syntax
|
||||||
|
#
|
||||||
|
CREATE TABLE t1( a INT );
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
SET @v = ( SELECT SQL_CACHE 1 );
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
SET @v = ( SELECT SQL_NO_CACHE 1 );
|
||||||
|
|
||||||
|
#
|
||||||
|
# Keywords 'SQL_CACHE' and 'SQL_NO_CACHE' are allowed as column names.
|
||||||
|
# Hence the error messages are not intuitive.
|
||||||
|
#
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT a FROM t1 WHERE a IN ( SELECT SQL_CACHE a FROM t1 );
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT a FROM t1 WHERE a IN ( SELECT SQL_NO_CACHE a FROM t1 );
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT ( SELECT SQL_CACHE a FROM t1 );
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT ( SELECT SQL_NO_CACHE a FROM t1 );
|
||||||
|
|
||||||
|
SELECT SQL_CACHE * FROM t1;
|
||||||
|
SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
|
||||||
|
# SQL_CACHE is only allowed once in first top-level select.
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT * FROM t1 WHERE a IN (SELECT SQL_CACHE a FROM t1);
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT * FROM t1 WHERE a IN (SELECT a FROM t1 UNION SELECT SQL_CACHE a FROM t1);
|
||||||
|
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT * FROM t1 WHERE a IN (SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT * FROM t1 WHERE a IN
|
||||||
|
(SELECT a FROM t1 UNION SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
SELECT SQL_CACHE SQL_NO_CACHE * FROM t1;
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
SELECT SQL_NO_CACHE SQL_CACHE * FROM t1;
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT SQL_CACHE * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT SQL_CACHE * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT SQL_NO_CACHE * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
|
||||||
|
--error ER_CANT_USE_OPTION_HERE
|
||||||
|
SELECT SQL_NO_CACHE * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT SQL_CACHE * FROM t1 WHERE a IN
|
||||||
|
(SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
SELECT SQL_CACHE * FROM t1 WHERE a IN
|
||||||
|
(SELECT a FROM t1 UNION SELECT SQL_NO_CACHE a FROM t1);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
@ -550,18 +550,14 @@ CREATE VIEW v1 AS SELECT SQL_NO_CACHE NOW();
|
|||||||
SHOW CREATE VIEW v1;
|
SHOW CREATE VIEW v1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
|
||||||
# Check that SQL_NO_CACHE always wins.
|
--error ER_WRONG_USAGE
|
||||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
|
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
|
||||||
SHOW CREATE VIEW v1;
|
|
||||||
DROP VIEW v1;
|
|
||||||
|
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
|
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
|
||||||
SHOW CREATE VIEW v1;
|
|
||||||
DROP VIEW v1;
|
|
||||||
|
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
|
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
|
||||||
SHOW CREATE VIEW v1;
|
|
||||||
DROP VIEW v1;
|
|
||||||
|
|
||||||
# Check CREATE VIEW in a prepared statement in a procedure.
|
# Check CREATE VIEW in a prepared statement in a procedure.
|
||||||
delimiter |;
|
delimiter |;
|
||||||
|
@ -15,9 +15,6 @@
|
|||||||
|
|
||||||
# This is CMakeLists.txt for semi-sync replication plugins
|
# This is CMakeLists.txt for semi-sync replication plugins
|
||||||
|
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
|
||||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
|
||||||
|
|
||||||
# Add common include directories
|
# Add common include directories
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib
|
||||||
${CMAKE_SOURCE_DIR}/sql
|
${CMAKE_SOURCE_DIR}/sql
|
||||||
|
@ -290,6 +290,11 @@ if [ -d storage/innodb_plugin ]; then
|
|||||||
cp storage/innodb_plugin/$TARGET/ha_innodb_plugin.dll \
|
cp storage/innodb_plugin/$TARGET/ha_innodb_plugin.dll \
|
||||||
$DESTDIR/lib/plugin/
|
$DESTDIR/lib/plugin/
|
||||||
fi
|
fi
|
||||||
|
if [ -d plugin/semisync ]; then
|
||||||
|
cp plugin/semisync/$TARGET/semisync_master.dll \
|
||||||
|
plugin/semisync/$TARGET/semisync_slave.dll \
|
||||||
|
$DESTDIR/lib/plugin/
|
||||||
|
fi
|
||||||
|
|
||||||
if [ x"$TARGET" != x"release" ] ; then
|
if [ x"$TARGET" != x"release" ] ; then
|
||||||
cp libmysql/$TARGET/libmysql.pdb \
|
cp libmysql/$TARGET/libmysql.pdb \
|
||||||
@ -302,6 +307,11 @@ if [ x"$TARGET" != x"release" ] ; then
|
|||||||
cp storage/innodb_plugin/$TARGET/ha_innodb_plugin.pdb \
|
cp storage/innodb_plugin/$TARGET/ha_innodb_plugin.pdb \
|
||||||
$DESTDIR/lib/plugin/
|
$DESTDIR/lib/plugin/
|
||||||
fi
|
fi
|
||||||
|
if [ -d plugin/semisync ]; then
|
||||||
|
cp plugin/semisync/$TARGET/semisync_master.pdb \
|
||||||
|
plugin/semisync/$TARGET/semisync_slave.pdb \
|
||||||
|
$DESTDIR/lib/plugin/
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -328,6 +338,15 @@ if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \
|
|||||||
storage/innodb_plugin/debug/ha_innodb_plugin.pdb \
|
storage/innodb_plugin/debug/ha_innodb_plugin.pdb \
|
||||||
$DESTDIR/lib/plugin/debug/
|
$DESTDIR/lib/plugin/debug/
|
||||||
fi
|
fi
|
||||||
|
if [ -d plugin/semisync ]; then
|
||||||
|
cp plugin/semisync/debug/semisync_master.dll \
|
||||||
|
plugin/semisync/debug/semisync_master.lib \
|
||||||
|
plugin/semisync/debug/semisync_master.pdb \
|
||||||
|
plugin/semisync/debug/semisync_slave.dll \
|
||||||
|
plugin/semisync/debug/semisync_slave.lib \
|
||||||
|
plugin/semisync/debug/semisync_slave.pdb \
|
||||||
|
$DESTDIR/lib/plugin/debug/
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
|
@ -894,6 +894,15 @@ public:
|
|||||||
(*traverser)(this, arg);
|
(*traverser)(this, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is used to get the most recent version of any function in
|
||||||
|
an item tree. The version is the version where a MySQL function
|
||||||
|
was introduced in. So any function which is added should use
|
||||||
|
this function and set the int_arg to maximum of the input data
|
||||||
|
and their own version info.
|
||||||
|
*/
|
||||||
|
virtual bool intro_version(uchar *int_arg) { return 0; }
|
||||||
|
|
||||||
virtual bool remove_dependence_processor(uchar * arg) { return 0; }
|
virtual bool remove_dependence_processor(uchar * arg) { return 0; }
|
||||||
virtual bool remove_fixed(uchar * arg) { fixed= 0; return 0; }
|
virtual bool remove_fixed(uchar * arg) { fixed= 0; return 0; }
|
||||||
virtual bool cleanup_processor(uchar *arg);
|
virtual bool cleanup_processor(uchar *arg);
|
||||||
|
@ -91,6 +91,15 @@ public:
|
|||||||
enum_monotonicity_info get_monotonicity_info() const;
|
enum_monotonicity_info get_monotonicity_info() const;
|
||||||
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
||||||
bool check_partition_func_processor(uchar *bool_arg) { return FALSE;}
|
bool check_partition_func_processor(uchar *bool_arg) { return FALSE;}
|
||||||
|
|
||||||
|
bool intro_version(uchar *int_arg)
|
||||||
|
{
|
||||||
|
int *input_version= (int*)int_arg;
|
||||||
|
/* This function was introduced in 5.5 */
|
||||||
|
int output_version= (*input_version, 50500);
|
||||||
|
*input_version= output_version;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -115,6 +115,42 @@ char *partition_info::create_default_partition_names(uint part_no,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Generate a version string for partition expression
|
||||||
|
This function must be updated every time there is a possibility for
|
||||||
|
a new function of a higher version number than 5.5.0.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
set_show_version_string()
|
||||||
|
RETURN VALUES
|
||||||
|
None
|
||||||
|
*/
|
||||||
|
void partition_info::set_show_version_string(String *packet)
|
||||||
|
{
|
||||||
|
int version= 0;
|
||||||
|
if (column_list)
|
||||||
|
packet->append(STRING_WITH_LEN("\n/*!50500"));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (part_expr)
|
||||||
|
part_expr->walk(&Item::intro_version, 0, (uchar*)&version);
|
||||||
|
if (subpart_expr)
|
||||||
|
subpart_expr->walk(&Item::intro_version, 0, (uchar*)&version);
|
||||||
|
if (version == 0)
|
||||||
|
{
|
||||||
|
/* No new functions in partition function */
|
||||||
|
packet->append(STRING_WITH_LEN("\n/*!50100"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char buf[65];
|
||||||
|
char *buf_ptr= longlong10_to_str((longlong)version, buf, 10);
|
||||||
|
packet->append(STRING_WITH_LEN("\n/*!"));
|
||||||
|
packet->append(buf, (size_t)(buf_ptr - buf));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Create a unique name for the subpartition as part_name'sp''subpart_no'
|
Create a unique name for the subpartition as part_name'sp''subpart_no'
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
@ -302,6 +302,7 @@ public:
|
|||||||
bool check_partition_field_length();
|
bool check_partition_field_length();
|
||||||
bool init_column_part();
|
bool init_column_part();
|
||||||
bool add_column_list_value(THD *thd, Item *item);
|
bool add_column_list_value(THD *thd, Item *item);
|
||||||
|
void set_show_version_string(String *packet);
|
||||||
private:
|
private:
|
||||||
static int list_part_cmp(const void* a, const void* b);
|
static int list_part_cmp(const void* a, const void* b);
|
||||||
bool set_up_default_partitions(handler *file, HA_CREATE_INFO *info,
|
bool set_up_default_partitions(handler *file, HA_CREATE_INFO *info,
|
||||||
|
@ -1468,7 +1468,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
|||||||
show_table_options,
|
show_table_options,
|
||||||
NULL, NULL))))
|
NULL, NULL))))
|
||||||
{
|
{
|
||||||
packet->append(STRING_WITH_LEN("\n/*!50100"));
|
table->part_info->set_show_version_string(packet);
|
||||||
packet->append(part_syntax, part_syntax_len);
|
packet->append(part_syntax, part_syntax_len);
|
||||||
packet->append(STRING_WITH_LEN(" */"));
|
packet->append(STRING_WITH_LEN(" */"));
|
||||||
my_free(part_syntax, MYF(0));
|
my_free(part_syntax, MYF(0));
|
||||||
|
122
sql/sql_yacc.yy
122
sql/sql_yacc.yy
@ -763,10 +763,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
|
|
||||||
%pure_parser /* We have threads */
|
%pure_parser /* We have threads */
|
||||||
/*
|
/*
|
||||||
Currently there are 173 shift/reduce conflicts.
|
Currently there are 172 shift/reduce conflicts.
|
||||||
We should not introduce new conflicts any more.
|
We should not introduce new conflicts any more.
|
||||||
*/
|
*/
|
||||||
%expect 173
|
%expect 172
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Comments for TOKENS.
|
Comments for TOKENS.
|
||||||
@ -7151,50 +7151,63 @@ select_option_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
select_option:
|
select_option:
|
||||||
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
|
query_expression_option
|
||||||
| HIGH_PRIORITY
|
|
||||||
{
|
|
||||||
if (check_simple_select())
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
Lex->lock_option= TL_READ_HIGH_PRIORITY;
|
|
||||||
Lex->current_select->lock_option= TL_READ_HIGH_PRIORITY;
|
|
||||||
}
|
|
||||||
| DISTINCT { Select->options|= SELECT_DISTINCT; }
|
|
||||||
| SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; }
|
|
||||||
| SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; }
|
|
||||||
| SQL_BUFFER_RESULT
|
|
||||||
{
|
|
||||||
if (check_simple_select())
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
Select->options|= OPTION_BUFFER_RESULT;
|
|
||||||
}
|
|
||||||
| SQL_CALC_FOUND_ROWS
|
|
||||||
{
|
|
||||||
if (check_simple_select())
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
Select->options|= OPTION_FOUND_ROWS;
|
|
||||||
}
|
|
||||||
| SQL_NO_CACHE_SYM
|
| SQL_NO_CACHE_SYM
|
||||||
{
|
{
|
||||||
Lex->safe_to_cache_query=0;
|
/*
|
||||||
Lex->select_lex.options&= ~OPTION_TO_QUERY_CACHE;
|
Allow this flag only on the first top-level SELECT statement, if
|
||||||
Lex->select_lex.sql_cache= SELECT_LEX::SQL_NO_CACHE;
|
SQL_CACHE wasn't specified, and only once per query.
|
||||||
|
*/
|
||||||
|
if (Lex->current_select != &Lex->select_lex)
|
||||||
|
{
|
||||||
|
my_error(ER_CANT_USE_OPTION_HERE, MYF(0), "SQL_NO_CACHE");
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
}
|
||||||
|
else if (Lex->select_lex.sql_cache == SELECT_LEX::SQL_CACHE)
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_USAGE, MYF(0), "SQL_CACHE", "SQL_NO_CACHE");
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
}
|
||||||
|
else if (Lex->select_lex.sql_cache == SELECT_LEX::SQL_NO_CACHE)
|
||||||
|
{
|
||||||
|
my_error(ER_DUP_ARGUMENT, MYF(0), "SQL_NO_CACHE");
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Lex->safe_to_cache_query=0;
|
||||||
|
Lex->select_lex.options&= ~OPTION_TO_QUERY_CACHE;
|
||||||
|
Lex->select_lex.sql_cache= SELECT_LEX::SQL_NO_CACHE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
| SQL_CACHE_SYM
|
| SQL_CACHE_SYM
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Honor this flag only if SQL_NO_CACHE wasn't specified AND
|
Allow this flag only on the first top-level SELECT statement, if
|
||||||
we are parsing the outermost SELECT in the query.
|
SQL_NO_CACHE wasn't specified, and only once per query.
|
||||||
*/
|
*/
|
||||||
if (Lex->select_lex.sql_cache != SELECT_LEX::SQL_NO_CACHE &&
|
if (Lex->current_select != &Lex->select_lex)
|
||||||
Lex->current_select == &Lex->select_lex)
|
{
|
||||||
|
my_error(ER_CANT_USE_OPTION_HERE, MYF(0), "SQL_CACHE");
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
}
|
||||||
|
else if (Lex->select_lex.sql_cache == SELECT_LEX::SQL_NO_CACHE)
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_USAGE, MYF(0), "SQL_NO_CACHE", "SQL_CACHE");
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
}
|
||||||
|
else if (Lex->select_lex.sql_cache == SELECT_LEX::SQL_CACHE)
|
||||||
|
{
|
||||||
|
my_error(ER_DUP_ARGUMENT, MYF(0), "SQL_CACHE");
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
Lex->safe_to_cache_query=1;
|
Lex->safe_to_cache_query=1;
|
||||||
Lex->select_lex.options|= OPTION_TO_QUERY_CACHE;
|
Lex->select_lex.options|= OPTION_TO_QUERY_CACHE;
|
||||||
Lex->select_lex.sql_cache= SELECT_LEX::SQL_CACHE;
|
Lex->select_lex.sql_cache= SELECT_LEX::SQL_CACHE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| ALL { Select->options|= SELECT_ALL; }
|
|
||||||
;
|
;
|
||||||
|
|
||||||
select_lock_type:
|
select_lock_type:
|
||||||
@ -9266,7 +9279,7 @@ select_part2_derived:
|
|||||||
mysql_init_select(lex);
|
mysql_init_select(lex);
|
||||||
lex->current_select->parsing_place= SELECT_LIST;
|
lex->current_select->parsing_place= SELECT_LIST;
|
||||||
}
|
}
|
||||||
select_options select_item_list
|
opt_query_expression_options select_item_list
|
||||||
{
|
{
|
||||||
Select->parsing_place= NO_MATTER;
|
Select->parsing_place= NO_MATTER;
|
||||||
}
|
}
|
||||||
@ -13614,6 +13627,43 @@ subselect_end:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
opt_query_expression_options:
|
||||||
|
/* empty */
|
||||||
|
| query_expression_option_list
|
||||||
|
;
|
||||||
|
|
||||||
|
query_expression_option_list:
|
||||||
|
query_expression_option_list query_expression_option
|
||||||
|
| query_expression_option
|
||||||
|
;
|
||||||
|
|
||||||
|
query_expression_option:
|
||||||
|
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
|
||||||
|
| HIGH_PRIORITY
|
||||||
|
{
|
||||||
|
if (check_simple_select())
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
Lex->lock_option= TL_READ_HIGH_PRIORITY;
|
||||||
|
Lex->current_select->lock_option= TL_READ_HIGH_PRIORITY;
|
||||||
|
}
|
||||||
|
| DISTINCT { Select->options|= SELECT_DISTINCT; }
|
||||||
|
| SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; }
|
||||||
|
| SQL_BIG_RESULT { Select->options|= SELECT_BIG_RESULT; }
|
||||||
|
| SQL_BUFFER_RESULT
|
||||||
|
{
|
||||||
|
if (check_simple_select())
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
Select->options|= OPTION_BUFFER_RESULT;
|
||||||
|
}
|
||||||
|
| SQL_CALC_FOUND_ROWS
|
||||||
|
{
|
||||||
|
if (check_simple_select())
|
||||||
|
MYSQL_YYABORT;
|
||||||
|
Select->options|= OPTION_FOUND_ROWS;
|
||||||
|
}
|
||||||
|
| ALL { Select->options|= SELECT_ALL; }
|
||||||
|
;
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
||||||
CREATE VIEW | TRIGGER | PROCEDURE statements.
|
CREATE VIEW | TRIGGER | PROCEDURE statements.
|
||||||
|
@ -77,9 +77,12 @@ libarchive_a_DEPENDENCIES = probes_mysql.o dtrace_files dtrace_providers
|
|||||||
ha_archive_la_LIBADD = probes_sh_mysql.o
|
ha_archive_la_LIBADD = probes_sh_mysql.o
|
||||||
ha_archive_la_DEPENDENCIES = probes_sh_mysql.o dtrace_shared_files dtrace_providers
|
ha_archive_la_DEPENDENCIES = probes_sh_mysql.o dtrace_shared_files dtrace_providers
|
||||||
|
|
||||||
CLEANFILES = $(DTRACEPROVIDER) dtrace_files dtrace_providers dtrace_shared_files
|
CLEANFILES = $(DTRACEPROVIDER) dtrace_files dtrace_providers dtrace_shared_files dtrace_sources
|
||||||
DTRACEFILES = libarchive_a-ha_archive.o
|
DTRACEFILES = libarchive_a-ha_archive.o
|
||||||
DTRACESHAREDFILES = .libs/ha_archive_la-ha_archive.o
|
DTRACESHAREDFILES = .libs/ha_archive_la-ha_archive.o
|
||||||
|
# Hack: We "depend" on ".libs/" but have no rule for it,
|
||||||
|
# but it is created as a byproduct of the ".lo"
|
||||||
|
DTRACESHAREDDEPEND = ha_archive_la-ha_archive.lo
|
||||||
DTRACEPROVIDER = probes_mysql.d
|
DTRACEPROVIDER = probes_mysql.d
|
||||||
|
|
||||||
dtrace_files:
|
dtrace_files:
|
||||||
@ -93,7 +96,7 @@ probes_mysql.d:
|
|||||||
$(CP) $(top_srcdir)/include/probes_mysql.d.base probes_mysql.d
|
$(CP) $(top_srcdir)/include/probes_mysql.d.base probes_mysql.d
|
||||||
echo timestamp > dtrace_sources
|
echo timestamp > dtrace_sources
|
||||||
|
|
||||||
probes_sh_mysql.o: $(DTRACEPROVIDER) $(DTRACESHAREDFILES)
|
probes_sh_mysql.o: $(DTRACEPROVIDER) $(DTRACESHAREDDEPEND)
|
||||||
$(DTRACE) $(DTRACEFLAGS) -G -s $(DTRACEPROVIDER) $(DTRACESHAREDFILES) -o $@
|
$(DTRACE) $(DTRACEFLAGS) -G -s $(DTRACEPROVIDER) $(DTRACESHAREDFILES) -o $@
|
||||||
|
|
||||||
probes_mysql.o: $(DTRACEPROVIDER) $(DTRACEFILES)
|
probes_mysql.o: $(DTRACEPROVIDER) $(DTRACEFILES)
|
||||||
|
@ -164,10 +164,10 @@ int32 initCharsetSupport()
|
|||||||
}
|
}
|
||||||
|
|
||||||
VOID(pthread_mutex_init(&textDescMapHashMutex,MY_MUTEX_INIT_FAST));
|
VOID(pthread_mutex_init(&textDescMapHashMutex,MY_MUTEX_INIT_FAST));
|
||||||
hash_init(&textDescMapHash, &my_charset_bin, 10, offsetof(TextDescMap, hashKey), sizeof(TextDescMap::hashKey), 0, 0, HASH_UNIQUE);
|
my_hash_init(&textDescMapHash, &my_charset_bin, 10, offsetof(TextDescMap, hashKey), sizeof(TextDescMap::hashKey), 0, 0, HASH_UNIQUE);
|
||||||
|
|
||||||
VOID(pthread_mutex_init(&iconvMapHashMutex,MY_MUTEX_INIT_FAST));
|
VOID(pthread_mutex_init(&iconvMapHashMutex,MY_MUTEX_INIT_FAST));
|
||||||
hash_init(&iconvMapHash, &my_charset_bin, 10, offsetof(IconvMap, hashKey), sizeof(IconvMap::hashKey), 0, 0, HASH_UNIQUE);
|
my_hash_init(&iconvMapHash, &my_charset_bin, 10, offsetof(IconvMap, hashKey), sizeof(IconvMap::hashKey), 0, 0, HASH_UNIQUE);
|
||||||
|
|
||||||
init_alloc_root(&textDescMapMemroot, 2048, 0);
|
init_alloc_root(&textDescMapMemroot, 2048, 0);
|
||||||
init_alloc_root(&iconvMapMemroot, 256, 0);
|
init_alloc_root(&iconvMapMemroot, 256, 0);
|
||||||
@ -191,9 +191,9 @@ void doneCharsetSupport()
|
|||||||
free_root(&iconvMapMemroot, 0);
|
free_root(&iconvMapMemroot, 0);
|
||||||
|
|
||||||
pthread_mutex_destroy(&textDescMapHashMutex);
|
pthread_mutex_destroy(&textDescMapHashMutex);
|
||||||
hash_free(&textDescMapHash);
|
my_hash_free(&textDescMapHash);
|
||||||
pthread_mutex_destroy(&iconvMapHashMutex);
|
pthread_mutex_destroy(&iconvMapHashMutex);
|
||||||
hash_free(&iconvMapHash);
|
my_hash_free(&iconvMapHash);
|
||||||
free_aligned(QlgCvtTextDescToDesc_sym);
|
free_aligned(QlgCvtTextDescToDesc_sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,7 +415,7 @@ static int32 convertTextDesc(const int32 inType, const int32 outType, const char
|
|||||||
memcpy(hashKey.inDesc, inDescOverride, len);
|
memcpy(hashKey.inDesc, inDescOverride, len);
|
||||||
memset(hashKey.inDesc+len, 0, sizeof(hashKey.inDesc) - len);
|
memset(hashKey.inDesc+len, 0, sizeof(hashKey.inDesc) - len);
|
||||||
|
|
||||||
if (!(mapping=(TextDescMap *) hash_search(&textDescMapHash,
|
if (!(mapping=(TextDescMap *) my_hash_search(&textDescMapHash,
|
||||||
(const uchar*)&hashKey,
|
(const uchar*)&hashKey,
|
||||||
sizeof(hashKey))))
|
sizeof(hashKey))))
|
||||||
{
|
{
|
||||||
@ -748,7 +748,7 @@ int32 getConversion(enum_conversionDirection direction, const CHARSET_INFO* cs,
|
|||||||
|
|
||||||
/* Look for the conversion in the cache and add it if it is not there. */
|
/* Look for the conversion in the cache and add it if it is not there. */
|
||||||
IconvMap *mapping;
|
IconvMap *mapping;
|
||||||
if (!(mapping= (IconvMap *) hash_search(&iconvMapHash,
|
if (!(mapping= (IconvMap *) my_hash_search(&iconvMapHash,
|
||||||
(const uchar*)&hashKey,
|
(const uchar*)&hashKey,
|
||||||
sizeof(hashKey))))
|
sizeof(hashKey))))
|
||||||
{
|
{
|
||||||
|
@ -102,7 +102,7 @@ int ha_ibmdb2i::buildDB2ConstraintString(LEX* lex,
|
|||||||
Foreign_key* fk = (Foreign_key*)curKey;
|
Foreign_key* fk = (Foreign_key*)curKey;
|
||||||
|
|
||||||
char db2LibName[MAX_DB2_SCHEMANAME_LENGTH+1];
|
char db2LibName[MAX_DB2_SCHEMANAME_LENGTH+1];
|
||||||
if (fk->name)
|
if (fk->name.str)
|
||||||
{
|
{
|
||||||
char db2FKName[MAX_DB2_FILENAME_LENGTH+1];
|
char db2FKName[MAX_DB2_FILENAME_LENGTH+1];
|
||||||
appendHere.append(STRING_WITH_LEN("CONSTRAINT "));
|
appendHere.append(STRING_WITH_LEN("CONSTRAINT "));
|
||||||
@ -120,7 +120,7 @@ int ha_ibmdb2i::buildDB2ConstraintString(LEX* lex,
|
|||||||
|
|
||||||
appendHere.append('.');
|
appendHere.append('.');
|
||||||
|
|
||||||
convertMySQLNameToDB2Name(fk->name, db2FKName, sizeof(db2FKName));
|
convertMySQLNameToDB2Name(fk->name.str, db2FKName, sizeof(db2FKName));
|
||||||
appendHere.append(db2FKName);
|
appendHere.append(db2FKName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ int ha_ibmdb2i::buildDB2ConstraintString(LEX* lex,
|
|||||||
}
|
}
|
||||||
firstTime = false;
|
firstTime = false;
|
||||||
|
|
||||||
convertMySQLNameToDB2Name(curColumn->field_name, colName, sizeof(colName));
|
convertMySQLNameToDB2Name(curColumn->field_name.str, colName, sizeof(colName));
|
||||||
appendHere.append(colName);
|
appendHere.append(colName);
|
||||||
|
|
||||||
// DB2 requires that the sort sequence on the child table match the parent table's
|
// DB2 requires that the sort sequence on the child table match the parent table's
|
||||||
@ -148,7 +148,7 @@ int ha_ibmdb2i::buildDB2ConstraintString(LEX* lex,
|
|||||||
Field** field = fields;
|
Field** field = fields;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (strcmp((*field)->field_name, curColumn->field_name) == 0)
|
if (strcmp((*field)->field_name, curColumn->field_name.str) == 0)
|
||||||
{
|
{
|
||||||
int rc = updateAssociatedSortSequence((*field)->charset(),
|
int rc = updateAssociatedSortSequence((*field)->charset(),
|
||||||
fileSortSequenceType,
|
fileSortSequenceType,
|
||||||
@ -199,7 +199,7 @@ int ha_ibmdb2i::buildDB2ConstraintString(LEX* lex,
|
|||||||
}
|
}
|
||||||
firstTime = false;
|
firstTime = false;
|
||||||
|
|
||||||
convertMySQLNameToDB2Name(curRef->field_name, colName, sizeof(colName));
|
convertMySQLNameToDB2Name(curRef->field_name.str, colName, sizeof(colName));
|
||||||
appendHere.append(colName);
|
appendHere.append(colName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,8 +284,8 @@ static int ibmdb2i_init_func(void *p)
|
|||||||
was_ILE_inited = false;
|
was_ILE_inited = false;
|
||||||
ibmdb2i_hton= (handlerton *)p;
|
ibmdb2i_hton= (handlerton *)p;
|
||||||
VOID(pthread_mutex_init(&ibmdb2i_mutex,MY_MUTEX_INIT_FAST));
|
VOID(pthread_mutex_init(&ibmdb2i_mutex,MY_MUTEX_INIT_FAST));
|
||||||
(void) hash_init(&ibmdb2i_open_tables,table_alias_charset,32,0,0,
|
(void) my_hash_init(&ibmdb2i_open_tables,table_alias_charset,32,0,0,
|
||||||
(hash_get_key) ibmdb2i_get_key,0,0);
|
(my_hash_get_key) ibmdb2i_get_key,0,0);
|
||||||
|
|
||||||
ibmdb2i_hton->state= SHOW_OPTION_YES;
|
ibmdb2i_hton->state= SHOW_OPTION_YES;
|
||||||
ibmdb2i_hton->create= ibmdb2i_create_handler;
|
ibmdb2i_hton->create= ibmdb2i_create_handler;
|
||||||
@ -340,7 +340,7 @@ static int ibmdb2i_done_func(void *p)
|
|||||||
|
|
||||||
doneCharsetSupport();
|
doneCharsetSupport();
|
||||||
|
|
||||||
hash_free(&ibmdb2i_open_tables);
|
my_hash_free(&ibmdb2i_open_tables);
|
||||||
pthread_mutex_destroy(&ibmdb2i_mutex);
|
pthread_mutex_destroy(&ibmdb2i_mutex);
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
@ -356,7 +356,7 @@ IBMDB2I_SHARE *ha_ibmdb2i::get_share(const char *table_name, TABLE *table)
|
|||||||
pthread_mutex_lock(&ibmdb2i_mutex);
|
pthread_mutex_lock(&ibmdb2i_mutex);
|
||||||
length=(uint) strlen(table_name);
|
length=(uint) strlen(table_name);
|
||||||
|
|
||||||
if (!(share=(IBMDB2I_SHARE*) hash_search(&ibmdb2i_open_tables,
|
if (!(share=(IBMDB2I_SHARE*) my_hash_search(&ibmdb2i_open_tables,
|
||||||
(uchar*)table_name,
|
(uchar*)table_name,
|
||||||
length)))
|
length)))
|
||||||
{
|
{
|
||||||
@ -387,7 +387,7 @@ IBMDB2I_SHARE *ha_ibmdb2i::get_share(const char *table_name, TABLE *table)
|
|||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
delete share->db2Table;
|
delete share->db2Table;
|
||||||
hash_delete(&ibmdb2i_open_tables, (uchar*) share);
|
my_hash_delete(&ibmdb2i_open_tables, (uchar*) share);
|
||||||
thr_lock_delete(&share->lock);
|
thr_lock_delete(&share->lock);
|
||||||
my_errno = rc;
|
my_errno = rc;
|
||||||
goto error;
|
goto error;
|
||||||
@ -420,7 +420,7 @@ int ha_ibmdb2i::free_share(IBMDB2I_SHARE *share)
|
|||||||
delete share->db2Table;
|
delete share->db2Table;
|
||||||
db2Table = NULL;
|
db2Table = NULL;
|
||||||
|
|
||||||
hash_delete(&ibmdb2i_open_tables, (uchar*) share);
|
my_hash_delete(&ibmdb2i_open_tables, (uchar*) share);
|
||||||
thr_lock_delete(&share->lock);
|
thr_lock_delete(&share->lock);
|
||||||
pthread_mutex_destroy(&share->mutex);
|
pthread_mutex_destroy(&share->mutex);
|
||||||
my_free(share, MYF(0));
|
my_free(share, MYF(0));
|
||||||
|
@ -15,13 +15,6 @@
|
|||||||
|
|
||||||
# This is the CMakeLists for InnoDB Plugin
|
# This is the CMakeLists for InnoDB Plugin
|
||||||
|
|
||||||
|
|
||||||
# TODO: remove the two FLAGS_DEBUG settings when merging into
|
|
||||||
# 6.0-based trees, like is already the case for other engines in
|
|
||||||
# those trees.
|
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
|
||||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
|
||||||
|
|
||||||
# Starting at 5.1.38, MySQL CMake files are simplified. But the plugin
|
# Starting at 5.1.38, MySQL CMake files are simplified. But the plugin
|
||||||
# CMakeLists.txt still needs to work with previous versions of MySQL.
|
# CMakeLists.txt still needs to work with previous versions of MySQL.
|
||||||
IF (MYSQL_VERSION_ID GREATER "50137")
|
IF (MYSQL_VERSION_ID GREATER "50137")
|
||||||
@ -93,5 +86,10 @@ IF (MYSQL_VERSION_ID GREATER "50137")
|
|||||||
SET_TARGET_PROPERTIES(ha_innobase PROPERTIES OUTPUT_NAME ha_innodb)
|
SET_TARGET_PROPERTIES(ha_innobase PROPERTIES OUTPUT_NAME ha_innodb)
|
||||||
ENDIF(LIB_LOCATION)
|
ENDIF(LIB_LOCATION)
|
||||||
ELSE (MYSQL_VERSION_ID GREATER "50137")
|
ELSE (MYSQL_VERSION_ID GREATER "50137")
|
||||||
MYSQL_STORAGE_ENGINE(INNODB_PLUGIN)
|
IF (NOT SOURCE_SUBLIBS)
|
||||||
|
ADD_DEFINITIONS(-D_WIN32 -DMYSQL_SERVER)
|
||||||
|
ADD_LIBRARY(innobase STATIC ${INNOBASE_SOURCES})
|
||||||
|
# Require mysqld_error.h, which is built as part of the GenError
|
||||||
|
ADD_DEPENDENCIES(innobase GenError)
|
||||||
|
ENDIF (NOT SOURCE_SUBLIBS)
|
||||||
ENDIF (MYSQL_VERSION_ID GREATER "50137")
|
ENDIF (MYSQL_VERSION_ID GREATER "50137")
|
||||||
|
@ -1502,11 +1502,11 @@ my_bool _mi_memmap_file(MI_INFO *info)
|
|||||||
|
|
||||||
if (myisam_mmap_size != SIZE_T_MAX)
|
if (myisam_mmap_size != SIZE_T_MAX)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_lock(&THR_LOCK_myisam_mmap);
|
||||||
eom= data_file_length > myisam_mmap_size - myisam_mmap_used - MEMMAP_EXTRA_MARGIN;
|
eom= data_file_length > myisam_mmap_size - myisam_mmap_used - MEMMAP_EXTRA_MARGIN;
|
||||||
if (!eom)
|
if (!eom)
|
||||||
myisam_mmap_used+= data_file_length + MEMMAP_EXTRA_MARGIN;
|
myisam_mmap_used+= data_file_length + MEMMAP_EXTRA_MARGIN;
|
||||||
pthread_mutex_unlock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_unlock(&THR_LOCK_myisam_mmap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
eom= data_file_length > myisam_mmap_size - MEMMAP_EXTRA_MARGIN;
|
eom= data_file_length > myisam_mmap_size - MEMMAP_EXTRA_MARGIN;
|
||||||
@ -1522,9 +1522,9 @@ my_bool _mi_memmap_file(MI_INFO *info)
|
|||||||
DBUG_PRINT("warning",("File isn't extended for memmap"));
|
DBUG_PRINT("warning",("File isn't extended for memmap"));
|
||||||
if (myisam_mmap_size != SIZE_T_MAX)
|
if (myisam_mmap_size != SIZE_T_MAX)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_lock(&THR_LOCK_myisam_mmap);
|
||||||
myisam_mmap_used-= data_file_length + MEMMAP_EXTRA_MARGIN;
|
myisam_mmap_used-= data_file_length + MEMMAP_EXTRA_MARGIN;
|
||||||
pthread_mutex_unlock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_unlock(&THR_LOCK_myisam_mmap);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
@ -1534,9 +1534,9 @@ my_bool _mi_memmap_file(MI_INFO *info)
|
|||||||
{
|
{
|
||||||
if (myisam_mmap_size != SIZE_T_MAX)
|
if (myisam_mmap_size != SIZE_T_MAX)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_lock(&THR_LOCK_myisam_mmap);
|
||||||
myisam_mmap_used-= data_file_length + MEMMAP_EXTRA_MARGIN;
|
myisam_mmap_used-= data_file_length + MEMMAP_EXTRA_MARGIN;
|
||||||
pthread_mutex_unlock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_unlock(&THR_LOCK_myisam_mmap);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
@ -1555,9 +1555,9 @@ void _mi_unmap_file(MI_INFO *info)
|
|||||||
|
|
||||||
if (myisam_mmap_size != SIZE_T_MAX)
|
if (myisam_mmap_size != SIZE_T_MAX)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_lock(&THR_LOCK_myisam_mmap);
|
||||||
myisam_mmap_used-= info->s->mmaped_length + MEMMAP_EXTRA_MARGIN;
|
myisam_mmap_used-= info->s->mmaped_length + MEMMAP_EXTRA_MARGIN;
|
||||||
pthread_mutex_unlock(&THR_LOCK_myisam_mmap);
|
mysql_mutex_unlock(&THR_LOCK_myisam_mmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,6 @@ my_off_t myisam_max_temp_length= MAX_FILE_SIZE;
|
|||||||
ulong myisam_bulk_insert_tree_size=8192*1024;
|
ulong myisam_bulk_insert_tree_size=8192*1024;
|
||||||
ulong myisam_data_pointer_size=4;
|
ulong myisam_data_pointer_size=4;
|
||||||
ulonglong myisam_mmap_size= SIZE_T_MAX, myisam_mmap_used= 0;
|
ulonglong myisam_mmap_size= SIZE_T_MAX, myisam_mmap_used= 0;
|
||||||
pthread_mutex_t THR_LOCK_myisam_mmap;
|
|
||||||
|
|
||||||
static int always_valid(const char *filename __attribute__((unused)))
|
static int always_valid(const char *filename __attribute__((unused)))
|
||||||
{
|
{
|
||||||
|
@ -303,7 +303,7 @@ case "$mode" in
|
|||||||
then
|
then
|
||||||
mysqld_pid=`cat "$mysqld_pid_file_path"`
|
mysqld_pid=`cat "$mysqld_pid_file_path"`
|
||||||
|
|
||||||
if (kill -9 $mysqld_pid 2>/dev/null)
|
if (kill -0 $mysqld_pid 2>/dev/null)
|
||||||
then
|
then
|
||||||
echo $echo_n "Shutting down MySQL"
|
echo $echo_n "Shutting down MySQL"
|
||||||
kill $mysqld_pid
|
kill $mysqld_pid
|
||||||
|
@ -43,6 +43,12 @@
|
|||||||
%{?_with_cluster:%define CLUSTER_BUILD 1}
|
%{?_with_cluster:%define CLUSTER_BUILD 1}
|
||||||
%{!?_with_cluster:%define CLUSTER_BUILD 0}
|
%{!?_with_cluster:%define CLUSTER_BUILD 0}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# support optional "tcmalloc" stuff (experimental)
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
%{?malloc_lib_target:%define WITH_TCMALLOC 1}
|
||||||
|
%{!?malloc_lib_target:%define WITH_TCMALLOC 0}
|
||||||
|
|
||||||
%if %{STATIC_BUILD}
|
%if %{STATIC_BUILD}
|
||||||
%define release 0
|
%define release 0
|
||||||
%else
|
%else
|
||||||
@ -448,7 +454,7 @@ $MBD/libtool --mode=execute install -m 755 \
|
|||||||
$RPM_BUILD_DIR/mysql-%{mysql_version}/mysql-debug-%{mysql_version}/sql/mysqld \
|
$RPM_BUILD_DIR/mysql-%{mysql_version}/mysql-debug-%{mysql_version}/sql/mysqld \
|
||||||
$RBR%{_sbindir}/mysqld-debug
|
$RBR%{_sbindir}/mysqld-debug
|
||||||
|
|
||||||
%if %{?malloc_lib_target:1}%{!?malloc_lib_target:0}
|
%if %{WITH_TCMALLOC}
|
||||||
# Even though this is a shared library, put it under /usr/lib/mysql, so it
|
# Even though this is a shared library, put it under /usr/lib/mysql, so it
|
||||||
# doesn't conflict with possible shared lib by the same name in /usr/lib. See
|
# doesn't conflict with possible shared lib by the same name in /usr/lib. See
|
||||||
# `mysql_config --variable=pkglibdir` and mysqld_safe for how this is used.
|
# `mysql_config --variable=pkglibdir` and mysqld_safe for how this is used.
|
||||||
@ -709,12 +715,10 @@ fi
|
|||||||
%attr(755, root, root) %{_bindir}/resolveip
|
%attr(755, root, root) %{_bindir}/resolveip
|
||||||
|
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/ha_example.so*
|
%attr(755, root, root) %{_libdir}/mysql/plugin/ha_example.so*
|
||||||
%if %{WITHOUT_INNODB_PLUGIN}
|
%attr(755, root, root) %{_libdir}/mysql/plugin/libsemisync_master.so*
|
||||||
%else
|
%attr(755, root, root) %{_libdir}/mysql/plugin/libsemisync_slave.so*
|
||||||
%attr(755, root, root) %{_libdir}/mysql/plugin/ha_innodb_plugin.so*
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{?malloc_lib_target:1}%{!?malloc_lib_target:0}
|
%if %{WITH_TCMALLOC}
|
||||||
%attr(755, root, root) %{_libdir}/mysql/%{malloc_lib_target}
|
%attr(755, root, root) %{_libdir}/mysql/%{malloc_lib_target}
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -833,6 +837,7 @@ fi
|
|||||||
%{_libdir}/mysql/libmysqlclient.la
|
%{_libdir}/mysql/libmysqlclient.la
|
||||||
%{_libdir}/mysql/libmysqlclient_r.a
|
%{_libdir}/mysql/libmysqlclient_r.a
|
||||||
%{_libdir}/mysql/libmysqlclient_r.la
|
%{_libdir}/mysql/libmysqlclient_r.la
|
||||||
|
%{_libdir}/mysql/libmysqlservices.a
|
||||||
%{_libdir}/mysql/libmystrings.a
|
%{_libdir}/mysql/libmystrings.a
|
||||||
%{_libdir}/mysql/libmysys.a
|
%{_libdir}/mysql/libmysys.a
|
||||||
%if %{CLUSTER_BUILD}
|
%if %{CLUSTER_BUILD}
|
||||||
@ -844,11 +849,10 @@ fi
|
|||||||
%{_libdir}/mysql/libz.la
|
%{_libdir}/mysql/libz.la
|
||||||
%{_libdir}/mysql/plugin/ha_example.a
|
%{_libdir}/mysql/plugin/ha_example.a
|
||||||
%{_libdir}/mysql/plugin/ha_example.la
|
%{_libdir}/mysql/plugin/ha_example.la
|
||||||
%if %{WITHOUT_INNODB_PLUGIN}
|
%{_libdir}/mysql/plugin/libsemisync_master.a
|
||||||
%else
|
%{_libdir}/mysql/plugin/libsemisync_master.la
|
||||||
%{_libdir}/mysql/plugin/ha_innodb_plugin.a
|
%{_libdir}/mysql/plugin/libsemisync_slave.a
|
||||||
%{_libdir}/mysql/plugin/ha_innodb_plugin.la
|
%{_libdir}/mysql/plugin/libsemisync_slave.la
|
||||||
%endif
|
|
||||||
|
|
||||||
%files shared
|
%files shared
|
||||||
%defattr(-, root, root, 0755)
|
%defattr(-, root, root, 0755)
|
||||||
@ -878,6 +882,11 @@ fi
|
|||||||
# itself - note that they must be ordered by date (important when
|
# itself - note that they must be ordered by date (important when
|
||||||
# merging BK trees)
|
# merging BK trees)
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Nov 16 2009 Joerg Bruehe <joerg.bruehe@sun.com>
|
||||||
|
|
||||||
|
- Fix some problems with the directives around "tcmalloc" (experimental),
|
||||||
|
remove erroneous traces of the InnoDB plugin (that is 5.1 only).
|
||||||
|
|
||||||
* Fri Oct 02 2009 Alexander Nozdrin <alexander.nozdrin@sun.com>
|
* Fri Oct 02 2009 Alexander Nozdrin <alexander.nozdrin@sun.com>
|
||||||
|
|
||||||
- "mysqlmanager" got removed from version 5.4, all references deleted.
|
- "mysqlmanager" got removed from version 5.4, all references deleted.
|
||||||
|
@ -19197,7 +19197,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_wl4166_3", test_wl4166_3 },
|
{ "test_wl4166_3", test_wl4166_3 },
|
||||||
{ "test_wl4166_4", test_wl4166_4 },
|
{ "test_wl4166_4", test_wl4166_4 },
|
||||||
{ "test_bug36004", test_bug36004 },
|
{ "test_bug36004", test_bug36004 },
|
||||||
{ "test_wl4435", test_wl4435 },
|
/* { "test_wl4435", test_wl4435 }, */
|
||||||
{ "test_wl4435_2", test_wl4435_2 },
|
{ "test_wl4435_2", test_wl4435_2 },
|
||||||
{ "test_bug38486", test_bug38486 },
|
{ "test_bug38486", test_bug38486 },
|
||||||
{ "test_bug33831", test_bug33831 },
|
{ "test_bug33831", test_bug33831 },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user