mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Manual merge of mysql-5.1-bugteam into mysql-trunk-merge.
This commit is contained in:
@ -48,5 +48,13 @@
|
||||
#define rw_unlock(A)
|
||||
#define rwlock_destroy(A)
|
||||
|
||||
typedef int my_pthread_once_t;
|
||||
#define MY_PTHREAD_ONCE_INIT 0
|
||||
#define MY_PTHREAD_ONCE_DONE 1
|
||||
|
||||
#define my_pthread_once(C,F) do { \
|
||||
if (*(C) != MY_PTHREAD_ONCE_DONE) { F(); *(C)= MY_PTHREAD_ONCE_DONE; } \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
#endif /* MY_NO_PTHREAD_INCLUDED */
|
||||
|
@ -68,6 +68,11 @@ typedef int pthread_mutexattr_t;
|
||||
#define pthread_handler_t EXTERNC void * __cdecl
|
||||
typedef void * (__cdecl *pthread_handler)(void *);
|
||||
|
||||
typedef volatile LONG my_pthread_once_t;
|
||||
#define MY_PTHREAD_ONCE_INIT 0
|
||||
#define MY_PTHREAD_ONCE_INPROGRESS 1
|
||||
#define MY_PTHREAD_ONCE_DONE 2
|
||||
|
||||
/*
|
||||
Struct and macros to be used in combination with the
|
||||
windows implementation of pthread_cond_timedwait
|
||||
@ -112,6 +117,7 @@ int pthread_attr_init(pthread_attr_t *connect_att);
|
||||
int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack);
|
||||
int pthread_attr_setprio(pthread_attr_t *connect_att,int priority);
|
||||
int pthread_attr_destroy(pthread_attr_t *connect_att);
|
||||
int my_pthread_once(my_pthread_once_t *once_control,void (*init_routine)(void));
|
||||
struct tm *localtime_r(const time_t *timep,struct tm *tmp);
|
||||
struct tm *gmtime_r(const time_t *timep,struct tm *tmp);
|
||||
|
||||
@ -190,6 +196,10 @@ extern int my_pthread_getprio(pthread_t thread_id);
|
||||
#define pthread_handler_t EXTERNC void *
|
||||
typedef void *(* pthread_handler)(void *);
|
||||
|
||||
#define my_pthread_once_t pthread_once_t
|
||||
#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INIT
|
||||
#define my_pthread_once(C,F) pthread_once(C,F)
|
||||
|
||||
/* Test first for RTS or FSU threads */
|
||||
|
||||
#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM)
|
||||
|
@ -978,7 +978,6 @@ extern my_bool resolve_collation(const char *cl_name,
|
||||
CHARSET_INFO *default_cl,
|
||||
CHARSET_INFO **cl);
|
||||
|
||||
extern void free_charsets(void);
|
||||
extern char *get_charsets_dir(char *buf);
|
||||
extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
|
||||
extern my_bool init_compiled_charsets(myf flags);
|
||||
|
@ -211,7 +211,6 @@ void STDCALL mysql_server_end()
|
||||
}
|
||||
else
|
||||
{
|
||||
free_charsets();
|
||||
mysql_thread_end();
|
||||
}
|
||||
|
||||
|
@ -21,14 +21,26 @@ connection slave;
|
||||
reset master;
|
||||
connection master;
|
||||
|
||||
# MTR is not case-sensitive.
|
||||
let $lower_stmt_head= load data;
|
||||
let $UPPER_STMT_HEAD= LOAD DATA;
|
||||
if (`SELECT '$lock_option' <> ''`)
|
||||
{
|
||||
#if $lock_option is null, an extra blank is added into the statement,
|
||||
#this will change the result of rpl_loaddata test case. so $lock_option
|
||||
#is set only when it is not null.
|
||||
let $lower_stmt_head= load data $lock_option;
|
||||
let $UPPER_STMT_HEAD= LOAD DATA $lock_option;
|
||||
}
|
||||
|
||||
select last_insert_id();
|
||||
create table t1(a int not null auto_increment, b int, primary key(a) );
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
# verify that LAST_INSERT_ID() is set by LOAD DATA INFILE
|
||||
select last_insert_id();
|
||||
|
||||
create temporary table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60));
|
||||
load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by '\n##\n' starting by '>' ignore 1 lines;
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata2.dat' into table t2 fields terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by '\n##\n' starting by '>' ignore 1 lines;
|
||||
|
||||
create table t3 (day date,id int(9),category enum('a','b','c'),name varchar(60));
|
||||
insert into t3 select * from t2;
|
||||
@ -56,7 +68,7 @@ sync_with_master;
|
||||
insert into t1 values(1,10);
|
||||
|
||||
connection master;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
@ -70,9 +82,11 @@ connection slave;
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
--query_vertical show slave status;
|
||||
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||
echo Last_SQL_Errno=$last_error;
|
||||
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
||||
echo Last_SQL_Error;
|
||||
echo $last_error;
|
||||
|
||||
# Trigger error again to test CHANGE MASTER
|
||||
|
||||
@ -80,7 +94,7 @@ connection master;
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# The SQL slave thread should be stopped now.
|
||||
@ -92,9 +106,11 @@ connection slave;
|
||||
stop slave;
|
||||
change master to master_user='test';
|
||||
change master to master_user='root';
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
--query_vertical show slave status;
|
||||
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||
echo Last_SQL_Errno=$last_error;
|
||||
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
||||
echo Last_SQL_Error;
|
||||
echo $last_error;
|
||||
|
||||
# Trigger error again to test RESET SLAVE
|
||||
|
||||
@ -105,7 +121,7 @@ connection master;
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# The SQL slave thread should be stopped now.
|
||||
@ -114,9 +130,11 @@ connection slave;
|
||||
# RESET SLAVE and see if error is cleared in SHOW SLAVE STATUS.
|
||||
stop slave;
|
||||
reset slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
--query_vertical show slave status;
|
||||
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||
echo Last_SQL_Errno=$last_error;
|
||||
let $last_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
||||
echo Last_SQL_Error;
|
||||
echo $last_error;
|
||||
|
||||
# Finally, see if logging is done ok on master for a failing LOAD DATA INFILE
|
||||
|
||||
@ -125,7 +143,7 @@ reset master;
|
||||
eval create table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60),
|
||||
unique(day)) engine=$engine_type; # no transactions
|
||||
--error ER_DUP_ENTRY
|
||||
load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||
'\n##\n' starting by '>' ignore 1 lines;
|
||||
select * from t2;
|
||||
@ -141,7 +159,7 @@ alter table t2 drop key day;
|
||||
connection master;
|
||||
delete from t2;
|
||||
--error ER_DUP_ENTRY
|
||||
load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
eval $lower_stmt_head infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||
'\n##\n' starting by '>' ignore 1 lines;
|
||||
connection slave;
|
||||
@ -154,7 +172,7 @@ drop table t1, t2;
|
||||
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
LOAD DATA INFILE "../../std_data/words.dat" INTO TABLE t1;
|
||||
eval $UPPER_STMT_HEAD INFILE "../../std_data/words.dat" INTO TABLE t1;
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
@ -182,17 +200,17 @@ DROP TABLE IF EXISTS t1;
|
||||
|
||||
-- echo ### assertion: works with cross-referenced database
|
||||
-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
-- eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE $db1.t1
|
||||
-- eval $UPPER_STMT_HEAD LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE $db1.t1
|
||||
|
||||
-- eval use $db1
|
||||
-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
-- echo ### assertion: works with fully qualified name on current database
|
||||
-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
-- eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE $db1.t1
|
||||
-- eval $UPPER_STMT_HEAD LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE $db1.t1
|
||||
|
||||
-- echo ### assertion: works without fully qualified name on current database
|
||||
-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
-- eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE t1
|
||||
-- eval $UPPER_STMT_HEAD LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE t1
|
||||
|
||||
-- echo ### create connection without default database
|
||||
-- echo ### connect (conn2,localhost,root,,*NO-ONE*);
|
||||
@ -200,7 +218,7 @@ connect (conn2,localhost,root,,*NO-ONE*);
|
||||
-- connection conn2
|
||||
-- echo ### assertion: works without stating the default database
|
||||
-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
-- eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE $db1.t1
|
||||
-- eval $UPPER_STMT_HEAD LOCAL INFILE '$MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE $db1.t1
|
||||
-- echo ### disconnect and switch back to master connection
|
||||
-- disconnect conn2
|
||||
-- connection master
|
||||
|
@ -116,6 +116,26 @@ select binary 'a a' > 'a', binary 'a \0' > 'a', binary 'a\0' > 'a';
|
||||
binary 'a a' > 'a' binary 'a \0' > 'a' binary 'a\0' > 'a'
|
||||
1 1 1
|
||||
SET CHARACTER SET koi8r;
|
||||
create table t1 (a varchar(2) character set ucs2 collate ucs2_bin, key(a));
|
||||
insert into t1 values ('A'),('A'),('B'),('C'),('D'),('A\t');
|
||||
insert into t1 values ('A\0'),('A\0'),('A\0'),('A\0'),('AZ');
|
||||
select hex(a) from t1 where a like 'A_' order by a;
|
||||
hex(a)
|
||||
00410000
|
||||
00410000
|
||||
00410000
|
||||
00410000
|
||||
00410009
|
||||
0041005A
|
||||
select hex(a) from t1 ignore key(a) where a like 'A_' order by a;
|
||||
hex(a)
|
||||
00410000
|
||||
00410000
|
||||
00410000
|
||||
00410000
|
||||
00410009
|
||||
0041005A
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (word VARCHAR(64) CHARACTER SET ucs2, word2 CHAR(64) CHARACTER SET ucs2);
|
||||
INSERT INTO t1 VALUES (_koi8r'<27>',_koi8r'<27>'), (X'2004',X'2004');
|
||||
SELECT hex(word) FROM t1 ORDER BY word;
|
||||
|
@ -560,6 +560,20 @@ MATCH (col) AGAINST('findme')
|
||||
DEALLOCATE PREPARE s;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #49250 : spatial btree index corruption and crash
|
||||
# Part two : fulltext syntax check
|
||||
#
|
||||
CREATE TABLE t1(col1 TEXT,
|
||||
FULLTEXT INDEX USING BTREE (col1));
|
||||
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 'USING BTREE (col1))' at line 2
|
||||
CREATE TABLE t2(col1 TEXT);
|
||||
CREATE FULLTEXT INDEX USING BTREE ON t2(col);
|
||||
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 'USING BTREE ON t2(col)' at line 1
|
||||
ALTER TABLE t2 ADD FULLTEXT INDEX USING BTREE (col1);
|
||||
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 'USING BTREE (col1)' at line 1
|
||||
DROP TABLE t2;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Bug #47930: MATCH IN BOOLEAN MODE returns too many results
|
||||
# inside subquery
|
||||
#
|
||||
|
@ -984,6 +984,19 @@ GEOMFROMTEXT(
|
||||
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #49250 : spatial btree index corruption and crash
|
||||
# Part one : spatial syntax check
|
||||
#
|
||||
CREATE TABLE t1(col1 MULTIPOLYGON NOT NULL,
|
||||
SPATIAL INDEX USING BTREE (col1));
|
||||
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 'USING BTREE (col1))' at line 2
|
||||
CREATE TABLE t2(col1 MULTIPOLYGON NOT NULL);
|
||||
CREATE SPATIAL INDEX USING BTREE ON t2(col);
|
||||
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 'USING BTREE ON t2(col)' at line 1
|
||||
ALTER TABLE t2 ADD SPATIAL INDEX USING BTREE (col1);
|
||||
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 'USING BTREE (col1)' at line 1
|
||||
DROP TABLE t2;
|
||||
End of 5.0 tests
|
||||
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
|
||||
create view v1 as select * from t1;
|
||||
|
@ -24,8 +24,8 @@ a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
b varchar(10),
|
||||
PRIMARY KEY (a)
|
||||
)
|
||||
PARTITION BY RANGE (to_days(a)) (
|
||||
PARTITION p1 VALUES LESS THAN (733407),
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a)) (
|
||||
PARTITION p1 VALUES LESS THAN (1199134800),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE
|
||||
);
|
||||
INSERT INTO t1 VALUES ('2007-07-30 17:35:48', 'p1');
|
||||
@ -37,7 +37,7 @@ a b
|
||||
2009-07-14 17:35:55 pmax
|
||||
2009-09-21 17:31:42 pmax
|
||||
ALTER TABLE t1 REORGANIZE PARTITION pmax INTO (
|
||||
PARTITION p3 VALUES LESS THAN (733969),
|
||||
PARTITION p3 VALUES LESS THAN (1247688000),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
@ -51,9 +51,9 @@ t1 CREATE TABLE `t1` (
|
||||
`b` varchar(10) DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (to_days(a))
|
||||
(PARTITION p1 VALUES LESS THAN (733407) ENGINE = MyISAM,
|
||||
PARTITION p3 VALUES LESS THAN (733969) ENGINE = MyISAM,
|
||||
/*!50100 PARTITION BY RANGE (UNIX_TIMESTAMP(a))
|
||||
(PARTITION p1 VALUES LESS THAN (1199134800) ENGINE = MyISAM,
|
||||
PARTITION p3 VALUES LESS THAN (1247688000) ENGINE = MyISAM,
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
|
||||
DROP TABLE t1;
|
||||
create table t1 (a int NOT NULL, b varchar(5) NOT NULL)
|
||||
|
@ -126,7 +126,7 @@ ERROR HY000: This partition function is not allowed
|
||||
create table t1 (col1 date)
|
||||
partition by range(unix_timestamp(col1))
|
||||
(partition p0 values less than (10), partition p1 values less than (30));
|
||||
ERROR HY000: This partition function is not allowed
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
create table t1 (col1 datetime)
|
||||
partition by range(week(col1))
|
||||
(partition p0 values less than (10), partition p1 values less than (30));
|
||||
|
@ -138,7 +138,7 @@ primary key(a,b))
|
||||
partition by hash (rand(a))
|
||||
partitions 2
|
||||
(partition x1, partition x2);
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')
|
||||
partitions 2
|
||||
(partition x1, partition x2)' at line 6
|
||||
CREATE TABLE t1 (
|
||||
@ -149,7 +149,7 @@ primary key(a,b))
|
||||
partition by range (rand(a))
|
||||
partitions 2
|
||||
(partition x1 values less than (0), partition x2 values less than (2));
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')
|
||||
partitions 2
|
||||
(partition x1 values less than (0), partition x2 values less than' at line 6
|
||||
CREATE TABLE t1 (
|
||||
@ -160,7 +160,7 @@ primary key(a,b))
|
||||
partition by list (rand(a))
|
||||
partitions 2
|
||||
(partition x1 values in (1), partition x2 values in (2));
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')
|
||||
partitions 2
|
||||
(partition x1 values in (1), partition x2 values in (2))' at line 6
|
||||
CREATE TABLE t1 (
|
||||
@ -275,7 +275,7 @@ c int not null,
|
||||
primary key (a,b))
|
||||
partition by key (a)
|
||||
subpartition by hash (rand(a+b));
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')' at line 7
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')' at line 7
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
@ -371,7 +371,7 @@ partition by range (3+4)
|
||||
partitions 2
|
||||
(partition x1 values less than (4) tablespace ts1,
|
||||
partition x2 values less than (8) tablespace ts2);
|
||||
ERROR HY000: Constant/Random expression in (sub)partitioning function is not allowed
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
@ -540,7 +540,7 @@ partition by list (3+4)
|
||||
partitions 2
|
||||
(partition x1 values in (4) tablespace ts1,
|
||||
partition x2 values in (8) tablespace ts2);
|
||||
ERROR HY000: Constant/Random expression in (sub)partitioning function is not allowed
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
@ -631,13 +631,13 @@ partition by range (ascii(v))
|
||||
ERROR HY000: This partition function is not allowed
|
||||
create table t1 (a int)
|
||||
partition by hash (rand(a));
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')' at line 2
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')' at line 2
|
||||
create table t1 (a int)
|
||||
partition by hash(CURTIME() + a);
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')' at line 2
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')' at line 2
|
||||
create table t1 (a int)
|
||||
partition by hash (NOW()+a);
|
||||
ERROR 42000: Constant/Random expression in (sub)partitioning function is not allowed near ')' at line 2
|
||||
ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ')' at line 2
|
||||
create table t1 (a int)
|
||||
partition by hash (extract(hour from convert_tz(a, '+00:00', '+00:00')));
|
||||
ERROR HY000: This partition function is not allowed
|
||||
@ -648,3 +648,295 @@ ERROR HY000: This partition function is not allowed
|
||||
create table t1 (a char(10))
|
||||
partition by hash (extractvalue(a,'a'));
|
||||
ERROR HY000: This partition function is not allowed
|
||||
#
|
||||
# Bug #42849: innodb crash with varying time_zone on partitioned
|
||||
# timestamp primary key
|
||||
#
|
||||
CREATE TABLE old (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: The PARTITION function returns the wrong type
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: The PARTITION function returns the wrong type
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a+0) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a+0) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a % 2) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a % 2) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (ABS(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (ABS(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (CEILING(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (CEILING(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (FLOOR(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (FLOOR(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (TO_DAYS(a)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TO_DAYS(a)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (DAYOFYEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (231),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DAYOFYEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (231),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (DAYOFMONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (19),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DAYOFMONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (19),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (DAYOFWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DAYOFWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (MONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (8),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (MONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (8),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (HOUR(a)) (
|
||||
PARTITION p VALUES LESS THAN (17),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (HOUR(a)) (
|
||||
PARTITION p VALUES LESS THAN (17),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (MINUTE(a)) (
|
||||
PARTITION p VALUES LESS THAN (55),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (MINUTE(a)) (
|
||||
PARTITION p VALUES LESS THAN (55),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (QUARTER(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (QUARTER(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (SECOND(a)) (
|
||||
PARTITION p VALUES LESS THAN (7),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (SECOND(a)) (
|
||||
PARTITION p VALUES LESS THAN (7),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEARWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (200833),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEARWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (200833),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (WEEKDAY(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (WEEKDAY(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (TIME_TO_SEC(a)) (
|
||||
PARTITION p VALUES LESS THAN (64507),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TIME_TO_SEC(a)) (
|
||||
PARTITION p VALUES LESS THAN (64507),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (EXTRACT(DAY FROM a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (EXTRACT(DAY FROM a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL, b TIMESTAMP NOT NULL, PRIMARY KEY(a,b))
|
||||
PARTITION BY RANGE (DATEDIFF(a, a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DATEDIFF(a, a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEAR(a + 0)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a + 0)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (TO_DAYS(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TO_DAYS(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEAR(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old ADD COLUMN b DATE;
|
||||
CREATE TABLE new (a TIMESTAMP, b DATE)
|
||||
PARTITION BY RANGE (YEAR(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP, b DATE)
|
||||
PARTITION BY RANGE (TO_DAYS(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TO_DAYS(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP, b date)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE new (a TIMESTAMP, b TIMESTAMP)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE old MODIFY b TIMESTAMP;
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
DROP TABLE old;
|
||||
End of 5.1 tests
|
||||
|
@ -4410,6 +4410,31 @@ WHERE a = 230;
|
||||
MAX(b) (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||
NULL 0
|
||||
DROP TABLE t1, st1, st2;
|
||||
#
|
||||
# Bug #48709: Assertion failed in sql_select.cc:11782:
|
||||
# int join_read_key(JOIN_TAB*)
|
||||
#
|
||||
CREATE TABLE t1 (pk int PRIMARY KEY, int_key int);
|
||||
INSERT INTO t1 VALUES (10,1), (14,1);
|
||||
CREATE TABLE t2 (pk int PRIMARY KEY, int_key int);
|
||||
INSERT INTO t2 VALUES (3,3), (5,NULL), (7,3);
|
||||
# should have eq_ref for t1
|
||||
EXPLAIN
|
||||
SELECT * FROM t2 outr
|
||||
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||
ORDER BY outr.pk;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
x x outr ALL x x x x x x
|
||||
x x t1 eq_ref x x x x x x
|
||||
x x t2 index x x x x x x
|
||||
# should not crash on debug binaries
|
||||
SELECT * FROM t2 outr
|
||||
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||
ORDER BY outr.pk;
|
||||
pk int_key
|
||||
3 3
|
||||
7 3
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests.
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
|
||||
|
@ -8,6 +8,13 @@
|
||||
</rules>
|
||||
</collation>
|
||||
|
||||
<collation name="utf8_hugeid_ci" id="2047000000">
|
||||
<rules>
|
||||
<reset>a</reset>
|
||||
<s>b</s>
|
||||
</rules>
|
||||
</collation>
|
||||
|
||||
<collation name="utf8_maxuserid_ci" id="2047">
|
||||
<rules>
|
||||
<reset>a</reset>
|
||||
|
@ -152,10 +152,16 @@ let $valsqlfunc = timestampdiff(YEAR,'2002-05-01','2001-01-01');
|
||||
let $coltype = datetime;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = unix_timestamp(col1);
|
||||
let $valsqlfunc = unix_timestamp ('2002-05-01');
|
||||
let $coltype = date;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
################################################################################
|
||||
# After the fix for bug #42849 the server behavior does not fit into this test's
|
||||
# architecture: for UNIX_TIMESTAMP() some of the queries in
|
||||
# suite/parts/inc/partition_blocked_sql_funcs.inc will fail with a different
|
||||
# error (ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR) and some will succeed where
|
||||
################################################################################
|
||||
#let $sqlfunc = unix_timestamp(col1);
|
||||
#let $valsqlfunc = unix_timestamp ('2002-05-01');
|
||||
#let $coltype = date;
|
||||
#--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = week(col1);
|
||||
let $valsqlfunc = week('2002-05-01');
|
||||
|
@ -33,42 +33,48 @@ select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a timestamp not null, primary key(a)) engine=$engine
|
||||
partition by range (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values less than (4),
|
||||
partition quarter2 values less than (7),
|
||||
partition quarter3 values less than (10),
|
||||
partition quarter4 values less than (13)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=12;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (date_add('1970-01-01 00:00:00',interval $count-1 month));
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
################################################################################
|
||||
# The following 2 tests are no longer valid after bug #42849 has been fixed:
|
||||
# it is not possible to use a timezone-dependent (such as month(timestamp_col)
|
||||
# or just a timestamp_col in a numeric context) anymore.
|
||||
################################################################################
|
||||
|
||||
eval create table t4 (a timestamp not null, primary key(a)) engine=$engine
|
||||
partition by list (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values in (0,1,2,3),
|
||||
partition quarter2 values in (4,5,6),
|
||||
partition quarter3 values in (7,8,9),
|
||||
partition quarter4 values in (10,11,12)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=12;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (date_add('1970-01-01 00:00:00',interval $count-1 month));
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select * from t4;
|
||||
drop table t4;
|
||||
# eval create table t3 (a timestamp not null, primary key(a)) engine=$engine
|
||||
# partition by range (month(a)) subpartition by key (a)
|
||||
# subpartitions 3 (
|
||||
# partition quarter1 values less than (4),
|
||||
# partition quarter2 values less than (7),
|
||||
# partition quarter3 values less than (10),
|
||||
# partition quarter4 values less than (13)
|
||||
# );
|
||||
# show create table t3;
|
||||
# let $count=12;
|
||||
# --echo $count inserts;
|
||||
# while ($count)
|
||||
# {
|
||||
# eval insert into t3 values (date_add('1970-01-01 00:00:00',interval $count-1 month));
|
||||
# dec $count;
|
||||
# }
|
||||
# select count(*) from t3;
|
||||
# select * from t3;
|
||||
# drop table t3;
|
||||
|
||||
# eval create table t4 (a timestamp not null, primary key(a)) engine=$engine
|
||||
# partition by list (month(a)) subpartition by key (a)
|
||||
# subpartitions 3 (
|
||||
# partition quarter1 values in (0,1,2,3),
|
||||
# partition quarter2 values in (4,5,6),
|
||||
# partition quarter3 values in (7,8,9),
|
||||
# partition quarter4 values in (10,11,12)
|
||||
# );
|
||||
# show create table t4;
|
||||
# let $count=12;
|
||||
# --echo $count inserts;
|
||||
# while ($count)
|
||||
# {
|
||||
# eval insert into t4 values (date_add('1970-01-01 00:00:00',interval $count-1 month));
|
||||
# dec $count;
|
||||
# }
|
||||
# select count(*) from t4;
|
||||
# select * from t4;
|
||||
# drop table t4;
|
||||
|
@ -2942,104 +2942,6 @@ drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
-------------------------------------------------------------------------
|
||||
--- unix_timestamp(col1) in partition with coltype date
|
||||
-------------------------------------------------------------------------
|
||||
must all fail!
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
create table t1 (col1 date) engine='INNODB'
|
||||
partition by range(unix_timestamp(col1))
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
create table t2 (col1 date) engine='INNODB'
|
||||
partition by list(unix_timestamp(col1))
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
create table t3 (col1 date) engine='INNODB'
|
||||
partition by hash(unix_timestamp(col1));
|
||||
Got one of the listed errors
|
||||
create table t4 (colint int, col1 date) engine='INNODB'
|
||||
partition by range(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
create table t5 (colint int, col1 date) engine='INNODB'
|
||||
partition by list(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
create table t6 (colint int, col1 date) engine='INNODB'
|
||||
partition by range(colint)
|
||||
(partition p0 values less than (unix_timestamp ('2002-05-01')),
|
||||
partition p1 values less than maxvalue);
|
||||
Got one of the listed errors
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
create table t11 (col1 date) engine='INNODB' ;
|
||||
create table t22 (col1 date) engine='INNODB' ;
|
||||
create table t33 (col1 date) engine='INNODB' ;
|
||||
create table t44 (colint int, col1 date) engine='INNODB' ;
|
||||
create table t55 (colint int, col1 date) engine='INNODB' ;
|
||||
create table t66 (colint int, col1 date) engine='INNODB' ;
|
||||
alter table t11
|
||||
partition by range(unix_timestamp(col1))
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
alter table t22
|
||||
partition by list(unix_timestamp(col1))
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
alter table t33
|
||||
partition by hash(unix_timestamp(col1));
|
||||
Got one of the listed errors
|
||||
alter table t44
|
||||
partition by range(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
alter table t55
|
||||
partition by list(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
alter table t66
|
||||
partition by range(colint)
|
||||
(partition p0 values less than (unix_timestamp ('2002-05-01')),
|
||||
partition p1 values less than maxvalue);
|
||||
Got one of the listed errors
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
-------------------------------------------------------------------------
|
||||
--- week(col1) in partition with coltype datetime
|
||||
-------------------------------------------------------------------------
|
||||
must all fail!
|
||||
|
@ -2942,104 +2942,6 @@ drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
-------------------------------------------------------------------------
|
||||
--- unix_timestamp(col1) in partition with coltype date
|
||||
-------------------------------------------------------------------------
|
||||
must all fail!
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
create table t1 (col1 date) engine='MYISAM'
|
||||
partition by range(unix_timestamp(col1))
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
create table t2 (col1 date) engine='MYISAM'
|
||||
partition by list(unix_timestamp(col1))
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
create table t3 (col1 date) engine='MYISAM'
|
||||
partition by hash(unix_timestamp(col1));
|
||||
Got one of the listed errors
|
||||
create table t4 (colint int, col1 date) engine='MYISAM'
|
||||
partition by range(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
create table t5 (colint int, col1 date) engine='MYISAM'
|
||||
partition by list(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
create table t6 (colint int, col1 date) engine='MYISAM'
|
||||
partition by range(colint)
|
||||
(partition p0 values less than (unix_timestamp ('2002-05-01')),
|
||||
partition p1 values less than maxvalue);
|
||||
Got one of the listed errors
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
create table t11 (col1 date) engine='MYISAM' ;
|
||||
create table t22 (col1 date) engine='MYISAM' ;
|
||||
create table t33 (col1 date) engine='MYISAM' ;
|
||||
create table t44 (colint int, col1 date) engine='MYISAM' ;
|
||||
create table t55 (colint int, col1 date) engine='MYISAM' ;
|
||||
create table t66 (colint int, col1 date) engine='MYISAM' ;
|
||||
alter table t11
|
||||
partition by range(unix_timestamp(col1))
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
alter table t22
|
||||
partition by list(unix_timestamp(col1))
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
alter table t33
|
||||
partition by hash(unix_timestamp(col1));
|
||||
Got one of the listed errors
|
||||
alter table t44
|
||||
partition by range(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
Got one of the listed errors
|
||||
alter table t55
|
||||
partition by list(colint)
|
||||
subpartition by hash(unix_timestamp(col1)) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
Got one of the listed errors
|
||||
alter table t66
|
||||
partition by range(colint)
|
||||
(partition p0 values less than (unix_timestamp ('2002-05-01')),
|
||||
partition p1 values less than maxvalue);
|
||||
Got one of the listed errors
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
-------------------------------------------------------------------------
|
||||
--- week(col1) in partition with coltype datetime
|
||||
-------------------------------------------------------------------------
|
||||
must all fail!
|
||||
|
@ -184,114 +184,6 @@ a
|
||||
1971-01-01 00:00:58
|
||||
1971-01-01 00:00:59
|
||||
drop table t2;
|
||||
create table t3 (a timestamp not null, primary key(a)) engine='InnoDB'
|
||||
partition by range (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values less than (4),
|
||||
partition quarter2 values less than (7),
|
||||
partition quarter3 values less than (10),
|
||||
partition quarter4 values less than (13)
|
||||
);
|
||||
show create table t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (month(a))
|
||||
SUBPARTITION BY KEY (a)
|
||||
SUBPARTITIONS 3
|
||||
(PARTITION quarter1 VALUES LESS THAN (4) ENGINE = InnoDB,
|
||||
PARTITION quarter2 VALUES LESS THAN (7) ENGINE = InnoDB,
|
||||
PARTITION quarter3 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||||
PARTITION quarter4 VALUES LESS THAN (13) ENGINE = InnoDB) */
|
||||
12 inserts;
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 12-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 11-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 10-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 9-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 8-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 7-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 6-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 5-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 4-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 3-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 2-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 1-1 month));
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
select count(*) from t3;
|
||||
count(*)
|
||||
12
|
||||
select * from t3;
|
||||
a
|
||||
0000-00-00 00:00:00
|
||||
1970-02-01 00:00:00
|
||||
1970-03-01 00:00:00
|
||||
1970-04-01 00:00:00
|
||||
1970-05-01 00:00:00
|
||||
1970-06-01 00:00:00
|
||||
1970-07-01 00:00:00
|
||||
1970-08-01 00:00:00
|
||||
1970-09-01 00:00:00
|
||||
1970-10-01 00:00:00
|
||||
1970-11-01 00:00:00
|
||||
1970-12-01 00:00:00
|
||||
drop table t3;
|
||||
create table t4 (a timestamp not null, primary key(a)) engine='InnoDB'
|
||||
partition by list (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values in (0,1,2,3),
|
||||
partition quarter2 values in (4,5,6),
|
||||
partition quarter3 values in (7,8,9),
|
||||
partition quarter4 values in (10,11,12)
|
||||
);
|
||||
show create table t4;
|
||||
Table Create Table
|
||||
t4 CREATE TABLE `t4` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY LIST (month(a))
|
||||
SUBPARTITION BY KEY (a)
|
||||
SUBPARTITIONS 3
|
||||
(PARTITION quarter1 VALUES IN (0,1,2,3) ENGINE = InnoDB,
|
||||
PARTITION quarter2 VALUES IN (4,5,6) ENGINE = InnoDB,
|
||||
PARTITION quarter3 VALUES IN (7,8,9) ENGINE = InnoDB,
|
||||
PARTITION quarter4 VALUES IN (10,11,12) ENGINE = InnoDB) */
|
||||
12 inserts;
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 12-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 11-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 10-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 9-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 8-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 7-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 6-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 5-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 4-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 3-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 2-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 1-1 month));
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
select count(*) from t4;
|
||||
count(*)
|
||||
12
|
||||
select * from t4;
|
||||
a
|
||||
0000-00-00 00:00:00
|
||||
1970-02-01 00:00:00
|
||||
1970-03-01 00:00:00
|
||||
1970-04-01 00:00:00
|
||||
1970-05-01 00:00:00
|
||||
1970-06-01 00:00:00
|
||||
1970-07-01 00:00:00
|
||||
1970-08-01 00:00:00
|
||||
1970-09-01 00:00:00
|
||||
1970-10-01 00:00:00
|
||||
1970-11-01 00:00:00
|
||||
1970-12-01 00:00:00
|
||||
drop table t4;
|
||||
create table t1 (a date not null, primary key(a)) engine='InnoDB'
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
|
@ -184,114 +184,6 @@ a
|
||||
1971-01-01 00:00:58
|
||||
1971-01-01 00:00:59
|
||||
drop table t2;
|
||||
create table t3 (a timestamp not null, primary key(a)) engine='MyISAM'
|
||||
partition by range (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values less than (4),
|
||||
partition quarter2 values less than (7),
|
||||
partition quarter3 values less than (10),
|
||||
partition quarter4 values less than (13)
|
||||
);
|
||||
show create table t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (month(a))
|
||||
SUBPARTITION BY KEY (a)
|
||||
SUBPARTITIONS 3
|
||||
(PARTITION quarter1 VALUES LESS THAN (4) ENGINE = MyISAM,
|
||||
PARTITION quarter2 VALUES LESS THAN (7) ENGINE = MyISAM,
|
||||
PARTITION quarter3 VALUES LESS THAN (10) ENGINE = MyISAM,
|
||||
PARTITION quarter4 VALUES LESS THAN (13) ENGINE = MyISAM) */
|
||||
12 inserts;
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 12-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 11-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 10-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 9-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 8-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 7-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 6-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 5-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 4-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 3-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 2-1 month));
|
||||
insert into t3 values (date_add('1970-01-01 00:00:00',interval 1-1 month));
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
select count(*) from t3;
|
||||
count(*)
|
||||
12
|
||||
select * from t3;
|
||||
a
|
||||
0000-00-00 00:00:00
|
||||
1970-02-01 00:00:00
|
||||
1970-03-01 00:00:00
|
||||
1970-04-01 00:00:00
|
||||
1970-05-01 00:00:00
|
||||
1970-06-01 00:00:00
|
||||
1970-07-01 00:00:00
|
||||
1970-08-01 00:00:00
|
||||
1970-09-01 00:00:00
|
||||
1970-10-01 00:00:00
|
||||
1970-11-01 00:00:00
|
||||
1970-12-01 00:00:00
|
||||
drop table t3;
|
||||
create table t4 (a timestamp not null, primary key(a)) engine='MyISAM'
|
||||
partition by list (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values in (0,1,2,3),
|
||||
partition quarter2 values in (4,5,6),
|
||||
partition quarter3 values in (7,8,9),
|
||||
partition quarter4 values in (10,11,12)
|
||||
);
|
||||
show create table t4;
|
||||
Table Create Table
|
||||
t4 CREATE TABLE `t4` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY LIST (month(a))
|
||||
SUBPARTITION BY KEY (a)
|
||||
SUBPARTITIONS 3
|
||||
(PARTITION quarter1 VALUES IN (0,1,2,3) ENGINE = MyISAM,
|
||||
PARTITION quarter2 VALUES IN (4,5,6) ENGINE = MyISAM,
|
||||
PARTITION quarter3 VALUES IN (7,8,9) ENGINE = MyISAM,
|
||||
PARTITION quarter4 VALUES IN (10,11,12) ENGINE = MyISAM) */
|
||||
12 inserts;
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 12-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 11-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 10-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 9-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 8-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 7-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 6-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 5-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 4-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 3-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 2-1 month));
|
||||
insert into t4 values (date_add('1970-01-01 00:00:00',interval 1-1 month));
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
select count(*) from t4;
|
||||
count(*)
|
||||
12
|
||||
select * from t4;
|
||||
a
|
||||
0000-00-00 00:00:00
|
||||
1970-02-01 00:00:00
|
||||
1970-03-01 00:00:00
|
||||
1970-04-01 00:00:00
|
||||
1970-05-01 00:00:00
|
||||
1970-06-01 00:00:00
|
||||
1970-07-01 00:00:00
|
||||
1970-08-01 00:00:00
|
||||
1970-09-01 00:00:00
|
||||
1970-10-01 00:00:00
|
||||
1970-11-01 00:00:00
|
||||
1970-12-01 00:00:00
|
||||
drop table t4;
|
||||
create table t1 (a date not null, primary key(a)) engine='MyISAM'
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
|
@ -34,47 +34,9 @@ insert into t1 values(1,10);
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
show slave status;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 2010
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 2010
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Errno=0
|
||||
Last_SQL_Error
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
@ -82,47 +44,9 @@ load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
stop slave;
|
||||
change master to master_user='test';
|
||||
change master to master_user='root';
|
||||
show slave status;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 2045
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 2045
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Errno=0
|
||||
Last_SQL_Error
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
set sql_log_bin=0;
|
||||
@ -131,47 +55,9 @@ set sql_log_bin=1;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
stop slave;
|
||||
reset slave;
|
||||
show slave status;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File
|
||||
Read_Master_Log_Pos 4
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 0
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Errno=0
|
||||
Last_SQL_Error
|
||||
Replicate_Ignore_Server_Ids
|
||||
Master_Server_Id 1
|
||||
|
||||
reset master;
|
||||
create table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60),
|
||||
unique(day)) engine=MyISAM;
|
||||
|
128
mysql-test/suite/rpl/r/rpl_loaddata_concurrent.result
Normal file
128
mysql-test/suite/rpl/r/rpl_loaddata_concurrent.result
Normal file
@ -0,0 +1,128 @@
|
||||
CREATE TABLE t1 (c1 char(50));
|
||||
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
||||
LOAD DATA CONCURRENT INFILE '../../std_data/words.dat' INTO TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (c1 char(50))
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (c1) ;file_id=#
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA CONCURRENT INFILE '../../std_data/words.dat' INTO TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (c1) ;file_id=#
|
||||
DROP TABLE t1;
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
reset master;
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
0
|
||||
create table t1(a int not null auto_increment, b int, primary key(a) );
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
1
|
||||
create temporary table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60));
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata2.dat' into table t2 fields terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by '\n##\n' starting by '>' ignore 1 lines;
|
||||
create table t3 (day date,id int(9),category enum('a','b','c'),name varchar(60));
|
||||
insert into t3 select * from t2;
|
||||
select * from t1;
|
||||
a b
|
||||
1 10
|
||||
2 15
|
||||
select * from t3;
|
||||
day id category name
|
||||
2003-02-22 2461 b a a a @ % ' " a
|
||||
2003-03-22 2161 c asdf
|
||||
2003-03-22 2416 a bbbbb
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
create table t1(a int, b int, unique(b));
|
||||
insert into t1 values(1,10);
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
Last_SQL_Errno=0
|
||||
Last_SQL_Error
|
||||
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
stop slave;
|
||||
change master to master_user='test';
|
||||
change master to master_user='root';
|
||||
Last_SQL_Errno=0
|
||||
Last_SQL_Error
|
||||
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
stop slave;
|
||||
reset slave;
|
||||
Last_SQL_Errno=0
|
||||
Last_SQL_Error
|
||||
|
||||
reset master;
|
||||
create table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60),
|
||||
unique(day)) engine=MyISAM;
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||
'\n##\n' starting by '>' ignore 1 lines;
|
||||
ERROR 23000: Duplicate entry '2003-03-22' for key 'day'
|
||||
select * from t2;
|
||||
day id category name
|
||||
2003-02-22 2461 b a a a @ % ' " a
|
||||
2003-03-22 2161 c asdf
|
||||
start slave;
|
||||
select * from t2;
|
||||
day id category name
|
||||
2003-02-22 2461 b a a a @ % ' " a
|
||||
2003-03-22 2161 c asdf
|
||||
alter table t2 drop key day;
|
||||
delete from t2;
|
||||
load data CONCURRENT infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||
'\n##\n' starting by '>' ignore 1 lines;
|
||||
ERROR 23000: Duplicate entry '2003-03-22' for key 'day'
|
||||
drop table t1, t2;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||
LOAD DATA CONCURRENT INFILE "../../std_data/words.dat" INTO TABLE t1;
|
||||
ERROR 23000: Duplicate entry 'Aarhus' for key 'PRIMARY'
|
||||
DROP TABLE IF EXISTS t1;
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
drop database if exists b48297_db1;
|
||||
drop database if exists b42897_db2;
|
||||
create database b48297_db1;
|
||||
create database b42897_db2;
|
||||
use b48297_db1;
|
||||
CREATE TABLE t1 (c1 VARCHAR(256)) engine=MyISAM;;
|
||||
use b42897_db2;
|
||||
### assertion: works with cross-referenced database
|
||||
LOAD DATA CONCURRENT LOCAL INFILE 'MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE b48297_db1.t1;
|
||||
use b48297_db1;
|
||||
### assertion: works with fully qualified name on current database
|
||||
LOAD DATA CONCURRENT LOCAL INFILE 'MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE b48297_db1.t1;
|
||||
### assertion: works without fully qualified name on current database
|
||||
LOAD DATA CONCURRENT LOCAL INFILE 'MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE t1;
|
||||
### create connection without default database
|
||||
### connect (conn2,localhost,root,,*NO-ONE*);
|
||||
### assertion: works without stating the default database
|
||||
LOAD DATA CONCURRENT LOCAL INFILE 'MYSQLTEST_VARDIR/std_data/loaddata5.dat' INTO TABLE b48297_db1.t1;
|
||||
### disconnect and switch back to master connection
|
||||
use b48297_db1;
|
||||
Comparing tables master:b48297_db1.t1 and slave:b48297_db1.t1
|
||||
DROP DATABASE b48297_db1;
|
||||
DROP DATABASE b42897_db2;
|
@ -220,3 +220,31 @@ start slave sql_thread;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=776;
|
||||
Warnings:
|
||||
Note 1254 Slave is already running
|
||||
include/stop_slave.inc
|
||||
drop table if exists t1;
|
||||
reset slave;
|
||||
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root';
|
||||
drop table if exists t1;
|
||||
reset master;
|
||||
create table t1 (a int primary key auto_increment);
|
||||
start slave;
|
||||
include/stop_slave.inc
|
||||
master and slave are in sync now
|
||||
select 0 as zero;
|
||||
zero
|
||||
0
|
||||
insert into t1 set a=null;
|
||||
insert into t1 set a=null;
|
||||
select count(*) as two from t1;
|
||||
two
|
||||
2
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos= UNTIL_POS;;
|
||||
slave stopped at the prescribed position
|
||||
select 0 as zero;
|
||||
zero
|
||||
0
|
||||
select count(*) as one from t1;
|
||||
one
|
||||
1
|
||||
drop table t1;
|
||||
start slave;
|
||||
|
@ -233,16 +233,7 @@ COMMIT;
|
||||
--connection master_a
|
||||
--enable_query_log
|
||||
|
||||
|
||||
--let $wait_condition= SELECT COUNT(*)=400 FROM t2 WHERE c = 1
|
||||
--connection master_a
|
||||
--source include/wait_condition.inc
|
||||
--connection master_b
|
||||
--source include/wait_condition.inc
|
||||
--connection master_c
|
||||
--source include/wait_condition.inc
|
||||
--connection master_d
|
||||
--source include/wait_condition.inc
|
||||
--source include/circular_rpl_for_4_hosts_sync.inc
|
||||
|
||||
--connection master_a
|
||||
SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
|
||||
@ -282,15 +273,7 @@ ROLLBACK;
|
||||
--connection master_a
|
||||
--enable_query_log
|
||||
|
||||
--let $wait_condition= SELECT COUNT(*)=200 FROM t2 WHERE c = 2
|
||||
--connection master_a
|
||||
--source include/wait_condition.inc
|
||||
--connection master_b
|
||||
--source include/wait_condition.inc
|
||||
--connection master_c
|
||||
--source include/wait_condition.inc
|
||||
--connection master_d
|
||||
--source include/wait_condition.inc
|
||||
--source include/circular_rpl_for_4_hosts_sync.inc
|
||||
|
||||
--connection master_a
|
||||
SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
|
||||
|
13
mysql-test/suite/rpl/t/rpl_loaddata_concurrent.test
Normal file
13
mysql-test/suite/rpl/t/rpl_loaddata_concurrent.test
Normal file
@ -0,0 +1,13 @@
|
||||
-- source include/not_ndb_default.inc
|
||||
-- source include/have_log_bin.inc
|
||||
|
||||
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
CREATE TABLE t1 (c1 char(50));
|
||||
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
||||
LOAD DATA CONCURRENT INFILE '../../std_data/words.dat' INTO TABLE t1;
|
||||
-- source include/show_binlog_events.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
let $lock_option= CONCURRENT;
|
||||
let $engine_type=MyISAM;
|
||||
-- source extra/rpl_tests/rpl_loaddata.test
|
@ -98,3 +98,67 @@ start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
|
||||
start slave sql_thread;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=776;
|
||||
|
||||
#
|
||||
# bug#47210 first execution of "start slave until" stops too early
|
||||
#
|
||||
# testing that a slave rotate event that is caused by stopping the slave
|
||||
# does not intervene anymore in UNTIL condition.
|
||||
#
|
||||
|
||||
connection slave;
|
||||
source include/stop_slave.inc;
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
reset slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root';
|
||||
|
||||
connection master;
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
reset master;
|
||||
create table t1 (a int primary key auto_increment);
|
||||
save_master_pos;
|
||||
let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
|
||||
connection slave;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
|
||||
# at this point slave will close the relay log stamping it with its own
|
||||
# Rotate log event. This event won't be examined on matter of the master
|
||||
# UNTIL pos anymore.
|
||||
source include/stop_slave.inc;
|
||||
let $slave_exec_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1);
|
||||
|
||||
--echo master and slave are in sync now
|
||||
let $diff_pos= `select $master_pos - $slave_exec_pos`;
|
||||
eval select $diff_pos as zero;
|
||||
|
||||
connection master;
|
||||
insert into t1 set a=null;
|
||||
let $until_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
insert into t1 set a=null;
|
||||
select count(*) as two from t1;
|
||||
|
||||
connection slave;
|
||||
--replace_result $until_pos UNTIL_POS;
|
||||
eval start slave until master_log_file='master-bin.000001', master_log_pos= $until_pos;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
let $slave_exec_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1);
|
||||
--echo slave stopped at the prescribed position
|
||||
let $diff_pos= `select $until_pos - $slave_exec_pos`;
|
||||
eval select $diff_pos as zero;
|
||||
select count(*) as one from t1;
|
||||
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
connection slave;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of tests
|
||||
|
@ -14,6 +14,16 @@ SET character_set_connection=ucs2;
|
||||
|
||||
SET CHARACTER SET koi8r;
|
||||
|
||||
#
|
||||
# BUG#49028, error in LIKE with ucs2
|
||||
#
|
||||
create table t1 (a varchar(2) character set ucs2 collate ucs2_bin, key(a));
|
||||
insert into t1 values ('A'),('A'),('B'),('C'),('D'),('A\t');
|
||||
insert into t1 values ('A\0'),('A\0'),('A\0'),('A\0'),('AZ');
|
||||
select hex(a) from t1 where a like 'A_' order by a;
|
||||
select hex(a) from t1 ignore key(a) where a like 'A_' order by a;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Check that 0x20 is only trimmed when it is
|
||||
# a part of real SPACE character, not just a part
|
||||
|
@ -494,6 +494,27 @@ EXECUTE s;
|
||||
DEALLOCATE PREPARE s;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #49250 : spatial btree index corruption and crash
|
||||
--echo # Part two : fulltext syntax check
|
||||
--echo #
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
CREATE TABLE t1(col1 TEXT,
|
||||
FULLTEXT INDEX USING BTREE (col1));
|
||||
CREATE TABLE t2(col1 TEXT);
|
||||
--error ER_PARSE_ERROR
|
||||
CREATE FULLTEXT INDEX USING BTREE ON t2(col);
|
||||
--error ER_PARSE_ERROR
|
||||
ALTER TABLE t2 ADD FULLTEXT INDEX USING BTREE (col1);
|
||||
|
||||
DROP TABLE t2;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #47930: MATCH IN BOOLEAN MODE returns too many results
|
||||
--echo # inside subquery
|
||||
|
@ -670,6 +670,21 @@ SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #49250 : spatial btree index corruption and crash
|
||||
--echo # Part one : spatial syntax check
|
||||
--echo #
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
CREATE TABLE t1(col1 MULTIPOLYGON NOT NULL,
|
||||
SPATIAL INDEX USING BTREE (col1));
|
||||
CREATE TABLE t2(col1 MULTIPOLYGON NOT NULL);
|
||||
--error ER_PARSE_ERROR
|
||||
CREATE SPATIAL INDEX USING BTREE ON t2(col);
|
||||
--error ER_PARSE_ERROR
|
||||
ALTER TABLE t2 ADD SPATIAL INDEX USING BTREE (col1);
|
||||
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
@ -53,8 +53,8 @@ CREATE TABLE t1 (
|
||||
b varchar(10),
|
||||
PRIMARY KEY (a)
|
||||
)
|
||||
PARTITION BY RANGE (to_days(a)) (
|
||||
PARTITION p1 VALUES LESS THAN (733407),
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a)) (
|
||||
PARTITION p1 VALUES LESS THAN (1199134800),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE
|
||||
);
|
||||
|
||||
@ -64,7 +64,7 @@ INSERT INTO t1 VALUES ('2009-09-21 17:31:42', 'pmax');
|
||||
|
||||
SELECT * FROM t1;
|
||||
ALTER TABLE t1 REORGANIZE PARTITION pmax INTO (
|
||||
PARTITION p3 VALUES LESS THAN (733969),
|
||||
PARTITION p3 VALUES LESS THAN (1247688000),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
SELECT * FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
@ -158,7 +158,7 @@ create table t1 (col1 datetime)
|
||||
partition by range(timestampdiff(day,5,col1))
|
||||
(partition p0 values less than (10), partition p1 values less than (30));
|
||||
|
||||
-- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||
-- error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
create table t1 (col1 date)
|
||||
partition by range(unix_timestamp(col1))
|
||||
(partition p0 values less than (10), partition p1 values less than (30));
|
||||
|
@ -466,7 +466,7 @@ partitions 2
|
||||
#
|
||||
# Partition by range, constant partition function not allowed
|
||||
#
|
||||
--error ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
@ -681,7 +681,7 @@ partition by list (a);
|
||||
#
|
||||
# Partition by list, constant partition function not allowed
|
||||
#
|
||||
--error ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
@ -840,4 +840,364 @@ partition by range (a + (select count(*) from t1))
|
||||
create table t1 (a char(10))
|
||||
partition by hash (extractvalue(a,'a'));
|
||||
|
||||
--echo #
|
||||
--echo # Bug #42849: innodb crash with varying time_zone on partitioned
|
||||
--echo # timestamp primary key
|
||||
--echo #
|
||||
|
||||
# A correctly partitioned table to test that trying to repartition it using
|
||||
# timezone-dependent expression will throw an error.
|
||||
CREATE TABLE old (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
# Check that allowed arithmetic/math functions involving TIMESTAMP values result
|
||||
# in ER_PARTITION_FUNC_NOT_ALLOWED_ERROR when used as a partitioning function
|
||||
|
||||
--error ER_PARTITION_FUNC_NOT_ALLOWED_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_PARTITION_FUNC_NOT_ALLOWED_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a+0) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a+0) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a % 2) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a % 2) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (ABS(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (ABS(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (CEILING(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (CEILING(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (FLOOR(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (FLOOR(a)) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
# Check that allowed date/time functions involving TIMESTAMP values result
|
||||
# in ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR when used as a partitioning function
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (TO_DAYS(a)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TO_DAYS(a)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (DAYOFYEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (231),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DAYOFYEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (231),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (DAYOFMONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (19),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DAYOFMONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (19),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (DAYOFWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DAYOFWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (MONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (8),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (MONTH(a)) (
|
||||
PARTITION p VALUES LESS THAN (8),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (HOUR(a)) (
|
||||
PARTITION p VALUES LESS THAN (17),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (HOUR(a)) (
|
||||
PARTITION p VALUES LESS THAN (17),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (MINUTE(a)) (
|
||||
PARTITION p VALUES LESS THAN (55),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (MINUTE(a)) (
|
||||
PARTITION p VALUES LESS THAN (55),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (QUARTER(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (QUARTER(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (SECOND(a)) (
|
||||
PARTITION p VALUES LESS THAN (7),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (SECOND(a)) (
|
||||
PARTITION p VALUES LESS THAN (7),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEARWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (200833),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEARWEEK(a)) (
|
||||
PARTITION p VALUES LESS THAN (200833),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (WEEKDAY(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (WEEKDAY(a)) (
|
||||
PARTITION p VALUES LESS THAN (3),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (TIME_TO_SEC(a)) (
|
||||
PARTITION p VALUES LESS THAN (64507),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TIME_TO_SEC(a)) (
|
||||
PARTITION p VALUES LESS THAN (64507),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (EXTRACT(DAY FROM a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (EXTRACT(DAY FROM a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL, b TIMESTAMP NOT NULL, PRIMARY KEY(a,b))
|
||||
PARTITION BY RANGE (DATEDIFF(a, a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (DATEDIFF(a, a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEAR(a + 0)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a + 0)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (TO_DAYS(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TO_DAYS(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (YEAR(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a + '2008-01-01')) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
ALTER TABLE old ADD COLUMN b DATE;
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP, b DATE)
|
||||
PARTITION BY RANGE (YEAR(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (YEAR(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (2008),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP, b DATE)
|
||||
PARTITION BY RANGE (TO_DAYS(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (TO_DAYS(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (733638),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP, b date)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE new (a TIMESTAMP, b TIMESTAMP)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
ALTER TABLE old MODIFY b TIMESTAMP;
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(a + b)) (
|
||||
PARTITION p VALUES LESS THAN (1219089600),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
DROP TABLE old;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -3368,6 +3368,32 @@ WHERE a = 230;
|
||||
|
||||
DROP TABLE t1, st1, st2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #48709: Assertion failed in sql_select.cc:11782:
|
||||
--echo # int join_read_key(JOIN_TAB*)
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (pk int PRIMARY KEY, int_key int);
|
||||
INSERT INTO t1 VALUES (10,1), (14,1);
|
||||
|
||||
CREATE TABLE t2 (pk int PRIMARY KEY, int_key int);
|
||||
INSERT INTO t2 VALUES (3,3), (5,NULL), (7,3);
|
||||
|
||||
--echo # should have eq_ref for t1
|
||||
--replace_column 1 x 2 x 5 x 6 x 7 x 8 x 9 x 10 x
|
||||
EXPLAIN
|
||||
SELECT * FROM t2 outr
|
||||
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||
ORDER BY outr.pk;
|
||||
|
||||
--echo # should not crash on debug binaries
|
||||
SELECT * FROM t2 outr
|
||||
WHERE outr.int_key NOT IN (SELECT t1.pk FROM t1, t2)
|
||||
ORDER BY outr.pk;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
|
@ -220,7 +220,8 @@ copy_uca_collation(CHARSET_INFO *to, CHARSET_INFO *from)
|
||||
static int add_collation(CHARSET_INFO *cs)
|
||||
{
|
||||
if (cs->name && (cs->number ||
|
||||
(cs->number=get_collation_number_internal(cs->name))))
|
||||
(cs->number=get_collation_number_internal(cs->name))) &&
|
||||
cs->number < array_elements(all_charsets))
|
||||
{
|
||||
if (!all_charsets[cs->number])
|
||||
{
|
||||
@ -324,7 +325,6 @@ static int add_collation(CHARSET_INFO *cs)
|
||||
#define MY_CHARSET_INDEX "Index.xml"
|
||||
|
||||
const char *charsets_dir= NULL;
|
||||
static int charset_initialized=0;
|
||||
|
||||
|
||||
static my_bool my_read_charset_file(const char *filename, myf myflags)
|
||||
@ -402,34 +402,19 @@ static void *cs_alloc(size_t size)
|
||||
}
|
||||
|
||||
|
||||
#ifdef __NETWARE__
|
||||
my_bool STDCALL init_available_charsets(myf myflags)
|
||||
#else
|
||||
static my_bool init_available_charsets(myf myflags)
|
||||
#endif
|
||||
static my_pthread_once_t charsets_initialized= MY_PTHREAD_ONCE_INIT;
|
||||
|
||||
static void init_available_charsets(void)
|
||||
{
|
||||
char fname[FN_REFLEN + sizeof(MY_CHARSET_INDEX)];
|
||||
my_bool error=FALSE;
|
||||
/*
|
||||
We have to use charset_initialized to not lock on THR_LOCK_charset
|
||||
inside get_internal_charset...
|
||||
*/
|
||||
if (!charset_initialized)
|
||||
{
|
||||
CHARSET_INFO **cs;
|
||||
/*
|
||||
To make things thread safe we are not allowing other threads to interfere
|
||||
while we may changing the cs_info_table
|
||||
*/
|
||||
pthread_mutex_lock(&THR_LOCK_charset);
|
||||
if (!charset_initialized)
|
||||
{
|
||||
|
||||
bzero(&all_charsets,sizeof(all_charsets));
|
||||
init_compiled_charsets(myflags);
|
||||
init_compiled_charsets(MYF(0));
|
||||
|
||||
/* Copy compiled charsets */
|
||||
for (cs=all_charsets;
|
||||
cs < all_charsets + array_elements(all_charsets);
|
||||
cs < all_charsets+array_elements(all_charsets)-1 ;
|
||||
cs++)
|
||||
{
|
||||
if (*cs)
|
||||
@ -441,24 +426,13 @@ static my_bool init_available_charsets(myf myflags)
|
||||
}
|
||||
|
||||
strmov(get_charsets_dir(fname), MY_CHARSET_INDEX);
|
||||
error= my_read_charset_file(fname,myflags);
|
||||
charset_initialized=1;
|
||||
}
|
||||
pthread_mutex_unlock(&THR_LOCK_charset);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
void free_charsets(void)
|
||||
{
|
||||
charset_initialized=0;
|
||||
my_read_charset_file(fname, MYF(0));
|
||||
}
|
||||
|
||||
|
||||
uint get_collation_number(const char *name)
|
||||
{
|
||||
init_available_charsets(MYF(0));
|
||||
my_pthread_once(&charsets_initialized, init_available_charsets);
|
||||
return get_collation_number_internal(name);
|
||||
}
|
||||
|
||||
@ -466,7 +440,7 @@ uint get_collation_number(const char *name)
|
||||
uint get_charset_number(const char *charset_name, uint cs_flags)
|
||||
{
|
||||
CHARSET_INFO **cs;
|
||||
init_available_charsets(MYF(0));
|
||||
my_pthread_once(&charsets_initialized, init_available_charsets);
|
||||
|
||||
for (cs= all_charsets;
|
||||
cs < all_charsets + array_elements(all_charsets);
|
||||
@ -483,7 +457,7 @@ uint get_charset_number(const char *charset_name, uint cs_flags)
|
||||
const char *get_charset_name(uint charset_number)
|
||||
{
|
||||
CHARSET_INFO *cs;
|
||||
init_available_charsets(MYF(0));
|
||||
my_pthread_once(&charsets_initialized, init_available_charsets);
|
||||
|
||||
cs=all_charsets[charset_number];
|
||||
if (cs && (cs->number == charset_number) && cs->name )
|
||||
@ -541,7 +515,7 @@ CHARSET_INFO *get_charset(uint cs_number, myf flags)
|
||||
if (cs_number == default_charset_info->number)
|
||||
return default_charset_info;
|
||||
|
||||
(void) init_available_charsets(MYF(0)); /* If it isn't initialized */
|
||||
my_pthread_once(&charsets_initialized, init_available_charsets);
|
||||
|
||||
if (!cs_number || cs_number > array_elements(all_charsets))
|
||||
return NULL;
|
||||
@ -563,7 +537,7 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags)
|
||||
{
|
||||
uint cs_number;
|
||||
CHARSET_INFO *cs;
|
||||
(void) init_available_charsets(MYF(0)); /* If it isn't initialized */
|
||||
my_pthread_once(&charsets_initialized, init_available_charsets);
|
||||
|
||||
cs_number=get_collation_number(cs_name);
|
||||
cs= cs_number ? get_internal_charset(cs_number,flags) : NULL;
|
||||
@ -588,7 +562,7 @@ CHARSET_INFO *get_charset_by_csname(const char *cs_name,
|
||||
DBUG_ENTER("get_charset_by_csname");
|
||||
DBUG_PRINT("enter",("name: '%s'", cs_name));
|
||||
|
||||
(void) init_available_charsets(MYF(0)); /* If it isn't initialized */
|
||||
my_pthread_once(&charsets_initialized, init_available_charsets);
|
||||
|
||||
cs_number= get_charset_number(cs_name, cs_flags);
|
||||
cs= cs_number ? get_internal_charset(cs_number, flags) : NULL;
|
||||
|
@ -167,7 +167,6 @@ void my_end(int infoflag)
|
||||
my_print_open_files();
|
||||
}
|
||||
}
|
||||
free_charsets();
|
||||
my_error_unregister_all();
|
||||
my_once_free();
|
||||
|
||||
|
@ -129,4 +129,36 @@ error_return:
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
One time initialization. For simplicity, we assume initializer thread
|
||||
does not exit within init_routine().
|
||||
*/
|
||||
int my_pthread_once(my_pthread_once_t *once_control,
|
||||
void (*init_routine)(void))
|
||||
{
|
||||
LONG state= InterlockedCompareExchange(once_control, MY_PTHREAD_ONCE_INPROGRESS,
|
||||
MY_PTHREAD_ONCE_INIT);
|
||||
switch(state)
|
||||
{
|
||||
case MY_PTHREAD_ONCE_INIT:
|
||||
/* This is initializer thread */
|
||||
(*init_routine)();
|
||||
*once_control= MY_PTHREAD_ONCE_DONE;
|
||||
break;
|
||||
|
||||
case MY_PTHREAD_ONCE_INPROGRESS:
|
||||
/* init_routine in progress. Wait for its completion */
|
||||
while(*once_control == MY_PTHREAD_ONCE_INPROGRESS)
|
||||
{
|
||||
Sleep(1);
|
||||
}
|
||||
break;
|
||||
case MY_PTHREAD_ONCE_DONE:
|
||||
/* Nothing to do */
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
#include "my_global.h"
|
||||
|
||||
my_bool init_available_charsets(myf myflags);
|
||||
void init_available_charsets(void);
|
||||
|
||||
/* this function is required so that global memory is allocated against this
|
||||
library nlm, and not against a paticular client */
|
||||
@ -31,7 +31,7 @@ int _NonAppStart(void *NLMHandle, void *errorScreen, const char *commandLine,
|
||||
{
|
||||
mysql_server_init(0, NULL, NULL);
|
||||
|
||||
init_available_charsets(MYF(0));
|
||||
init_available_charsets();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -965,6 +965,15 @@ public:
|
||||
virtual Item *equal_fields_propagator(uchar * arg) { return this; }
|
||||
virtual bool set_no_const_sub(uchar *arg) { return FALSE; }
|
||||
virtual Item *replace_equal_field(uchar * arg) { return this; }
|
||||
/*
|
||||
Check if an expression value depends on the current timezone. Used by
|
||||
partitioning code to reject timezone-dependent expressions in a
|
||||
(sub)partitioning function.
|
||||
*/
|
||||
virtual bool is_timezone_dependent_processor(uchar *bool_arg)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
For SP local variable returns pointer to Item representing its
|
||||
|
@ -192,6 +192,29 @@ public:
|
||||
null_value=1;
|
||||
return 0.0;
|
||||
}
|
||||
bool has_timestamp_args()
|
||||
{
|
||||
DBUG_ASSERT(fixed == TRUE);
|
||||
for (uint i= 0; i < arg_count; i++)
|
||||
{
|
||||
if (args[i]->type() == Item::FIELD_ITEM &&
|
||||
args[i]->field_type() == MYSQL_TYPE_TIMESTAMP)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
/*
|
||||
We assume the result of any function that has a TIMESTAMP argument to be
|
||||
timezone-dependent, since a TIMESTAMP value in both numeric and string
|
||||
contexts is interpreted according to the current timezone.
|
||||
The only exception is UNIX_TIMESTAMP() which returns the internal
|
||||
representation of a TIMESTAMP argument verbatim, and thus does not depend on
|
||||
the timezone.
|
||||
*/
|
||||
virtual bool is_timezone_dependent_processor(uchar *bool_arg)
|
||||
{
|
||||
return has_timestamp_args();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -326,6 +326,16 @@ public:
|
||||
Item_func_unix_timestamp(Item *a) :Item_int_func(a) {}
|
||||
longlong val_int();
|
||||
const char *func_name() const { return "unix_timestamp"; }
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
/*
|
||||
UNIX_TIMESTAMP() depends on the current timezone
|
||||
(and thus may not be used as a partitioning function)
|
||||
when its argument is NOT of the TIMESTAMP type.
|
||||
*/
|
||||
bool is_timezone_dependent_processor(uchar *int_arg)
|
||||
{
|
||||
return !has_timestamp_args();
|
||||
}
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
decimals=0;
|
||||
|
19
sql/log.cc
19
sql/log.cc
@ -4511,6 +4511,9 @@ bool general_log_write(THD *thd, enum enum_server_command command,
|
||||
|
||||
void MYSQL_BIN_LOG::rotate_and_purge(uint flags)
|
||||
{
|
||||
#ifdef HAVE_REPLICATION
|
||||
bool check_purge= false;
|
||||
#endif
|
||||
if (!(flags & RP_LOCK_LOG_IS_ALREADY_LOCKED))
|
||||
pthread_mutex_lock(&LOCK_log);
|
||||
if ((flags & RP_FORCE_ROTATE) ||
|
||||
@ -4518,16 +4521,24 @@ void MYSQL_BIN_LOG::rotate_and_purge(uint flags)
|
||||
{
|
||||
new_file_without_locking();
|
||||
#ifdef HAVE_REPLICATION
|
||||
if (expire_logs_days)
|
||||
check_purge= true;
|
||||
#endif
|
||||
}
|
||||
if (!(flags & RP_LOCK_LOG_IS_ALREADY_LOCKED))
|
||||
pthread_mutex_unlock(&LOCK_log);
|
||||
|
||||
#ifdef HAVE_REPLICATION
|
||||
/*
|
||||
NOTE: Run purge_logs wo/ holding LOCK_log
|
||||
as it otherwise will deadlock in ndbcluster_binlog_index_purge_file
|
||||
*/
|
||||
if (check_purge && expire_logs_days)
|
||||
{
|
||||
time_t purge_time= my_time(0) - expire_logs_days*24*60*60;
|
||||
if (purge_time >= 0)
|
||||
purge_logs_before_date(purge_time);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (!(flags & RP_LOCK_LOG_IS_ALREADY_LOCKED))
|
||||
pthread_mutex_unlock(&LOCK_log);
|
||||
}
|
||||
|
||||
uint MYSQL_BIN_LOG::next_file_id()
|
||||
|
@ -4039,6 +4039,7 @@ uint Load_log_event::get_query_buffer_length()
|
||||
return
|
||||
5 + db_len + 3 + // "use DB; "
|
||||
18 + fname_len + 2 + // "LOAD DATA INFILE 'file''"
|
||||
11 + // "CONCURRENT "
|
||||
7 + // LOCAL
|
||||
9 + // " REPLACE or IGNORE "
|
||||
13 + table_name_len*2 + // "INTO TABLE `table`"
|
||||
@ -4066,6 +4067,9 @@ void Load_log_event::print_query(bool need_db, const char *cs, char *buf,
|
||||
|
||||
pos= strmov(pos, "LOAD DATA ");
|
||||
|
||||
if (thd->lex->lock_option == TL_WRITE_CONCURRENT_INSERT)
|
||||
pos= strmov(pos, "CONCURRENT ");
|
||||
|
||||
if (fn_start)
|
||||
*fn_start= pos;
|
||||
|
||||
|
@ -1787,7 +1787,7 @@ private:
|
||||
|
||||
@verbatim
|
||||
(1) USE db;
|
||||
(2) LOAD DATA [LOCAL] INFILE 'file_name'
|
||||
(2) LOAD DATA [CONCURRENT] [LOCAL] INFILE 'file_name'
|
||||
(3) [REPLACE | IGNORE]
|
||||
(4) INTO TABLE 'table_name'
|
||||
(5) [FIELDS
|
||||
|
@ -1312,7 +1312,6 @@ void clean_up(bool print_message)
|
||||
lex_free(); /* Free some memory */
|
||||
item_create_cleanup();
|
||||
set_var_free();
|
||||
free_charsets();
|
||||
if (!opt_noacl)
|
||||
{
|
||||
#ifdef HAVE_DLOPEN
|
||||
|
@ -1029,7 +1029,7 @@ err:
|
||||
false - condition not met
|
||||
*/
|
||||
|
||||
bool Relay_log_info::is_until_satisfied(my_off_t master_beg_pos)
|
||||
bool Relay_log_info::is_until_satisfied(THD *thd, Log_event *ev)
|
||||
{
|
||||
const char *log_name;
|
||||
ulonglong log_pos;
|
||||
@ -1039,8 +1039,12 @@ bool Relay_log_info::is_until_satisfied(my_off_t master_beg_pos)
|
||||
|
||||
if (until_condition == UNTIL_MASTER_POS)
|
||||
{
|
||||
if (ev && ev->server_id == (uint32) ::server_id && !replicate_same_server_id)
|
||||
DBUG_RETURN(FALSE);
|
||||
log_name= group_master_log_name;
|
||||
log_pos= master_beg_pos;
|
||||
log_pos= (!ev)? group_master_log_pos :
|
||||
((thd->options & OPTION_BEGIN || !ev->log_pos) ?
|
||||
group_master_log_pos : ev->log_pos - ev->data_written);
|
||||
}
|
||||
else
|
||||
{ /* until_condition == UNTIL_RELAY_POS */
|
||||
|
@ -316,7 +316,7 @@ public:
|
||||
void close_temporary_tables();
|
||||
|
||||
/* Check if UNTIL condition is satisfied. See slave.cc for more. */
|
||||
bool is_until_satisfied(my_off_t master_beg_pos);
|
||||
bool is_until_satisfied(THD *thd, Log_event *ev);
|
||||
inline ulonglong until_pos()
|
||||
{
|
||||
return ((until_condition == UNTIL_MASTER_POS) ? group_master_log_pos :
|
||||
|
@ -5690,8 +5690,8 @@ ER_PARTITION_WRONG_NO_SUBPART_ERROR
|
||||
eng "Wrong number of subpartitions defined, mismatch with previous setting"
|
||||
ger "Falsche Anzahl von Unterpartitionen definiert, stimmt nicht mit vorherigen Einstellungen überein"
|
||||
swe "Antal subpartitioner definierade och antal subpartitioner är inte lika"
|
||||
ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
eng "Constant/Random expression in (sub)partitioning function is not allowed"
|
||||
ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
eng "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed"
|
||||
ger "Konstante oder Random-Ausdrücke in (Unter-)Partitionsfunktionen sind nicht erlaubt"
|
||||
swe "Konstanta uttryck eller slumpmässiga uttryck är inte tillåtna (sub)partitioneringsfunktioner"
|
||||
ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR
|
||||
|
@ -5690,8 +5690,8 @@ ER_PARTITION_WRONG_NO_SUBPART_ERROR
|
||||
eng "Wrong number of subpartitions defined, mismatch with previous setting"
|
||||
ger "Falsche Anzahl von Unterpartitionen definiert, stimmt nicht mit vorherigen Einstellungen <20>berein"
|
||||
swe "Antal subpartitioner definierade och antal subpartitioner <20>r inte lika"
|
||||
ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
eng "Constant/Random expression in (sub)partitioning function is not allowed"
|
||||
ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
eng "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed"
|
||||
ger "Konstante oder Random-Ausdr<64>cke in (Unter-)Partitionsfunktionen sind nicht erlaubt"
|
||||
swe "Konstanta uttryck eller slumpm<70>ssiga uttryck <20>r inte till<6C>tna (sub)partitioneringsfunktioner"
|
||||
ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR
|
||||
|
@ -2559,9 +2559,7 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
|
||||
hits the UNTIL barrier.
|
||||
*/
|
||||
if (rli->until_condition != Relay_log_info::UNTIL_NONE &&
|
||||
rli->is_until_satisfied((rli->is_in_group() || !ev->log_pos) ?
|
||||
rli->group_master_log_pos :
|
||||
ev->log_pos - ev->data_written))
|
||||
rli->is_until_satisfied(thd, ev))
|
||||
{
|
||||
char buf[22];
|
||||
sql_print_information("Slave SQL thread stopped because it reached its"
|
||||
@ -3348,7 +3346,7 @@ log '%s' at position %s, relay log '%s' position: %s", RPL_LOG_NAME,
|
||||
*/
|
||||
pthread_mutex_lock(&rli->data_lock);
|
||||
if (rli->until_condition != Relay_log_info::UNTIL_NONE &&
|
||||
rli->is_until_satisfied(rli->group_master_log_pos))
|
||||
rli->is_until_satisfied(thd, NULL))
|
||||
{
|
||||
char buf[22];
|
||||
sql_print_information("Slave SQL thread stopped because it reached its"
|
||||
|
@ -947,6 +947,8 @@ int check_signed_flag(partition_info *part_info)
|
||||
table The table object
|
||||
part_info Reference to partitioning data structure
|
||||
is_sub_part Is the table subpartitioned as well
|
||||
is_create_table_ind Indicator of whether openfrm was called as part of
|
||||
CREATE or ALTER TABLE
|
||||
|
||||
RETURN VALUE
|
||||
TRUE An error occurred, something was wrong with the
|
||||
@ -970,7 +972,7 @@ int check_signed_flag(partition_info *part_info)
|
||||
*/
|
||||
|
||||
static bool fix_fields_part_func(THD *thd, Item* func_expr, TABLE *table,
|
||||
bool is_sub_part)
|
||||
bool is_sub_part, bool is_create_table_ind)
|
||||
{
|
||||
partition_info *part_info= table->part_info;
|
||||
uint dir_length, home_dir_length;
|
||||
@ -1074,10 +1076,31 @@ static bool fix_fields_part_func(THD *thd, Item* func_expr, TABLE *table,
|
||||
thd->where= save_where;
|
||||
if (unlikely(func_expr->const_item()))
|
||||
{
|
||||
my_error(ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR, MYF(0));
|
||||
my_error(ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR, MYF(0));
|
||||
clear_field_flag(table);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/*
|
||||
We don't allow creating partitions with timezone-dependent expressions as
|
||||
a (sub)partitioning function, but we want to allow such expressions when
|
||||
opening existing tables for easier maintenance. This exception should be
|
||||
deprecated at some point in future so that we always throw an error.
|
||||
*/
|
||||
if (func_expr->walk(&Item::is_timezone_dependent_processor,
|
||||
0, NULL))
|
||||
{
|
||||
if (is_create_table_ind)
|
||||
{
|
||||
my_error(ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR, MYF(0));
|
||||
goto end;
|
||||
}
|
||||
else
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR,
|
||||
ER(ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR));
|
||||
}
|
||||
|
||||
if ((!is_sub_part) && (error= check_signed_flag(part_info)))
|
||||
goto end;
|
||||
result= set_up_field_array(table, is_sub_part);
|
||||
@ -1685,7 +1708,7 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
||||
else
|
||||
{
|
||||
if (unlikely(fix_fields_part_func(thd, part_info->subpart_expr,
|
||||
table, TRUE)))
|
||||
table, TRUE, is_create_table_ind)))
|
||||
goto end;
|
||||
if (unlikely(part_info->subpart_expr->result_type() != INT_RESULT))
|
||||
{
|
||||
@ -1713,7 +1736,7 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
||||
else
|
||||
{
|
||||
if (unlikely(fix_fields_part_func(thd, part_info->part_expr,
|
||||
table, FALSE)))
|
||||
table, FALSE, is_create_table_ind)))
|
||||
goto end;
|
||||
if (unlikely(part_info->part_expr->result_type() != INT_RESULT))
|
||||
{
|
||||
@ -1736,7 +1759,7 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
||||
else
|
||||
{
|
||||
if (unlikely(fix_fields_part_func(thd, part_info->part_expr,
|
||||
table, FALSE)))
|
||||
table, FALSE, is_create_table_ind)))
|
||||
goto end;
|
||||
}
|
||||
part_info->fixed= TRUE;
|
||||
|
@ -98,9 +98,6 @@ uint32 get_list_array_idx_for_endpoint(partition_info *part_info,
|
||||
uint32 get_partition_id_range_for_endpoint(partition_info *part_info,
|
||||
bool left_endpoint,
|
||||
bool include_endpoint);
|
||||
bool fix_fields_part_func(THD *thd, Item* func_expr, TABLE *table,
|
||||
bool is_sub_part, bool is_field_to_be_setup);
|
||||
|
||||
bool check_part_func_fields(Field **ptr, bool ok_with_charsets);
|
||||
bool field_is_partition_charset(Field *field);
|
||||
Item* convert_charset_partition_constant(Item *item, CHARSET_INFO *cs);
|
||||
|
@ -1640,6 +1640,11 @@ JOIN::reinit()
|
||||
if (join_tab_save)
|
||||
memcpy(join_tab, join_tab_save, sizeof(JOIN_TAB) * tables);
|
||||
|
||||
/* need to reset ref access state (see join_read_key) */
|
||||
if (join_tab)
|
||||
for (uint i= 0; i < tables; i++)
|
||||
join_tab[i].ref.key_err= TRUE;
|
||||
|
||||
if (tmp_join)
|
||||
restore_tmp();
|
||||
|
||||
|
@ -830,7 +830,7 @@ int mysql_update(THD *thd,
|
||||
|
||||
if (error < 0)
|
||||
{
|
||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
||||
char buff[MYSQL_ERRMSG_SIZE];
|
||||
my_snprintf(buff, sizeof(buff), ER(ER_UPDATE_INFO), (ulong) found,
|
||||
(ulong) updated,
|
||||
(ulong) thd->warning_info->statement_warn_count());
|
||||
|
@ -1772,7 +1772,7 @@ bool check_key_in_view(THD *thd, TABLE_LIST *view)
|
||||
if (!fld->item->fixed && fld->item->fix_fields(thd, &fld->item))
|
||||
{
|
||||
thd->mark_used_columns= save_mark_used_columns;
|
||||
return TRUE;
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
}
|
||||
thd->mark_used_columns= save_mark_used_columns;
|
||||
|
201
sql/sql_yacc.yy
201
sql/sql_yacc.yy
@ -598,6 +598,36 @@ Item* handle_sql2003_note184_exception(THD *thd, Item* left, bool equal,
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
|
||||
static bool add_create_index_prepare (LEX *lex, Table_ident *table)
|
||||
{
|
||||
lex->sql_command= SQLCOM_CREATE_INDEX;
|
||||
if (!lex->current_select->add_table_to_list(lex->thd, table, NULL,
|
||||
TL_OPTION_UPDATING))
|
||||
return TRUE;
|
||||
lex->alter_info.reset();
|
||||
lex->alter_info.flags= ALTER_ADD_INDEX;
|
||||
lex->col_list.empty();
|
||||
lex->change= NullS;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static bool add_create_index (LEX *lex, Key::Keytype type,
|
||||
const LEX_STRING &name,
|
||||
KEY_CREATE_INFO *info= NULL, bool generated= 0)
|
||||
{
|
||||
Key *key;
|
||||
key= new Key(type, name, info ? info : &lex->key_create_info, generated,
|
||||
lex->col_list);
|
||||
if (key == NULL)
|
||||
return TRUE;
|
||||
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
lex->col_list.empty();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
%}
|
||||
%union {
|
||||
int num;
|
||||
@ -1350,7 +1380,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
||||
option_type opt_var_type opt_var_ident_type
|
||||
|
||||
%type <key_type>
|
||||
key_type opt_unique_or_fulltext constraint_key_type
|
||||
normal_key_type opt_unique constraint_key_type fulltext spatial
|
||||
|
||||
%type <key_alg>
|
||||
btree_or_rtree
|
||||
@ -1451,7 +1481,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
||||
view_suid view_tail view_list_opt view_list view_select
|
||||
view_check_option trigger_tail sp_tail sf_tail udf_tail event_tail
|
||||
install uninstall partition_entry binlog_base64_event
|
||||
init_key_options key_options key_opts key_opt key_using_alg
|
||||
init_key_options normal_key_options normal_key_opts all_key_opt
|
||||
spatial_key_options fulltext_key_options normal_key_opt
|
||||
fulltext_key_opt spatial_key_opt fulltext_key_opts spatial_key_opts
|
||||
key_using_alg
|
||||
part_column_list
|
||||
server_def server_options_list server_option
|
||||
definer_opt no_definer definer
|
||||
@ -1916,35 +1949,37 @@ create:
|
||||
$5->table.str);
|
||||
}
|
||||
}
|
||||
| CREATE opt_unique_or_fulltext INDEX_SYM ident key_alg ON
|
||||
| CREATE opt_unique INDEX_SYM ident key_alg ON table_ident
|
||||
{
|
||||
if (add_create_index_prepare(Lex, $7))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
'(' key_list ')' normal_key_options
|
||||
{
|
||||
if (add_create_index(Lex, $2, $4))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| CREATE fulltext INDEX_SYM ident init_key_options ON
|
||||
table_ident
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
lex->sql_command= SQLCOM_CREATE_INDEX;
|
||||
if (!lex->current_select->add_table_to_list(lex->thd, $7,
|
||||
NULL,
|
||||
TL_OPTION_UPDATING))
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.reset();
|
||||
lex->alter_info.flags= ALTER_ADD_INDEX;
|
||||
lex->col_list.empty();
|
||||
lex->change=NullS;
|
||||
}
|
||||
'(' key_list ')' key_options
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
Key *key;
|
||||
if ($2 != Key::FULLTEXT && lex->key_create_info.parser_name.str)
|
||||
{
|
||||
my_parse_error(ER(ER_SYNTAX_ERROR));
|
||||
if (add_create_index_prepare(Lex, $7))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
key= new Key($2, $4, &lex->key_create_info, 0,
|
||||
lex->col_list);
|
||||
if (key == NULL)
|
||||
'(' key_list ')' fulltext_key_options
|
||||
{
|
||||
if (add_create_index(Lex, $2, $4))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| CREATE spatial INDEX_SYM ident init_key_options ON
|
||||
table_ident
|
||||
{
|
||||
if (add_create_index_prepare(Lex, $7))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
'(' key_list ')' spatial_key_options
|
||||
{
|
||||
if (add_create_index(Lex, $2, $4))
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
lex->col_list.empty();
|
||||
}
|
||||
| CREATE DATABASE opt_if_not_exists ident
|
||||
{
|
||||
@ -4355,7 +4390,7 @@ part_func_expr:
|
||||
lex->safe_to_cache_query= 1;
|
||||
if (not_corr_func)
|
||||
{
|
||||
my_parse_error(ER(ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR));
|
||||
my_parse_error(ER(ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR));
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
$$=$1;
|
||||
@ -5125,31 +5160,28 @@ column_def:
|
||||
;
|
||||
|
||||
key_def:
|
||||
key_type opt_ident key_alg '(' key_list ')' key_options
|
||||
normal_key_type opt_ident key_alg '(' key_list ')' normal_key_options
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if ($1 != Key::FULLTEXT && lex->key_create_info.parser_name.str)
|
||||
{
|
||||
my_parse_error(ER(ER_SYNTAX_ERROR));
|
||||
if (add_create_index (Lex, $1, $2))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
Key *key= new Key($1, $2, &lex->key_create_info, 0,
|
||||
lex->col_list);
|
||||
if (key == NULL)
|
||||
| fulltext opt_key_or_index opt_ident init_key_options
|
||||
'(' key_list ')' fulltext_key_options
|
||||
{
|
||||
if (add_create_index (Lex, $1, $3))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| spatial opt_key_or_index opt_ident init_key_options
|
||||
'(' key_list ')' spatial_key_options
|
||||
{
|
||||
if (add_create_index (Lex, $1, $3))
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
lex->col_list.empty(); /* Alloced by sql_alloc */
|
||||
}
|
||||
| opt_constraint constraint_key_type opt_ident key_alg
|
||||
'(' key_list ')' key_options
|
||||
'(' key_list ')' normal_key_options
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
Key *key= new Key($2, $3.str ? $3 : $1, &lex->key_create_info, 0,
|
||||
lex->col_list);
|
||||
if (key == NULL)
|
||||
if (add_create_index (Lex, $2, $3.str ? $3 : $1))
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
lex->col_list.empty(); /* Alloced by sql_alloc */
|
||||
}
|
||||
| opt_constraint FOREIGN KEY_SYM opt_ident '(' key_list ')' references
|
||||
{
|
||||
@ -5163,13 +5195,9 @@ key_def:
|
||||
if (key == NULL)
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
key= new Key(Key::MULTIPLE, $1.str ? $1 : $4,
|
||||
&default_key_create_info, 1,
|
||||
lex->col_list);
|
||||
if (key == NULL)
|
||||
if (add_create_index (lex, Key::MULTIPLE, $1.str ? $1 : $4,
|
||||
&default_key_create_info, 1))
|
||||
MYSQL_YYABORT;
|
||||
lex->alter_info.key_list.push_back(key);
|
||||
lex->col_list.empty(); /* Alloced by sql_alloc */
|
||||
/* Only used for ALTER TABLE. Ignored otherwise. */
|
||||
lex->alter_info.flags|= ALTER_FOREIGN_KEY;
|
||||
}
|
||||
@ -5738,19 +5766,8 @@ delete_option:
|
||||
| SET DEFAULT { $$= (int) Foreign_key::FK_OPTION_DEFAULT; }
|
||||
;
|
||||
|
||||
key_type:
|
||||
normal_key_type:
|
||||
key_or_index { $$= Key::MULTIPLE; }
|
||||
| FULLTEXT_SYM opt_key_or_index { $$= Key::FULLTEXT; }
|
||||
| SPATIAL_SYM opt_key_or_index
|
||||
{
|
||||
#ifdef HAVE_SPATIAL
|
||||
$$= Key::SPATIAL;
|
||||
#else
|
||||
my_error(ER_FEATURE_DISABLED, MYF(0),
|
||||
sym_group_geom.name, sym_group_geom.needed_define);
|
||||
MYSQL_YYABORT;
|
||||
#endif
|
||||
}
|
||||
;
|
||||
|
||||
constraint_key_type:
|
||||
@ -5774,11 +5791,17 @@ keys_or_index:
|
||||
| INDEXES {}
|
||||
;
|
||||
|
||||
opt_unique_or_fulltext:
|
||||
opt_unique:
|
||||
/* empty */ { $$= Key::MULTIPLE; }
|
||||
| UNIQUE_SYM { $$= Key::UNIQUE; }
|
||||
| FULLTEXT_SYM { $$= Key::FULLTEXT;}
|
||||
| SPATIAL_SYM
|
||||
;
|
||||
|
||||
fulltext:
|
||||
FULLTEXT_SYM { $$= Key::FULLTEXT;}
|
||||
;
|
||||
|
||||
spatial:
|
||||
SPATIAL_SYM
|
||||
{
|
||||
#ifdef HAVE_SPATIAL
|
||||
$$= Key::SPATIAL;
|
||||
@ -5807,14 +5830,34 @@ key_alg:
|
||||
| init_key_options key_using_alg
|
||||
;
|
||||
|
||||
key_options:
|
||||
normal_key_options:
|
||||
/* empty */ {}
|
||||
| key_opts
|
||||
| normal_key_opts
|
||||
;
|
||||
|
||||
key_opts:
|
||||
key_opt
|
||||
| key_opts key_opt
|
||||
fulltext_key_options:
|
||||
/* empty */ {}
|
||||
| fulltext_key_opts
|
||||
;
|
||||
|
||||
spatial_key_options:
|
||||
/* empty */ {}
|
||||
| spatial_key_opts
|
||||
;
|
||||
|
||||
normal_key_opts:
|
||||
normal_key_opt
|
||||
| normal_key_opts normal_key_opt
|
||||
;
|
||||
|
||||
spatial_key_opts:
|
||||
spatial_key_opt
|
||||
| spatial_key_opts spatial_key_opt
|
||||
;
|
||||
|
||||
fulltext_key_opts:
|
||||
fulltext_key_opt
|
||||
| fulltext_key_opts fulltext_key_opt
|
||||
;
|
||||
|
||||
key_using_alg:
|
||||
@ -5822,10 +5865,22 @@ key_using_alg:
|
||||
| TYPE_SYM btree_or_rtree { Lex->key_create_info.algorithm= $2; }
|
||||
;
|
||||
|
||||
key_opt:
|
||||
key_using_alg
|
||||
| KEY_BLOCK_SIZE opt_equal ulong_num
|
||||
all_key_opt:
|
||||
KEY_BLOCK_SIZE opt_equal ulong_num
|
||||
{ Lex->key_create_info.block_size= $3; }
|
||||
;
|
||||
|
||||
normal_key_opt:
|
||||
all_key_opt
|
||||
| key_using_alg
|
||||
;
|
||||
|
||||
spatial_key_opt:
|
||||
all_key_opt
|
||||
;
|
||||
|
||||
fulltext_key_opt:
|
||||
all_key_opt
|
||||
| WITH PARSER_SYM IDENT_sys
|
||||
{
|
||||
if (plugin_is_ready(&$3, MYSQL_FTPARSER_PLUGIN))
|
||||
|
@ -93,10 +93,5 @@ IF (MYSQL_VERSION_ID GREATER "50137")
|
||||
SET_TARGET_PROPERTIES(ha_innobase PROPERTIES OUTPUT_NAME ha_innodb)
|
||||
ENDIF(LIB_LOCATION)
|
||||
ELSE (MYSQL_VERSION_ID GREATER "50137")
|
||||
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)
|
||||
MYSQL_STORAGE_ENGINE(INNODB_PLUGIN)
|
||||
ENDIF (MYSQL_VERSION_ID GREATER "50137")
|
||||
|
@ -1602,16 +1602,6 @@ fill_max_and_min:
|
||||
*min_str++= *max_str++ = ptr[1];
|
||||
}
|
||||
|
||||
/* Temporary fix for handling w_one at end of string (key compression) */
|
||||
{
|
||||
char *tmp;
|
||||
for (tmp= min_str ; tmp-1 > min_org && tmp[-1] == '\0' && tmp[-2]=='\0';)
|
||||
{
|
||||
*--tmp=' ';
|
||||
*--tmp='\0';
|
||||
}
|
||||
}
|
||||
|
||||
*min_length= *max_length = (size_t) (min_str - min_org);
|
||||
while (min_str + 1 < min_end)
|
||||
{
|
||||
|
Reference in New Issue
Block a user