mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 15:24:16 +01:00
Merge trift2.:/MySQL/M51/mysql-5.1
into trift2.:/MySQL/M51/push-5.1
This commit is contained in:
commit
d097ee804c
74 changed files with 939 additions and 288 deletions
|
@ -480,6 +480,10 @@ void handle_error(struct st_command*,
|
|||
void handle_no_error(struct st_command*);
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
|
||||
/* attributes of the query thread */
|
||||
pthread_attr_t cn_thd_attrib;
|
||||
|
||||
/*
|
||||
send_one_query executes query in separate thread what is
|
||||
necessary in embedded library to run 'send' in proper way.
|
||||
|
@ -518,7 +522,7 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len,
|
|||
cn->cur_query= q;
|
||||
cn->cur_query_len= q_len;
|
||||
cn->query_done= 0;
|
||||
if (pthread_create(&tid, NULL, send_one_query, (void*)cn))
|
||||
if (pthread_create(&tid, &cn_thd_attrib, send_one_query, (void*)cn))
|
||||
die("Cannot start new thread for query");
|
||||
|
||||
return 0;
|
||||
|
@ -6156,6 +6160,12 @@ int main(int argc, char **argv)
|
|||
next_con= connections + 1;
|
||||
cur_con= connections;
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
/* set appropriate stack for the 'query' threads */
|
||||
(void) pthread_attr_init(&cn_thd_attrib);
|
||||
pthread_attr_setstacksize(&cn_thd_attrib, DEFAULT_THREAD_STACK);
|
||||
#endif /*EMBEDDED_LIBRARY*/
|
||||
|
||||
/* Init file stack */
|
||||
memset(file_stack, 0, sizeof(file_stack));
|
||||
file_stack_end=
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
--disable_query_log
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'archive';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'archive';
|
||||
--enable_query_log
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'blackhole';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'blackhole';
|
||||
enable_query_log;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'csv';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'csv';
|
||||
enable_query_log;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'example';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'example';
|
||||
enable_query_log;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'federated';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'federated';
|
||||
enable_query_log;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'innodb';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'innodb';
|
||||
enable_query_log;
|
||||
|
|
|
@ -10,7 +10,7 @@ drop table if exists t1, t2;
|
|||
--enable_warnings
|
||||
flush tables;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
enable_query_log;
|
||||
|
||||
# Check that server2 has NDB support
|
||||
|
@ -21,7 +21,7 @@ drop table if exists t1, t2;
|
|||
--enable_warnings
|
||||
flush tables;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
enable_query_log;
|
||||
|
||||
# Check should be here as well...
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Check that server is compiled and started with support for NDB
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
enable_query_log;
|
||||
|
||||
|
||||
|
|
|
@ -641,6 +641,37 @@ alter table t1 comment '123';
|
|||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #25866: Getting "#HY000 Can't find record in..." on and INSERT
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8;
|
||||
INSERT INTO t1 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
DELETE FROM t1 WHERE a = 'uk';
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
UPDATE t1 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
|
||||
CREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
|
||||
INSERT INTO t2 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
DELETE FROM t2 WHERE a = 'uk';
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
INSERT INTO t2 VALUES ('uk');
|
||||
UPDATE t2 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
|
||||
CREATE TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;
|
||||
INSERT INTO t3 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
DELETE FROM t3 WHERE a = 'uk';
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
INSERT INTO t3 VALUES ('uk');
|
||||
UPDATE t3 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -29,6 +29,9 @@ SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name
|
|||
|
||||
# wait 3 seconds, so the event can trigger
|
||||
--real_sleep 3
|
||||
let $wait_condition=
|
||||
SELECT count(*) = 1 FROM t1 WHERE c = 'from justonce';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# check that table t1 contains something
|
||||
--echo "in the master"
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
||||
--enable_warnings
|
||||
eval create table t1 (id int not null, f_id int not null, f int not null,
|
||||
primary key(f_id, id)) engine = $engine_type;
|
||||
|
@ -59,7 +59,7 @@ set autocommit = 0;
|
|||
#
|
||||
# S-lock to records (2,2),(4,2), and (6,2) should not be released in a update
|
||||
#
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
select * from t1 where a = 2 and b = 2 for update;
|
||||
connection a;
|
||||
commit;
|
||||
|
@ -213,39 +213,39 @@ set autocommit = 0;
|
|||
create table t10(a int not null, b int, primary key(a)) select * from t2 for update;
|
||||
|
||||
connection b;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection c;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection d;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection e;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection f;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection g;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection h;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection i;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection j;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection a;
|
||||
|
|
19
mysql-test/r/error_simulation.result
Normal file
19
mysql-test/r/error_simulation.result
Normal file
|
@ -0,0 +1,19 @@
|
|||
DROP TABLE IF EXISTS t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
CREATE TABLE t1 (
|
||||
a varchar(32) character set utf8 collate utf8_bin NOT NULL,
|
||||
b varchar(32) character set utf8 collate utf8_bin NOT NULL )
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t1 VALUES
|
||||
('AAAAAAAAAA','AAAAAAAAAA'), ('AAAAAAAAAB','AAAAAAAAAB '),
|
||||
('AAAAAAAAAB','AAAAAAAAAB'), ('AAAAAAAAAC','AAAAAAAAAC'),
|
||||
('AAAAAAAAAD','AAAAAAAAAD'), ('AAAAAAAAAE','AAAAAAAAAE'),
|
||||
('AAAAAAAAAF','AAAAAAAAAF'), ('AAAAAAAAAG','AAAAAAAAAG'),
|
||||
('AAAAAAAAAH','AAAAAAAAAH'), ('AAAAAAAAAI','AAAAAAAAAI'),
|
||||
('AAAAAAAAAJ','AAAAAAAAAJ'), ('AAAAAAAAAK','AAAAAAAAAK');
|
||||
set tmp_table_size=1024;
|
||||
SELECT MAX(a) FROM t1 GROUP BY a,b;
|
||||
ERROR 23000: Can't write; duplicate key in table 'tmp_table'
|
||||
set tmp_table_size=default;
|
||||
DROP TABLE t1;
|
|
@ -865,6 +865,27 @@ SELECT Overlaps(@horiz1, @point2) FROM DUAL;
|
|||
Overlaps(@horiz1, @point2)
|
||||
0
|
||||
DROP TABLE t1;
|
||||
create table t1(f1 geometry, f2 point, f3 linestring);
|
||||
select f1 from t1 union select f1 from t1;
|
||||
f1
|
||||
insert into t1 (f2,f3) values (GeomFromText('POINT(1 1)'),
|
||||
GeomFromText('LINESTRING(0 0,1 1,2 2)'));
|
||||
select AsText(f2),AsText(f3) from t1;
|
||||
AsText(f2) AsText(f3)
|
||||
POINT(1 1) LINESTRING(0 0,1 1,2 2)
|
||||
select AsText(a) from (select f2 as a from t1 union select f3 from t1) t;
|
||||
AsText(a)
|
||||
POINT(1 1)
|
||||
LINESTRING(0 0,1 1,2 2)
|
||||
create table t2 as select f2 as a from t1 union select f3 from t1;
|
||||
desc t2;
|
||||
Field Type Null Key Default Extra
|
||||
a point YES NULL
|
||||
select AsText(a) from t2;
|
||||
AsText(a)
|
||||
POINT(1 1)
|
||||
LINESTRING(0 0,1 1,2 2)
|
||||
drop table t1, 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;
|
||||
|
|
|
@ -404,4 +404,22 @@ use test;
|
|||
drop database mysqltest_1;
|
||||
drop database mysqltest_2;
|
||||
drop user mysqltest_u1@localhost;
|
||||
grant all on `mysqltest\_%`.* to mysqltest_1@localhost with grant option;
|
||||
grant usage on *.* to mysqltest_2@localhost;
|
||||
create database mysqltest_1;
|
||||
use mysqltest_1;
|
||||
create table t1 (f1 int);
|
||||
grant create on `mysqltest\_1`.* to mysqltest_2@localhost;
|
||||
grant select on mysqltest_1.t1 to mysqltest_2@localhost;
|
||||
create database mysqltest_3;
|
||||
ERROR 42000: Access denied for user 'mysqltest_2'@'localhost' to database 'mysqltest_3'
|
||||
use mysqltest_1;
|
||||
create table t2(f1 int);
|
||||
select * from t1;
|
||||
f1
|
||||
drop database mysqltest_1;
|
||||
revoke all privileges, grant option from mysqltest_1@localhost;
|
||||
revoke all privileges, grant option from mysqltest_2@localhost;
|
||||
drop user mysqltest_1@localhost;
|
||||
drop user mysqltest_2@localhost;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1055,47 +1055,47 @@ INSERT INTO t1 SELECT a + 8,b FROM t1;
|
|||
INSERT INTO t1 SELECT a + 16,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 32,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 64,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 128,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 128,b FROM t1 limit 16;
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
EXPLAIN SELECT a FROM t1 WHERE a < 2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range PRIMARY,i2 PRIMARY 4 NULL 2 Using where; Using index
|
||||
1 SIMPLE t1 range PRIMARY,i2 PRIMARY 4 NULL 1 Using where; Using index
|
||||
EXPLAIN SELECT a FROM t1 WHERE a < 2 ORDER BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range PRIMARY,i2 PRIMARY 4 NULL 2 Using where; Using index
|
||||
1 SIMPLE t1 range PRIMARY,i2 PRIMARY 4 NULL 1 Using where; Using index
|
||||
EXPLAIN SELECT a FROM t1 WHERE a < 2 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range PRIMARY,i2 PRIMARY 4 NULL 2 Using where; Using index
|
||||
1 SIMPLE t1 range PRIMARY,i2 PRIMARY 4 NULL 1 Using where; Using index
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY,i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 256
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR JOIN (PRIMARY,i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 256
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (PRIMARY,i2) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 256 Using index; Using filesort
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index; Using filesort
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY)
|
||||
IGNORE INDEX FOR GROUP BY (i2) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY) IGNORE INDEX FOR ORDER BY (i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1 FORCE INDEX (i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1 USE INDEX ();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 256
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
|
||||
EXPLAIN SELECT a FROM t1 USE INDEX () USE INDEX (i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 256
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
|
||||
EXPLAIN SELECT a FROM t1
|
||||
FORCE INDEX (PRIMARY)
|
||||
IGNORE INDEX FOR GROUP BY (i2)
|
||||
|
@ -1104,7 +1104,7 @@ USE INDEX (i2);
|
|||
ERROR HY000: Incorrect usage of USE INDEX and FORCE INDEX
|
||||
EXPLAIN SELECT a FROM t1 USE INDEX (i2) USE INDEX ();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1 FORCE INDEX ();
|
||||
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 ')' at line 1
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX ();
|
||||
|
@ -1112,34 +1112,34 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
|
|||
EXPLAIN SELECT a FROM t1 USE INDEX FOR JOIN (i2)
|
||||
USE INDEX FOR GROUP BY (i2) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1 FORCE INDEX FOR JOIN (i2)
|
||||
FORCE INDEX FOR GROUP BY (i2) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL i2 4 NULL 257 Using index for group-by
|
||||
1 SIMPLE t1 range NULL i2 4 NULL 145 Using index for group-by
|
||||
EXPLAIN SELECT a FROM t1 USE INDEX () IGNORE INDEX (i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 256
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
|
||||
EXPLAIN SELECT a FROM t1 IGNORE INDEX (i2) USE INDEX ();
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 256
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
|
||||
EXPLAIN SELECT a FROM t1
|
||||
USE INDEX FOR GROUP BY (i2)
|
||||
USE INDEX FOR ORDER BY (i2)
|
||||
USE INDEX FOR JOIN (i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 144 Using index
|
||||
EXPLAIN SELECT a FROM t1
|
||||
USE INDEX FOR JOIN (i2)
|
||||
USE INDEX FOR JOIN (i2)
|
||||
USE INDEX FOR JOIN (i2,i2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 256 Using index
|
||||
1 SIMPLE t1 index NULL i2 9 NULL 144 Using index
|
||||
EXPLAIN SELECT 1 FROM t1 WHERE a IN
|
||||
(SELECT a FROM t1 USE INDEX (i2) IGNORE INDEX (i2));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL PRIMARY 4 NULL 256 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 256 Using where
|
||||
1 PRIMARY t1 index NULL PRIMARY 4 NULL 144 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 144 Using where
|
||||
CREATE TABLE t2 (a INT, b INT, KEY(a));
|
||||
INSERT INTO t2 VALUES (1, 1), (2, 2), (3,3), (4,4);
|
||||
EXPLAIN SELECT a, SUM(b) FROM t2 GROUP BY a LIMIT 2;
|
||||
|
@ -1152,7 +1152,7 @@ EXPLAIN SELECT 1 FROM t2 WHERE a IN
|
|||
(SELECT a FROM t1 USE INDEX (i2) IGNORE INDEX (i2));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 256 Using where
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 144 Using where
|
||||
SHOW VARIABLES LIKE 'old';
|
||||
Variable_name Value
|
||||
old OFF
|
||||
|
|
|
@ -1397,10 +1397,21 @@ TABLE_PRIVILEGES information_schema.TABLE_PRIVILEGES 1
|
|||
TRIGGERS information_schema.TRIGGERS 1
|
||||
USER_PRIVILEGES information_schema.USER_PRIVILEGES 1
|
||||
VIEWS information_schema.VIEWS 1
|
||||
create table t1(f1 int);
|
||||
create view v1 as select f1+1 as a from t1;
|
||||
create table t2 (f1 int, f2 int);
|
||||
create view v2 as select f1+1 as a, f2 as b from t2;
|
||||
select table_name, is_updatable from information_schema.views;
|
||||
table_name is_updatable
|
||||
v1 NO
|
||||
v2 YES
|
||||
delete from v1;
|
||||
drop view v1,v2;
|
||||
drop table t1,t2;
|
||||
End of 5.0 tests.
|
||||
select * from information_schema.engines WHERE ENGINE="MyISAM";
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
MyISAM ENABLED Default engine as of MySQL 3.23 with great performance NO NO NO
|
||||
MyISAM DEFAULT Default engine as of MySQL 3.23 with great performance NO NO NO
|
||||
grant select on *.* to user3148@localhost;
|
||||
select user,db from information_schema.processlist;
|
||||
user db
|
||||
|
|
|
@ -7,9 +7,9 @@ partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3);
|
|||
select * from information_schema.partitions where table_schema="test"
|
||||
and table_name="t1";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 x1 NULL 1 NULL LIST NULL b*a NULL 1 0 0 0 # 1024 0 # # NULL NULL default default ts1
|
||||
NULL test t1 x2 NULL 2 NULL LIST NULL b*a NULL 3,11,5,7 0 0 0 # 1024 0 # # NULL NULL default default ts2
|
||||
NULL test t1 x3 NULL 3 NULL LIST NULL b*a NULL 16,8,24,27 0 0 0 # 1024 0 # # NULL NULL default default ts3
|
||||
NULL test t1 x1 NULL 1 NULL LIST NULL b*a NULL 1 0 0 0 # 1024 0 # # NULL NULL default ts1
|
||||
NULL test t1 x2 NULL 2 NULL LIST NULL b*a NULL 3,11,5,7 0 0 0 # 1024 0 # # NULL NULL default ts2
|
||||
NULL test t1 x3 NULL 3 NULL LIST NULL b*a NULL 16,8,24,27 0 0 0 # 1024 0 # # NULL NULL default ts3
|
||||
create table t2 (a int not null,b int not null,c int not null, primary key(a,b))
|
||||
partition by range (a)
|
||||
partitions 3
|
||||
|
@ -19,27 +19,27 @@ partition x3 values less than maxvalue tablespace ts3);
|
|||
select * from information_schema.partitions where table_schema="test"
|
||||
and table_name="t2";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t2 x1 NULL 1 NULL RANGE NULL a NULL 5 0 0 0 # 1024 0 # # NULL NULL default default ts1
|
||||
NULL test t2 x2 NULL 2 NULL RANGE NULL a NULL 10 0 0 0 # 1024 0 # # NULL NULL default default ts2
|
||||
NULL test t2 x3 NULL 3 NULL RANGE NULL a NULL MAXVALUE 0 0 0 # 1024 0 # # NULL NULL default default ts3
|
||||
NULL test t2 x1 NULL 1 NULL RANGE NULL a NULL 5 0 0 0 # 1024 0 # # NULL NULL default ts1
|
||||
NULL test t2 x2 NULL 2 NULL RANGE NULL a NULL 10 0 0 0 # 1024 0 # # NULL NULL default ts2
|
||||
NULL test t2 x3 NULL 3 NULL RANGE NULL a NULL MAXVALUE 0 0 0 # 1024 0 # # NULL NULL default ts3
|
||||
create table t3 (f1 date)
|
||||
partition by hash(month(f1))
|
||||
partitions 3;
|
||||
select * from information_schema.partitions where table_schema="test"
|
||||
and table_name="t3";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t3 p0 NULL 1 NULL HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t3 p1 NULL 2 NULL HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t3 p2 NULL 3 NULL HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t3 p0 NULL 1 NULL HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
NULL test t3 p1 NULL 2 NULL HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
NULL test t3 p2 NULL 3 NULL HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
create table t4 (f1 date, f2 int)
|
||||
partition by key(f1,f2)
|
||||
partitions 3;
|
||||
select * from information_schema.partitions where table_schema="test"
|
||||
and table_name="t4";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t4 p0 NULL 1 NULL KEY NULL f1,f2 NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t4 p1 NULL 2 NULL KEY NULL f1,f2 NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t4 p2 NULL 3 NULL KEY NULL f1,f2 NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t4 p0 NULL 1 NULL KEY NULL f1,f2 NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
NULL test t4 p1 NULL 2 NULL KEY NULL f1,f2 NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
NULL test t4 p2 NULL 3 NULL KEY NULL f1,f2 NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
drop table t1,t2,t3,t4;
|
||||
create table t1 (a int not null,b int not null,c int not null,primary key (a,b))
|
||||
partition by range (a)
|
||||
|
@ -63,14 +63,14 @@ subpartition x22 tablespace t2)
|
|||
);
|
||||
select * from information_schema.partitions where table_schema="test";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 x1 x11 1 1 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL default default t1
|
||||
NULL test t1 x1 x12 1 2 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL default default t2
|
||||
NULL test t1 x2 x21 2 1 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL default default t1
|
||||
NULL test t1 x2 x22 2 2 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL default default t2
|
||||
NULL test t2 x1 x11 1 1 RANGE KEY a a 1 0 0 0 # 1024 0 # # NULL NULL default default t1
|
||||
NULL test t2 x1 x12 1 2 RANGE KEY a a 1 0 0 0 # 1024 0 # # NULL NULL default default t2
|
||||
NULL test t2 x2 x21 2 1 RANGE KEY a a 5 0 0 0 # 1024 0 # # NULL NULL default default t1
|
||||
NULL test t2 x2 x22 2 2 RANGE KEY a a 5 0 0 0 # 1024 0 # # NULL NULL default default t2
|
||||
NULL test t1 x1 x11 1 1 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL default t1
|
||||
NULL test t1 x1 x12 1 2 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL default t2
|
||||
NULL test t1 x2 x21 2 1 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL default t1
|
||||
NULL test t1 x2 x22 2 2 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL default t2
|
||||
NULL test t2 x1 x11 1 1 RANGE KEY a a 1 0 0 0 # 1024 0 # # NULL NULL default t1
|
||||
NULL test t2 x1 x12 1 2 RANGE KEY a a 1 0 0 0 # 1024 0 # # NULL NULL default t2
|
||||
NULL test t2 x2 x21 2 1 RANGE KEY a a 5 0 0 0 # 1024 0 # # NULL NULL default t1
|
||||
NULL test t2 x2 x22 2 2 RANGE KEY a a 5 0 0 0 # 1024 0 # # NULL NULL default t2
|
||||
drop table t1,t2;
|
||||
create table t1 (
|
||||
a int not null,
|
||||
|
@ -88,10 +88,10 @@ subpartition x22 tablespace t2 nodegroup 1)
|
|||
);
|
||||
select * from information_schema.partitions where table_schema="test";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 x1 x11 1 1 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL default 0 t1
|
||||
NULL test t1 x1 x12 1 2 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL default 1 t2
|
||||
NULL test t1 x2 x21 2 1 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL default 0 t1
|
||||
NULL test t1 x2 x22 2 2 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL default 1 t2
|
||||
NULL test t1 x1 x11 1 1 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL 0 t1
|
||||
NULL test t1 x1 x12 1 2 RANGE HASH a a+b 1 0 0 0 # 1024 0 # # NULL NULL 1 t2
|
||||
NULL test t1 x2 x21 2 1 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL 0 t1
|
||||
NULL test t1 x2 x22 2 2 RANGE HASH a a+b 5 0 0 0 # 1024 0 # # NULL NULL 1 t2
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
|
@ -107,9 +107,9 @@ partitions 3;
|
|||
select * from information_schema.partitions where table_schema="test"
|
||||
and table_name="t1";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL LINEAR HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t1 p1 NULL 2 NULL LINEAR HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t1 p2 NULL 3 NULL LINEAR HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default default NULL
|
||||
NULL test t1 p0 NULL 1 NULL LINEAR HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
NULL test t1 p1 NULL 2 NULL LINEAR HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
NULL test t1 p2 NULL 3 NULL LINEAR HASH NULL month(f1) NULL NULL 0 0 0 # 1024 0 # # NULL NULL default NULL
|
||||
drop table t1;
|
||||
create table t1 (a int)
|
||||
PARTITION BY RANGE (a)
|
||||
|
|
|
@ -629,6 +629,42 @@ t1 CREATE TABLE `t1` (
|
|||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='123'
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8;
|
||||
INSERT INTO t1 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
a
|
||||
uk
|
||||
DELETE FROM t1 WHERE a = 'uk';
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
a
|
||||
UPDATE t1 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
a
|
||||
CREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
|
||||
INSERT INTO t2 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
a
|
||||
uk
|
||||
DELETE FROM t2 WHERE a = 'uk';
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
a
|
||||
INSERT INTO t2 VALUES ('uk');
|
||||
UPDATE t2 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
a
|
||||
CREATE TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;
|
||||
INSERT INTO t3 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
a
|
||||
uk
|
||||
DELETE FROM t3 WHERE a = 'uk';
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
a
|
||||
INSERT INTO t3 VALUES ('uk');
|
||||
UPDATE t3 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
a
|
||||
DROP TABLE t1,t2,t3;
|
||||
End of 5.0 tests
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
insert into t1 values (1,1),(1,2);
|
||||
|
|
|
@ -393,3 +393,17 @@ id c1 cnt
|
|||
1 0 3
|
||||
2 2 1
|
||||
DROP TABLE t1;
|
||||
create table t1(f1 int primary key,
|
||||
f2 timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);
|
||||
insert into t1(f1) values(1);
|
||||
select @stamp1:=f2 from t1;
|
||||
@stamp1:=f2
|
||||
#
|
||||
insert into t1(f1) values(1) on duplicate key update f1=1;
|
||||
select @stamp2:=f2 from t1;
|
||||
@stamp2:=f2
|
||||
#
|
||||
select if( @stamp1 = @stamp2, "correct", "wrong");
|
||||
if( @stamp1 = @stamp2, "correct", "wrong")
|
||||
correct
|
||||
drop table t1;
|
||||
|
|
|
@ -314,11 +314,11 @@ a1
|
|||
20
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1' AND partition_name = 'p0';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL KEY NULL NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default ts
|
||||
NULL test t1 p0 NULL 1 NULL KEY NULL NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default ts
|
||||
ALTER TABLE test.t1 ADD a2 FLOAT, ADD a3 DOUBLE;
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1' AND partition_name = 'p0';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL KEY NULL NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default ts
|
||||
NULL test t1 p0 NULL 1 NULL KEY NULL NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default ts
|
||||
SELECT * FROM test.t1 ORDER BY a1;
|
||||
a1 a2 a3
|
||||
1 2.2345 20000001
|
||||
|
|
|
@ -223,31 +223,31 @@ t6 CREATE TABLE `t6` (
|
|||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (pk1) (PARTITION x1 VALUES LESS THAN (333) ENGINE = ndbcluster, PARTITION x2 VALUES LESS THAN (720) ENGINE = ndbcluster) */
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p2 NULL 3 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p3 NULL 4 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p2 NULL 3 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p3 NULL 4 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't2';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t2 p0 NULL 1 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t2 p1 NULL 2 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t2 p0 NULL 1 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t2 p1 NULL 2 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't3';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t3 x1 NULL 1 NULL RANGE NULL c3 NULL 105 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t3 x2 NULL 2 NULL RANGE NULL c3 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t3 x3 NULL 3 NULL RANGE NULL c3 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t3 x1 NULL 1 NULL RANGE NULL c3 NULL 105 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x2 NULL 2 NULL RANGE NULL c3 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x3 NULL 3 NULL RANGE NULL c3 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't4';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t4 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t4 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t4 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t4 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't5';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t5 p0 NULL 1 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t5 p1 NULL 2 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t5 p0 NULL 1 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t5 p1 NULL 2 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't6';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t6 x1 NULL 1 NULL RANGE NULL pk1 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t6 x2 NULL 2 NULL RANGE NULL pk1 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t6 x1 NULL 1 NULL RANGE NULL pk1 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t6 x2 NULL 2 NULL RANGE NULL pk1 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
250
|
||||
|
@ -389,31 +389,31 @@ t6 CREATE TABLE `t6` (
|
|||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (pk1) (PARTITION x1 VALUES LESS THAN (333) ENGINE = ndbcluster, PARTITION x2 VALUES LESS THAN (720) ENGINE = ndbcluster) */
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p2 NULL 3 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p3 NULL 4 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space1
|
||||
NULL test t1 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p2 NULL 3 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p3 NULL 4 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't2';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t2 p0 NULL 1 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t2 p1 NULL 2 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t2 p0 NULL 1 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t2 p1 NULL 2 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't3';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t3 x1 NULL 1 NULL RANGE NULL c3 NULL 105 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t3 x2 NULL 2 NULL RANGE NULL c3 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t3 x3 NULL 3 NULL RANGE NULL c3 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default default table_space2
|
||||
NULL test t3 x1 NULL 1 NULL RANGE NULL c3 NULL 105 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x2 NULL 2 NULL RANGE NULL c3 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x3 NULL 3 NULL RANGE NULL c3 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't4';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t4 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t4 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t4 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t4 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't5';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t5 p0 NULL 1 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t5 p1 NULL 2 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t5 p0 NULL 1 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t5 p1 NULL 2 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't6';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t6 x1 NULL 1 NULL RANGE NULL pk1 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t6 x2 NULL 2 NULL RANGE NULL pk1 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default default NULL
|
||||
NULL test t6 x1 NULL 1 NULL RANGE NULL pk1 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t6 x2 NULL 2 NULL RANGE NULL pk1 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
250
|
||||
|
|
|
@ -17,9 +17,9 @@ INSERT into t1 values (10, 1, 1);
|
|||
INSERT into t1 values (15, 1, 1);
|
||||
select * from information_schema.partitions where table_name= 't1';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 x1 NULL 1 NULL RANGE NULL a NULL 5 0 0 0 # 0 0 # # NULL NULL default default NULL
|
||||
NULL test t1 x2 NULL 2 NULL RANGE NULL a NULL 10 0 0 0 # 0 0 # # NULL NULL default default NULL
|
||||
NULL test t1 x3 NULL 3 NULL RANGE NULL a NULL 20 0 0 0 # 0 0 # # NULL NULL default default NULL
|
||||
NULL test t1 x1 NULL 1 NULL RANGE NULL a NULL 5 0 0 0 # 0 0 # # NULL NULL default NULL
|
||||
NULL test t1 x2 NULL 2 NULL RANGE NULL a NULL 10 0 0 0 # 0 0 # # NULL NULL default NULL
|
||||
NULL test t1 x3 NULL 3 NULL RANGE NULL a NULL 20 0 0 0 # 0 0 # # NULL NULL default NULL
|
||||
select * from t1 order by a;
|
||||
a b c
|
||||
1 1 1
|
||||
|
|
|
@ -1235,4 +1235,22 @@ aaa 2
|
|||
drop table t1;
|
||||
create table t1 (s1 bigint) partition by list (s1) (partition p1 values in (-9223372036854775808));
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a INT NOT NULL, b TINYBLOB, KEY(a))
|
||||
PARTITION BY RANGE(a) ( PARTITION p0 VALUES LESS THAN (32));
|
||||
INSERT INTO t1 VALUES (1, REPEAT('a', 10));
|
||||
INSERT INTO t1 SELECT a + 1, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 4, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 8, b FROM t1;
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION p1 VALUES LESS THAN (64));
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
DROP TABLE t1;
|
||||
USE mysql;
|
||||
SET GLOBAL general_log = 0;
|
||||
ALTER TABLE general_log ENGINE = MyISAM;
|
||||
ALTER TABLE general_log PARTITION BY RANGE (TO_DAYS(event_time))
|
||||
(PARTITION p0 VALUES LESS THAN (733144), PARTITION p1 VALUES LESS THAN (3000000));
|
||||
ERROR HY000: Incorrect usage of PARTITION and log table
|
||||
ALTER TABLE general_log ENGINE = CSV;
|
||||
SET GLOBAL general_log = default;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -2853,7 +2853,6 @@ a
|
|||
3
|
||||
4
|
||||
DROP TABLE t1,t2,t3;
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
CREATE TABLE t2 (f2 INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
@ -4081,6 +4080,32 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||
Warnings:
|
||||
Note 1003 select `res`.`count(*)` AS `count(*)` from (select count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`a`) `res`
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
a varchar(255) default NULL,
|
||||
b timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
||||
INDEX idx(a,b)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
a varchar(255) default NULL
|
||||
);
|
||||
INSERT INTO t1 VALUES ('abcdefghijk','2007-05-07 06:00:24');
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO `t1` VALUES ('asdf','2007-02-08 01:11:26');
|
||||
INSERT INTO `t2` VALUES ('abcdefghijk');
|
||||
INSERT INTO `t2` VALUES ('asdf');
|
||||
SET session sort_buffer_size=8192;
|
||||
SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2;
|
||||
d1
|
||||
1
|
||||
1
|
||||
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);
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
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 'select adddate(current_timestamp(), interval -4 day))' at line 1
|
||||
purge master logs before adddate(current_timestamp(), interval -4 day);
|
||||
|
|
|
@ -1454,19 +1454,22 @@ CREATE TABLE t2 (id INTEGER);
|
|||
INSERT INTO t2 VALUES (1),(2);
|
||||
CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW
|
||||
INSERT INTO t2 VALUES (new.id);
|
||||
SELECT GET_LOCK('B26162',20);
|
||||
GET_LOCK('B26162',20)
|
||||
SELECT GET_LOCK('B26162',120);
|
||||
GET_LOCK('B26162',120)
|
||||
1
|
||||
SELECT 'rl_acquirer', GET_LOCK('B26162',5), id FROM t2 WHERE id = 1;
|
||||
SELECT 'rl_acquirer', GET_LOCK('B26162',120), id FROM t2 WHERE id = 1;
|
||||
SET SESSION LOW_PRIORITY_UPDATES=1;
|
||||
SET GLOBAL LOW_PRIORITY_UPDATES=1;
|
||||
INSERT INTO t1 VALUES (5);
|
||||
SELECT 'rl_contender', id FROM t2 WHERE id > 1;
|
||||
SELECT RELEASE_LOCK('B26162');
|
||||
RELEASE_LOCK('B26162')
|
||||
0
|
||||
rl_acquirer GET_LOCK('B26162',5) id
|
||||
rl_acquirer 0 1
|
||||
1
|
||||
rl_acquirer GET_LOCK('B26162',120) id
|
||||
rl_acquirer 1 1
|
||||
SELECT RELEASE_LOCK('B26162');
|
||||
RELEASE_LOCK('B26162')
|
||||
1
|
||||
rl_contender id
|
||||
rl_contender 2
|
||||
DROP TRIGGER t1_test;
|
||||
|
|
|
@ -411,6 +411,22 @@ if(@bug28261 = f1, '', @bug28261:= f1)
|
|||
2001-01-01
|
||||
2002-02-02
|
||||
drop table t1;
|
||||
create table t1(f1 datetime);
|
||||
insert into t1 values('2001-01-01'),('2002-02-02');
|
||||
select * from t1 where f1 between 20020101 and 20070101000000;
|
||||
f1
|
||||
2002-02-02 00:00:00
|
||||
select * from t1 where f1 between 2002010 and 20070101000000;
|
||||
f1
|
||||
2001-01-01 00:00:00
|
||||
2002-02-02 00:00:00
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '2002010' for column 'f1' at row 1
|
||||
select * from t1 where f1 between 20020101 and 2007010100000;
|
||||
f1
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '2007010100000' for column 'f1' at row 1
|
||||
drop table t1;
|
||||
set @org_mode=@@sql_mode;
|
||||
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
|
||||
Warnings:
|
||||
|
|
|
@ -790,3 +790,12 @@ Warning 1292 Incorrect datetime value: '0000-00-00'
|
|||
Warning 1292 Incorrect datetime value: '0000-00-00'
|
||||
Warning 1292 Incorrect datetime value: '0000-00-00'
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
qty decimal(16,6) default NULL,
|
||||
dps tinyint(3) unsigned default NULL
|
||||
);
|
||||
INSERT INTO t1 VALUES (1.1325,3);
|
||||
SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
|
||||
ROUND(qty,3) dps ROUND(qty,dps)
|
||||
1.133 3 1.133
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
drop table if exists t1,t2;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
||||
create table t1 (id int not null, f_id int not null, f int not null,
|
||||
primary key(f_id, id)) engine = InnoDB;
|
||||
create table t2 (id int not null,s_id int not null,s varchar(200),
|
||||
|
|
|
@ -970,3 +970,8 @@ set global server_id =@my_server_id;
|
|||
set global slow_launch_time =@my_slow_launch_time;
|
||||
set global storage_engine =@my_storage_engine;
|
||||
set global thread_cache_size =@my_thread_cache_size;
|
||||
show global variables where Variable_name='table_definition_cache' or
|
||||
Variable_name='table_lock_wait_timeout';
|
||||
Variable_name Value
|
||||
table_definition_cache #
|
||||
table_lock_wait_timeout #
|
||||
|
|
|
@ -23,6 +23,9 @@ c
|
|||
5
|
||||
6
|
||||
11
|
||||
select is_updatable from information_schema.views where table_name='v1';
|
||||
is_updatable
|
||||
NO
|
||||
create temporary table t1 (a int, b int);
|
||||
select * from t1;
|
||||
a b
|
||||
|
@ -322,6 +325,12 @@ create table t1 (a int, b int, primary key(a));
|
|||
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
select is_updatable from information_schema.views where table_name='v2';
|
||||
is_updatable
|
||||
NO
|
||||
select is_updatable from information_schema.views where table_name='v1';
|
||||
is_updatable
|
||||
YES
|
||||
update v1 set c=a+c;
|
||||
ERROR HY000: Column 'c' is not updatable
|
||||
update v2 set a=a+c;
|
||||
|
@ -604,6 +613,10 @@ insert into t1 values(5,'Hello, world of views');
|
|||
create view v1 as select * from t1;
|
||||
create view v2 as select * from v1;
|
||||
update v2 set col2='Hello, view world';
|
||||
select is_updatable from information_schema.views;
|
||||
is_updatable
|
||||
YES
|
||||
YES
|
||||
select * from t1;
|
||||
col1 col2
|
||||
5 Hello, view world
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# This test is to verify replication with PS
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||
|
||||
-- disable_query_log
|
||||
|
|
1
mysql-test/t/error_simulation-master.opt
Normal file
1
mysql-test/t/error_simulation-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--loose-debug=d,raise_error
|
30
mysql-test/t/error_simulation.test
Normal file
30
mysql-test/t/error_simulation.test
Normal file
|
@ -0,0 +1,30 @@
|
|||
-- source include/have_debug.inc
|
||||
|
||||
#
|
||||
# Bug #28499: crash for grouping query when tmp_table_size is too small
|
||||
#
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a varchar(32) character set utf8 collate utf8_bin NOT NULL,
|
||||
b varchar(32) character set utf8 collate utf8_bin NOT NULL )
|
||||
ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
('AAAAAAAAAA','AAAAAAAAAA'), ('AAAAAAAAAB','AAAAAAAAAB '),
|
||||
('AAAAAAAAAB','AAAAAAAAAB'), ('AAAAAAAAAC','AAAAAAAAAC'),
|
||||
('AAAAAAAAAD','AAAAAAAAAD'), ('AAAAAAAAAE','AAAAAAAAAE'),
|
||||
('AAAAAAAAAF','AAAAAAAAAF'), ('AAAAAAAAAG','AAAAAAAAAG'),
|
||||
('AAAAAAAAAH','AAAAAAAAAH'), ('AAAAAAAAAI','AAAAAAAAAI'),
|
||||
('AAAAAAAAAJ','AAAAAAAAAJ'), ('AAAAAAAAAK','AAAAAAAAAK');
|
||||
|
||||
set tmp_table_size=1024;
|
||||
|
||||
--replace_regex /in table '[^']+'/in table 'tmp_table'/
|
||||
--error ER_DUP_KEY
|
||||
SELECT MAX(a) FROM t1 GROUP BY a,b;
|
||||
|
||||
set tmp_table_size=default;
|
||||
|
||||
DROP TABLE t1;
|
|
@ -558,6 +558,19 @@ SELECT Overlaps(@horiz1, @point2) FROM DUAL;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#28763: Selecting geometry fields in UNION caused server crash.
|
||||
#
|
||||
create table t1(f1 geometry, f2 point, f3 linestring);
|
||||
select f1 from t1 union select f1 from t1;
|
||||
insert into t1 (f2,f3) values (GeomFromText('POINT(1 1)'),
|
||||
GeomFromText('LINESTRING(0 0,1 1,2 2)'));
|
||||
select AsText(f2),AsText(f3) from t1;
|
||||
select AsText(a) from (select f2 as a from t1 union select f3 from t1) t;
|
||||
create table t2 as select f2 as a from t1 union select f3 from t1;
|
||||
desc t2;
|
||||
select AsText(a) from t2;
|
||||
drop table t1, t2;
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
|
|
|
@ -555,5 +555,35 @@ drop database mysqltest_1;
|
|||
drop database mysqltest_2;
|
||||
drop user mysqltest_u1@localhost;
|
||||
|
||||
#
|
||||
# Bug#18660 Can't grant any privileges on single table in database
|
||||
# with underscore char
|
||||
#
|
||||
grant all on `mysqltest\_%`.* to mysqltest_1@localhost with grant option;
|
||||
grant usage on *.* to mysqltest_2@localhost;
|
||||
connect (con18600_1,localhost,mysqltest_1,,);
|
||||
|
||||
create database mysqltest_1;
|
||||
use mysqltest_1;
|
||||
create table t1 (f1 int);
|
||||
|
||||
grant create on `mysqltest\_1`.* to mysqltest_2@localhost;
|
||||
grant select on mysqltest_1.t1 to mysqltest_2@localhost;
|
||||
connect (con3,localhost,mysqltest_2,,);
|
||||
connection con3;
|
||||
--error 1044
|
||||
create database mysqltest_3;
|
||||
use mysqltest_1;
|
||||
create table t2(f1 int);
|
||||
select * from t1;
|
||||
connection default;
|
||||
drop database mysqltest_1;
|
||||
|
||||
revoke all privileges, grant option from mysqltest_1@localhost;
|
||||
revoke all privileges, grant option from mysqltest_2@localhost;
|
||||
drop user mysqltest_1@localhost;
|
||||
drop user mysqltest_2@localhost;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
|
|
@ -780,7 +780,7 @@ INSERT INTO t1 SELECT a + 8,b FROM t1;
|
|||
INSERT INTO t1 SELECT a + 16,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 32,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 64,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 128,b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 128,b FROM t1 limit 16;
|
||||
ANALYZE TABLE t1;
|
||||
EXPLAIN SELECT a FROM t1 WHERE a < 2;
|
||||
EXPLAIN SELECT a FROM t1 WHERE a < 2 ORDER BY a;
|
||||
|
|
|
@ -1024,6 +1024,21 @@ where t.table_schema = 'information_schema' and
|
|||
group by c2.column_type order by num limit 1)
|
||||
group by t.table_name order by num1, t.table_name;
|
||||
|
||||
#
|
||||
# Bug#28266 IS_UPDATABLE field on VIEWS table in I_S database is wrong
|
||||
#
|
||||
create table t1(f1 int);
|
||||
create view v1 as select f1+1 as a from t1;
|
||||
create table t2 (f1 int, f2 int);
|
||||
create view v2 as select f1+1 as a, f2 as b from t2;
|
||||
select table_name, is_updatable from information_schema.views;
|
||||
#
|
||||
# Note: we can perform 'delete' for non updatable view.
|
||||
#
|
||||
delete from v1;
|
||||
drop view v1,v2;
|
||||
drop table t1,t2;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
#
|
||||
# Show engines
|
||||
|
|
|
@ -290,3 +290,19 @@ INSERT IGNORE INTO t1 (id,c1) SELECT * FROM t2
|
|||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#28904: INSERT .. ON DUPLICATE was silently updating rows when it
|
||||
# shouldn't.
|
||||
#
|
||||
create table t1(f1 int primary key,
|
||||
f2 timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);
|
||||
insert into t1(f1) values(1);
|
||||
--replace_column 1 #
|
||||
select @stamp1:=f2 from t1;
|
||||
--sleep 2
|
||||
insert into t1(f1) values(1) on duplicate key update f1=1;
|
||||
--replace_column 1 #
|
||||
select @stamp2:=f2 from t1;
|
||||
select if( @stamp1 = @stamp2, "correct", "wrong");
|
||||
drop table t1;
|
||||
|
|
|
@ -1448,4 +1448,35 @@ drop table t1;
|
|||
create table t1 (s1 bigint) partition by list (s1) (partition p1 values in (-9223372036854775808));
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #28488: Incorrect information in file: './test/t1_test#.frm'
|
||||
#
|
||||
|
||||
CREATE TABLE t1(a INT NOT NULL, b TINYBLOB, KEY(a))
|
||||
PARTITION BY RANGE(a) ( PARTITION p0 VALUES LESS THAN (32));
|
||||
INSERT INTO t1 VALUES (1, REPEAT('a', 10));
|
||||
INSERT INTO t1 SELECT a + 1, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 4, b FROM t1;
|
||||
INSERT INTO t1 SELECT a + 8, b FROM t1;
|
||||
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION p1 VALUES LESS THAN (64));
|
||||
ALTER TABLE t1 DROP PARTITION p1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #27816: Log tables ran with partitions crashes the server when logging
|
||||
# is enabled.
|
||||
#
|
||||
|
||||
USE mysql;
|
||||
SET GLOBAL general_log = 0;
|
||||
ALTER TABLE general_log ENGINE = MyISAM;
|
||||
--error ER_WRONG_USAGE
|
||||
ALTER TABLE general_log PARTITION BY RANGE (TO_DAYS(event_time))
|
||||
(PARTITION p0 VALUES LESS THAN (733144), PARTITION p1 VALUES LESS THAN (3000000));
|
||||
ALTER TABLE general_log ENGINE = CSV;
|
||||
SET GLOBAL general_log = default;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -1821,13 +1821,6 @@ SELECT * FROM t1
|
|||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
#
|
||||
# BUG #10308: purge log with subselect
|
||||
#
|
||||
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
|
||||
|
||||
#
|
||||
# Bug#18503: Queries with a quantified subquery returning empty set may
|
||||
# return a wrong result.
|
||||
|
@ -2920,6 +2913,38 @@ SELECT * FROM (SELECT count(*) FROM t1 GROUP BY a) as res;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #28811: crash for query containing subquery with ORDER BY and LIMIT 1
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a varchar(255) default NULL,
|
||||
b timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
||||
INDEX idx(a,b)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
a varchar(255) default NULL
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES ('abcdefghijk','2007-05-07 06:00:24');
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO `t1` VALUES ('asdf','2007-02-08 01:11:26');
|
||||
INSERT INTO `t2` VALUES ('abcdefghijk');
|
||||
INSERT INTO `t2` VALUES ('asdf');
|
||||
|
||||
SET session sort_buffer_size=8192;
|
||||
|
||||
SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# BUG #10308: purge log with subselect
|
||||
# BUG#10308: purge log with subselect
|
||||
# Bug#28553: mysqld crash in "purge master log before(select time from information_schema)"
|
||||
#
|
||||
|
||||
--error 1064
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
|
||||
purge master logs before adddate(current_timestamp(), interval -4 day);
|
||||
|
|
|
@ -1763,6 +1763,9 @@ select * from t1;
|
|||
select * from t3;
|
||||
drop table t1, t2, t3;
|
||||
|
||||
disconnect addconroot1;
|
||||
disconnect addconroot2;
|
||||
disconnect addconwithoutdb;
|
||||
#
|
||||
# Bug #26162: Trigger DML ignores low_priority_updates setting
|
||||
#
|
||||
|
@ -1776,19 +1779,23 @@ INSERT INTO t2 VALUES (1),(2);
|
|||
CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW
|
||||
INSERT INTO t2 VALUES (new.id);
|
||||
|
||||
CONNECT (rl_holder, localhost, root,,);
|
||||
CONNECT (rl_acquirer, localhost, root,,);
|
||||
CONNECT (wl_acquirer, localhost, root,,);
|
||||
CONNECT (rl_contender, localhost, root,,);
|
||||
|
||||
SELECT GET_LOCK('B26162',20);
|
||||
CONNECTION rl_holder;
|
||||
SELECT GET_LOCK('B26162',120);
|
||||
|
||||
CONNECTION rl_acquirer;
|
||||
--send
|
||||
SELECT 'rl_acquirer', GET_LOCK('B26162',5), id FROM t2 WHERE id = 1;
|
||||
SELECT 'rl_acquirer', GET_LOCK('B26162',120), id FROM t2 WHERE id = 1;
|
||||
|
||||
CONNECTION wl_acquirer;
|
||||
SET SESSION LOW_PRIORITY_UPDATES=1;
|
||||
SET GLOBAL LOW_PRIORITY_UPDATES=1;
|
||||
#need to wait for rl_acquirer to lock on the B26162 lock
|
||||
sleep 2;
|
||||
--send
|
||||
INSERT INTO t1 VALUES (5);
|
||||
|
||||
|
@ -1798,13 +1805,16 @@ CONNECTION rl_contender;
|
|||
--send
|
||||
SELECT 'rl_contender', id FROM t2 WHERE id > 1;
|
||||
|
||||
CONNECTION default;
|
||||
CONNECTION rl_holder;
|
||||
#need to wait for wl_acquirer and rl_contender to lock on t2
|
||||
sleep 2;
|
||||
SELECT RELEASE_LOCK('B26162');
|
||||
|
||||
CONNECTION wl_acquirer;
|
||||
--reap
|
||||
CONNECTION rl_acquirer;
|
||||
--reap
|
||||
SELECT RELEASE_LOCK('B26162');
|
||||
CONNECTION wl_acquirer;
|
||||
--reap
|
||||
CONNECTION rl_contender;
|
||||
--reap
|
||||
|
||||
|
@ -1812,6 +1822,7 @@ CONNECTION default;
|
|||
DISCONNECT rl_acquirer;
|
||||
DISCONNECT wl_acquirer;
|
||||
DISCONNECT rl_contender;
|
||||
DISCONNECT rl_holder;
|
||||
|
||||
DROP TRIGGER t1_test;
|
||||
DROP TABLE t1,t2;
|
||||
|
|
|
@ -272,6 +272,16 @@ select if(@bug28261 = f1, '', @bug28261:= f1) from t1;
|
|||
select if(@bug28261 = f1, '', @bug28261:= f1) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#28778: Wrong result of BETWEEN when comparing a DATETIME field with an
|
||||
# integer constants.
|
||||
#
|
||||
create table t1(f1 datetime);
|
||||
insert into t1 values('2001-01-01'),('2002-02-02');
|
||||
select * from t1 where f1 between 20020101 and 20070101000000;
|
||||
select * from t1 where f1 between 2002010 and 20070101000000;
|
||||
select * from t1 where f1 between 20020101 and 2007010100000;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test of storing datetime into date fields
|
||||
|
|
|
@ -394,3 +394,17 @@ create table t1 as
|
|||
from (select 1 as s,'t' as t union select null, null ) as sub1;
|
||||
select group_concat(t) from t1 group by week(date)/10;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#28980: ROUND(<dec expr>, <int col>) returned double values
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
qty decimal(16,6) default NULL,
|
||||
dps tinyint(3) unsigned default NULL
|
||||
);
|
||||
INSERT INTO t1 VALUES (1.1325,3);
|
||||
|
||||
SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -760,3 +760,9 @@ set global slow_launch_time =@my_slow_launch_time;
|
|||
set global storage_engine =@my_storage_engine;
|
||||
set global thread_cache_size =@my_thread_cache_size;
|
||||
|
||||
#
|
||||
# Bug#28580 Repeatation of status variables
|
||||
#
|
||||
--replace_column 2 #
|
||||
show global variables where Variable_name='table_definition_cache' or
|
||||
Variable_name='table_lock_wait_timeout';
|
||||
|
|
|
@ -32,6 +32,7 @@ create view v1 (c,d) as select a,b from t1
|
|||
# simple view
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
select c from v1;
|
||||
select is_updatable from information_schema.views where table_name='v1';
|
||||
|
||||
# temporary table should not hide table of view
|
||||
create temporary table t1 (a int, b int);
|
||||
|
@ -228,6 +229,8 @@ create table t1 (a int, b int, primary key(a));
|
|||
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
select is_updatable from information_schema.views where table_name='v2';
|
||||
select is_updatable from information_schema.views where table_name='v1';
|
||||
# try to update expression
|
||||
-- error 1348
|
||||
update v1 set c=a+c;
|
||||
|
@ -497,6 +500,7 @@ insert into t1 values(5,'Hello, world of views');
|
|||
create view v1 as select * from t1;
|
||||
create view v2 as select * from v1;
|
||||
update v2 set col2='Hello, view world';
|
||||
select is_updatable from information_schema.views;
|
||||
select * from t1;
|
||||
drop view v2, v1;
|
||||
drop table t1;
|
||||
|
|
|
@ -6395,7 +6395,8 @@ uint Field_string::get_key_image(uchar *buff, uint length, imagetype type_arg)
|
|||
length / field_charset->mbmaxlen);
|
||||
memcpy(buff, ptr, bytes);
|
||||
if (bytes < length)
|
||||
bzero(buff + bytes, length - bytes);
|
||||
field_charset->cset->fill(field_charset, (char*) buff + bytes,
|
||||
length - bytes, field_charset->pad_char);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
|
|
@ -423,6 +423,12 @@ public:
|
|||
return field_length / charset()->mbmaxlen;
|
||||
}
|
||||
|
||||
virtual geometry_type get_geometry_type()
|
||||
{
|
||||
/* shouldn't get here. */
|
||||
DBUG_ASSERT(0);
|
||||
return GEOM_GEOMETRY;
|
||||
}
|
||||
/* Hash value */
|
||||
virtual void hash(ulong *nr, ulong *nr2);
|
||||
friend bool reopen_table(THD *,struct st_table *,bool);
|
||||
|
@ -1415,6 +1421,7 @@ public:
|
|||
uint get_key_image(uchar *buff,uint length,imagetype type);
|
||||
uint size_of() const { return sizeof(*this); }
|
||||
int reset(void) { return !maybe_null() || Field_blob::reset(); }
|
||||
geometry_type get_geometry_type() { return geom_type; };
|
||||
};
|
||||
#endif /*HAVE_SPATIAL*/
|
||||
|
||||
|
|
|
@ -35,7 +35,8 @@ if (my_b_write((file),(uchar*) (from),param->ref_length)) \
|
|||
|
||||
/* functions defined in this file */
|
||||
|
||||
static char **make_char_array(register uint fields, uint length, myf my_flag);
|
||||
static char **make_char_array(char **old_pos, register uint fields,
|
||||
uint length, myf my_flag);
|
||||
static BUFFPEK *read_buffpek_from_file(IO_CACHE *buffer_file, uint count);
|
||||
static ha_rows find_all_keys(SORTPARAM *param,SQL_SELECT *select,
|
||||
uchar * *sort_keys, IO_CACHE *buffer_file,
|
||||
|
@ -208,9 +209,9 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||
ulong old_memavl;
|
||||
ulong keys= memavl/(param.rec_length+sizeof(char*));
|
||||
param.keys=(uint) min(records+1, keys);
|
||||
if (table_sort.sort_keys ||
|
||||
(table_sort.sort_keys= (uchar **) make_char_array(param.keys, param.rec_length,
|
||||
MYF(0))))
|
||||
if ((table_sort.sort_keys=
|
||||
(uchar **) make_char_array((char **) table_sort.sort_keys,
|
||||
param.keys, param.rec_length, MYF(0))))
|
||||
break;
|
||||
old_memavl=memavl;
|
||||
if ((memavl=memavl/4*3) < min_sort_memory && old_memavl > min_sort_memory)
|
||||
|
@ -352,14 +353,16 @@ void filesort_free_buffers(TABLE *table, bool full)
|
|||
|
||||
/* Make a array of string pointers */
|
||||
|
||||
static char **make_char_array(register uint fields, uint length, myf my_flag)
|
||||
static char **make_char_array(char **old_pos, register uint fields,
|
||||
uint length, myf my_flag)
|
||||
{
|
||||
register char **pos;
|
||||
char **old_pos,*char_pos;
|
||||
char *char_pos;
|
||||
DBUG_ENTER("make_char_array");
|
||||
|
||||
if ((old_pos= (char**) my_malloc((uint) fields*(length+sizeof(char*)),
|
||||
my_flag)))
|
||||
if (old_pos ||
|
||||
(old_pos= (char**) my_malloc((uint) fields*(length+sizeof(char*)),
|
||||
my_flag)))
|
||||
{
|
||||
pos=old_pos; char_pos=((char*) (pos+fields)) -length;
|
||||
while (fields--) *(pos++) = (char_pos+= length);
|
||||
|
|
|
@ -1392,6 +1392,25 @@ bool ha_flush_logs(handlerton *db_type)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static const char *check_lowercase_names(handler *file, const char *path,
|
||||
char *tmp_path)
|
||||
{
|
||||
if (lower_case_table_names != 2 || (file->ha_table_flags() & HA_FILE_BASED))
|
||||
return path;
|
||||
|
||||
/* Ensure that table handler get path in lower case */
|
||||
if (tmp_path != path)
|
||||
strmov(tmp_path, path);
|
||||
|
||||
/*
|
||||
we only should turn into lowercase database/table part
|
||||
so start the process after homedirectory
|
||||
*/
|
||||
my_casedn_str(files_charset_info, tmp_path + mysql_data_home_len);
|
||||
return tmp_path;
|
||||
}
|
||||
|
||||
|
||||
/** @brief
|
||||
This should return ENOENT if the file doesn't exists.
|
||||
The .frm file will be deleted only if we return 0 or ENOENT
|
||||
|
@ -1415,13 +1434,7 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path,
|
|||
! (file=get_new_handler((TABLE_SHARE*)0, thd->mem_root, table_type)))
|
||||
DBUG_RETURN(ENOENT);
|
||||
|
||||
if (lower_case_table_names == 2 && !(file->ha_table_flags() & HA_FILE_BASED))
|
||||
{
|
||||
/* Ensure that table handler get path in lower case */
|
||||
strmov(tmp_path, path);
|
||||
my_casedn_str(files_charset_info, tmp_path);
|
||||
path= tmp_path;
|
||||
}
|
||||
path= check_lowercase_names(file, path, tmp_path);
|
||||
if ((error= file->delete_table(path)) && generate_warning)
|
||||
{
|
||||
/*
|
||||
|
@ -2598,15 +2611,7 @@ int ha_create_table(THD *thd, const char *path,
|
|||
if (update_create_info)
|
||||
update_create_info_from_table(create_info, &table);
|
||||
|
||||
name= share.path.str;
|
||||
if (lower_case_table_names == 2 &&
|
||||
!(table.file->ha_table_flags() & HA_FILE_BASED))
|
||||
{
|
||||
/* Ensure that handler gets name in lower case */
|
||||
strmov(name_buff, name);
|
||||
my_casedn_str(files_charset_info, name_buff);
|
||||
name= name_buff;
|
||||
}
|
||||
name= check_lowercase_names(table.file, share.path.str, name_buff);
|
||||
|
||||
error= table.file->create(name, &table, create_info);
|
||||
VOID(closefrm(&table, 0));
|
||||
|
@ -2656,7 +2661,8 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name)
|
|||
frmblob and frmlen are set, write the frm to disk
|
||||
*/
|
||||
|
||||
(void)strxnmov(path,FN_REFLEN-1,mysql_data_home,"/",db,"/",name,NullS);
|
||||
(void)strxnmov(path,FN_REFLEN-1,mysql_data_home,FN_ROOTDIR,
|
||||
db,FN_ROOTDIR,name,NullS);
|
||||
// Save the frm file
|
||||
error= writefrm(path, frmblob, frmlen);
|
||||
my_free(frmblob, MYF(0));
|
||||
|
@ -2677,12 +2683,7 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name)
|
|||
update_create_info_from_table(&create_info, &table);
|
||||
create_info.table_options|= HA_OPTION_CREATE_FROM_ENGINE;
|
||||
|
||||
if (lower_case_table_names == 2 &&
|
||||
!(table.file->ha_table_flags() & HA_FILE_BASED))
|
||||
{
|
||||
/* Ensure that handler gets name in lower case */
|
||||
my_casedn_str(files_charset_info, path);
|
||||
}
|
||||
check_lowercase_names(table.file, path, path);
|
||||
error=table.file->create(path,&table,&create_info);
|
||||
VOID(closefrm(&table, 1));
|
||||
|
||||
|
|
10
sql/item.cc
10
sql/item.cc
|
@ -4404,9 +4404,11 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
|
|||
field= new Field_blob(max_length, maybe_null, name, collation.collation);
|
||||
break; // Blob handled outside of case
|
||||
case MYSQL_TYPE_GEOMETRY:
|
||||
return new Field_geom(max_length, maybe_null, name, table->s,
|
||||
field= new Field_geom(max_length, maybe_null, name, table->s,
|
||||
(Field::geometry_type)
|
||||
((Item_geometry_func *)this)->get_geometry_type());
|
||||
((type() == Item::TYPE_HOLDER) ?
|
||||
((Item_type_holder *)this)->get_geometry_type() :
|
||||
((Item_geometry_func *)this)->get_geometry_type()));
|
||||
}
|
||||
if (field)
|
||||
field->init(table);
|
||||
|
@ -6515,6 +6517,10 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item)
|
|||
if (Field::result_merge_type(fld_type) == INT_RESULT)
|
||||
decimals= 0;
|
||||
prev_decimal_int_part= item->decimal_int_part();
|
||||
if (item->field_type() == MYSQL_TYPE_GEOMETRY)
|
||||
geometry_type= (item->type() == Item::FIELD_ITEM) ?
|
||||
((Item_field *)item)->get_geometry_type() :
|
||||
(Field::geometry_type)((Item_geometry_func *)item)->get_geometry_type();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1399,6 +1399,11 @@ public:
|
|||
int fix_outer_field(THD *thd, Field **field, Item **reference);
|
||||
virtual Item *update_value_transformer(uchar *select_arg);
|
||||
void print(String *str);
|
||||
Field::geometry_type get_geometry_type()
|
||||
{
|
||||
DBUG_ASSERT(field_type() == MYSQL_TYPE_GEOMETRY);
|
||||
return field->get_geometry_type();
|
||||
}
|
||||
friend class Item_default_value;
|
||||
friend class Item_insert_value;
|
||||
friend class st_select_lex_unit;
|
||||
|
@ -2699,6 +2704,7 @@ class Item_type_holder: public Item
|
|||
protected:
|
||||
TYPELIB *enum_set_typelib;
|
||||
enum_field_types fld_type;
|
||||
Field::geometry_type geometry_type;
|
||||
|
||||
void get_full_info(Item *item);
|
||||
|
||||
|
@ -2718,6 +2724,7 @@ public:
|
|||
Field *make_field_by_type(TABLE *table);
|
||||
static uint32 display_length(Item *item);
|
||||
static enum_field_types get_real_type(Item *);
|
||||
Field::geometry_type get_geometry_type() { return geometry_type; };
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1772,6 +1772,7 @@ void Item_func_between::fix_length_and_dec()
|
|||
int i;
|
||||
bool datetime_found= FALSE;
|
||||
compare_as_dates= TRUE;
|
||||
THD *thd= current_thd;
|
||||
|
||||
/*
|
||||
As some compare functions are generated after sql_yacc,
|
||||
|
@ -1810,6 +1811,23 @@ void Item_func_between::fix_length_and_dec()
|
|||
ge_cmp.set_datetime_cmp_func(args, args + 1);
|
||||
le_cmp.set_datetime_cmp_func(args, args + 2);
|
||||
}
|
||||
else if (args[0]->real_item()->type() == FIELD_ITEM &&
|
||||
thd->lex->sql_command != SQLCOM_CREATE_VIEW &&
|
||||
thd->lex->sql_command != SQLCOM_SHOW_CREATE)
|
||||
{
|
||||
Field *field=((Item_field*) (args[0]->real_item()))->field;
|
||||
if (field->can_be_compared_as_longlong())
|
||||
{
|
||||
/*
|
||||
The following can't be recoded with || as convert_constant_item
|
||||
changes the argument
|
||||
*/
|
||||
if (convert_constant_item(thd, field,&args[1]))
|
||||
cmp_type=INT_RESULT; // Works for all types.
|
||||
if (convert_constant_item(thd, field,&args[2]))
|
||||
cmp_type=INT_RESULT; // Works for all types.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1954,7 +1954,13 @@ void Item_func_round::fix_length_and_dec()
|
|||
{
|
||||
max_length= args[0]->max_length;
|
||||
decimals= args[0]->decimals;
|
||||
hybrid_type= REAL_RESULT;
|
||||
if (args[0]->result_type() == DECIMAL_RESULT)
|
||||
{
|
||||
max_length++;
|
||||
hybrid_type= DECIMAL_RESULT;
|
||||
}
|
||||
else
|
||||
hybrid_type= REAL_RESULT;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3439,6 +3445,7 @@ longlong Item_func_get_lock::val_int()
|
|||
THD *thd=current_thd;
|
||||
User_level_lock *ull;
|
||||
int error;
|
||||
DBUG_ENTER("Item_func_get_lock::val_int");
|
||||
|
||||
/*
|
||||
In slave thread no need to get locks, everything is serialized. Anyway
|
||||
|
@ -3448,7 +3455,7 @@ longlong Item_func_get_lock::val_int()
|
|||
it's not guaranteed to be same as on master.
|
||||
*/
|
||||
if (thd->slave_thread)
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
|
||||
pthread_mutex_lock(&LOCK_user_locks);
|
||||
|
||||
|
@ -3456,8 +3463,10 @@ longlong Item_func_get_lock::val_int()
|
|||
{
|
||||
pthread_mutex_unlock(&LOCK_user_locks);
|
||||
null_value=1;
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
DBUG_PRINT("info", ("lock %.*s, thd=%ld", res->length(), res->ptr(),
|
||||
(long) thd->real_id));
|
||||
null_value=0;
|
||||
|
||||
if (thd->ull)
|
||||
|
@ -3477,14 +3486,16 @@ longlong Item_func_get_lock::val_int()
|
|||
delete ull;
|
||||
pthread_mutex_unlock(&LOCK_user_locks);
|
||||
null_value=1; // Probably out of memory
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
ull->set_thread(thd);
|
||||
thd->ull=ull;
|
||||
pthread_mutex_unlock(&LOCK_user_locks);
|
||||
return 1; // Got new lock
|
||||
DBUG_PRINT("info", ("made new lock"));
|
||||
DBUG_RETURN(1); // Got new lock
|
||||
}
|
||||
ull->count++;
|
||||
DBUG_PRINT("info", ("ull->count=%d", ull->count));
|
||||
|
||||
/*
|
||||
Structure is now initialized. Try to get the lock.
|
||||
|
@ -3498,9 +3509,13 @@ longlong Item_func_get_lock::val_int()
|
|||
error= 0;
|
||||
while (ull->locked && !thd->killed)
|
||||
{
|
||||
DBUG_PRINT("info", ("waiting on lock"));
|
||||
error= pthread_cond_timedwait(&ull->cond,&LOCK_user_locks,&abstime);
|
||||
if (error == ETIMEDOUT || error == ETIME)
|
||||
{
|
||||
DBUG_PRINT("info", ("lock wait timeout"));
|
||||
break;
|
||||
}
|
||||
error= 0;
|
||||
}
|
||||
|
||||
|
@ -3524,6 +3539,7 @@ longlong Item_func_get_lock::val_int()
|
|||
ull->thread_id= thd->thread_id;
|
||||
thd->ull=ull;
|
||||
error=0;
|
||||
DBUG_PRINT("info", ("got the lock"));
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_user_locks);
|
||||
|
||||
|
@ -3533,7 +3549,7 @@ longlong Item_func_get_lock::val_int()
|
|||
thd->mysys_var->current_cond= 0;
|
||||
pthread_mutex_unlock(&thd->mysys_var->mutex);
|
||||
|
||||
return !error ? 1 : 0;
|
||||
DBUG_RETURN(!error ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3551,11 +3567,14 @@ longlong Item_func_release_lock::val_int()
|
|||
String *res=args[0]->val_str(&value);
|
||||
User_level_lock *ull;
|
||||
longlong result;
|
||||
THD *thd=current_thd;
|
||||
DBUG_ENTER("Item_func_release_lock::val_int");
|
||||
if (!res || !res->length())
|
||||
{
|
||||
null_value=1;
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
DBUG_PRINT("info", ("lock %.*s", res->length(), res->ptr()));
|
||||
null_value=0;
|
||||
|
||||
result=0;
|
||||
|
@ -3568,15 +3587,20 @@ longlong Item_func_release_lock::val_int()
|
|||
}
|
||||
else
|
||||
{
|
||||
DBUG_PRINT("info", ("ull->locked=%d ull->thread=%lu thd=%lu",
|
||||
(int) ull->locked,
|
||||
(long)ull->thread_id,
|
||||
(long)thd->thread_id));
|
||||
if (ull->locked && current_thd->thread_id == ull->thread_id)
|
||||
{
|
||||
DBUG_PRINT("info", ("release lock"));
|
||||
result=1; // Release is ok
|
||||
item_user_lock_release(ull);
|
||||
current_thd->ull=0;
|
||||
thd->ull=0;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_user_locks);
|
||||
return result;
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3364,7 +3364,7 @@ String *Item_func_uuid::val_str(String *str)
|
|||
*--s=_dig_vec_lower[mac[i] >> 4];
|
||||
}
|
||||
randominit(&uuid_rand, tmp + (ulong) server_start_time,
|
||||
tmp + thd->status_var.bytes_sent);
|
||||
tmp + (ulong) thd->status_var.bytes_sent);
|
||||
set_clock_seq_str();
|
||||
}
|
||||
|
||||
|
|
|
@ -296,6 +296,8 @@ bool Log_to_csv_event_handler::open_log_table(uint log_table_type)
|
|||
table->db= log_thd->db;
|
||||
table->db_length= log_thd->db_length;
|
||||
|
||||
lex_start(log_thd);
|
||||
log_thd->clear_error();
|
||||
if (simple_open_n_lock_tables(log_thd, table) ||
|
||||
table->table->file->extra(HA_EXTRA_MARK_AS_LOG_TABLE) ||
|
||||
table->table->file->ha_rnd_init(0))
|
||||
|
|
|
@ -1598,6 +1598,7 @@ extern int creating_table; // How many mysql_create_table() are running
|
|||
*/
|
||||
|
||||
extern time_t server_start_time;
|
||||
extern uint mysql_data_home_len;
|
||||
extern char *mysql_data_home,server_version[SERVER_VERSION_LENGTH],
|
||||
mysql_real_data_home[], *opt_mysql_tmpdir, mysql_charsets_dir[],
|
||||
def_ft_boolean_syntax[sizeof(ft_boolean_syntax)];
|
||||
|
@ -1920,6 +1921,8 @@ uint filename_to_tablename(const char *from, char *to, uint to_length);
|
|||
uint tablename_to_filename(const char *from, char *to, uint to_length);
|
||||
uint build_table_filename(char *buff, size_t bufflen, const char *db,
|
||||
const char *table, const char *ext, uint flags);
|
||||
uint build_table_shadow_filename(char *buff, size_t bufflen,
|
||||
ALTER_PARTITION_PARAM_TYPE *lpt);
|
||||
/* Flags for conversion functions. */
|
||||
#define FN_FROM_IS_TMP (1 << 0)
|
||||
#define FN_TO_IS_TMP (1 << 1)
|
||||
|
|
|
@ -489,6 +489,7 @@ key_map key_map_full(0); // Will be initialized later
|
|||
|
||||
const char *opt_date_time_formats[3];
|
||||
|
||||
uint mysql_data_home_len;
|
||||
char mysql_data_home_buff[2], *mysql_data_home=mysql_real_data_home;
|
||||
char server_version[SERVER_VERSION_LENGTH];
|
||||
char *mysqld_unix_port, *opt_mysql_tmpdir;
|
||||
|
@ -3778,6 +3779,7 @@ int main(int argc, char **argv)
|
|||
mysql_data_home= mysql_data_home_buff;
|
||||
mysql_data_home[0]=FN_CURLIB; // all paths are relative from here
|
||||
mysql_data_home[1]=0;
|
||||
mysql_data_home_len= 2;
|
||||
|
||||
if ((user_info= check_user(mysqld_user)))
|
||||
{
|
||||
|
@ -6681,8 +6683,8 @@ SHOW_VAR status_vars[]= {
|
|||
{"Aborted_connects", (char*) &aborted_connects, SHOW_LONG},
|
||||
{"Binlog_cache_disk_use", (char*) &binlog_cache_disk_use, SHOW_LONG},
|
||||
{"Binlog_cache_use", (char*) &binlog_cache_use, SHOW_LONG},
|
||||
{"Bytes_received", (char*) offsetof(STATUS_VAR, bytes_received), SHOW_LONG_STATUS},
|
||||
{"Bytes_sent", (char*) offsetof(STATUS_VAR, bytes_sent), SHOW_LONG_STATUS},
|
||||
{"Bytes_received", (char*) offsetof(STATUS_VAR, bytes_received), SHOW_LONGLONG_STATUS},
|
||||
{"Bytes_sent", (char*) offsetof(STATUS_VAR, bytes_sent), SHOW_LONGLONG_STATUS},
|
||||
{"Com_admin_commands", (char*) offsetof(STATUS_VAR, com_other), SHOW_LONG_STATUS},
|
||||
{"Com_alter_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_DB]), SHOW_LONG_STATUS},
|
||||
{"Com_alter_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_EVENT]), SHOW_LONG_STATUS},
|
||||
|
@ -7064,6 +7066,7 @@ static void mysql_init_variables(void)
|
|||
sizeof(mysql_real_data_home)-1);
|
||||
mysql_data_home_buff[0]=FN_CURLIB; // all paths are relative from here
|
||||
mysql_data_home_buff[1]=0;
|
||||
mysql_data_home_len= 2;
|
||||
|
||||
/* Replication parameters */
|
||||
master_user= (char*) "test";
|
||||
|
@ -7225,6 +7228,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||
strmake(mysql_real_data_home,argument, sizeof(mysql_real_data_home)-1);
|
||||
/* Correct pointer set by my_getopt (for embedded library) */
|
||||
mysql_data_home= mysql_real_data_home;
|
||||
mysql_data_home_len= strlen(mysql_data_home);
|
||||
break;
|
||||
case 'u':
|
||||
if (!mysqld_user || !strcmp(mysqld_user, argument))
|
||||
|
|
|
@ -699,8 +699,6 @@ static SHOW_VAR fixed_vars[]= {
|
|||
#ifdef HAVE_SYS_UN_H
|
||||
{"socket", (char*) &mysqld_unix_port, SHOW_CHAR_PTR},
|
||||
#endif
|
||||
{"table_definition_cache", (char*) &table_def_size, SHOW_LONG},
|
||||
{"table_lock_wait_timeout", (char*) &table_lock_wait_timeout, SHOW_LONG },
|
||||
#ifdef HAVE_THR_SETCONCURRENCY
|
||||
{"thread_concurrency", (char*) &concurrency, SHOW_LONG},
|
||||
#endif
|
||||
|
|
|
@ -73,6 +73,7 @@ typedef struct st_copy_info {
|
|||
ha_rows updated;
|
||||
ha_rows copied;
|
||||
ha_rows error_count;
|
||||
ha_rows touched; /* Number of touched records */
|
||||
enum enum_duplicates handle_duplicates;
|
||||
int escape_char, last_errno;
|
||||
bool ignore;
|
||||
|
@ -343,8 +344,8 @@ struct system_variables
|
|||
|
||||
typedef struct system_status_var
|
||||
{
|
||||
ulong bytes_received;
|
||||
ulong bytes_sent;
|
||||
ulonglong bytes_received;
|
||||
ulonglong bytes_sent;
|
||||
ulong com_other;
|
||||
ulong com_stat[(uint) SQLCOM_END];
|
||||
ulong created_tmp_disk_tables;
|
||||
|
|
|
@ -932,20 +932,24 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||
if (values_list.elements == 1 && (!(thd->options & OPTION_WARNINGS) ||
|
||||
!thd->cuted_fields))
|
||||
{
|
||||
thd->row_count_func= info.copied+info.deleted+info.updated;
|
||||
thd->row_count_func= info.copied + info.deleted +
|
||||
((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||
info.touched : info.updated);
|
||||
send_ok(thd, (ulong) thd->row_count_func, id);
|
||||
}
|
||||
else
|
||||
{
|
||||
char buff[160];
|
||||
ha_rows updated=((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||
info.touched : info.updated);
|
||||
if (ignore)
|
||||
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
||||
(lock_type == TL_WRITE_DELAYED) ? (ulong) 0 :
|
||||
(ulong) (info.records - info.copied), (ulong) thd->cuted_fields);
|
||||
else
|
||||
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
||||
(ulong) (info.deleted+info.updated), (ulong) thd->cuted_fields);
|
||||
thd->row_count_func= info.copied+info.deleted+info.updated;
|
||||
(ulong) (info.deleted + updated), (ulong) thd->cuted_fields);
|
||||
thd->row_count_func= info.copied + info.deleted + updated;
|
||||
::send_ok(thd, (ulong) thd->row_count_func, id, buff);
|
||||
}
|
||||
thd->abort_on_warning= 0;
|
||||
|
@ -1415,19 +1419,20 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||
goto before_trg_err;
|
||||
|
||||
table->file->restore_auto_increment(prev_insert_id);
|
||||
if ((error=table->file->ha_update_row(table->record[1],
|
||||
table->record[0])))
|
||||
{
|
||||
if (info->ignore &&
|
||||
!table->file->is_fatal_error(error, HA_CHECK_DUP_KEY))
|
||||
{
|
||||
goto ok_or_after_trg_err;
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
if ((table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ) ||
|
||||
compare_record(table))
|
||||
compare_record(table))
|
||||
{
|
||||
if ((error=table->file->ha_update_row(table->record[1],
|
||||
table->record[0])))
|
||||
{
|
||||
if (info->ignore &&
|
||||
!table->file->is_fatal_error(error, HA_CHECK_DUP_KEY))
|
||||
{
|
||||
goto ok_or_after_trg_err;
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
|
||||
info->updated++;
|
||||
/*
|
||||
If ON DUP KEY UPDATE updates a row instead of inserting one, it's
|
||||
|
@ -1446,6 +1451,11 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||
info->copied++;
|
||||
}
|
||||
|
||||
if (table->next_number_field)
|
||||
table->file->adjust_next_insert_id_after_explicit_value(
|
||||
table->next_number_field->val_int());
|
||||
info->touched++;
|
||||
|
||||
goto ok_or_after_trg_err;
|
||||
}
|
||||
else /* DUP_REPLACE */
|
||||
|
@ -3136,7 +3146,9 @@ bool select_insert::send_eof()
|
|||
else
|
||||
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
||||
(ulong) (info.deleted+info.updated), (ulong) thd->cuted_fields);
|
||||
thd->row_count_func= info.copied+info.deleted+info.updated;
|
||||
thd->row_count_func= info.copied + info.deleted +
|
||||
((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||
info.touched : info.updated);
|
||||
|
||||
id= (thd->first_successful_insert_id_in_cur_stmt > 0) ?
|
||||
thd->first_successful_insert_id_in_cur_stmt :
|
||||
|
|
|
@ -1818,6 +1818,7 @@ mysql_execute_command(THD *thd)
|
|||
case SQLCOM_SHOW_VARIABLES:
|
||||
case SQLCOM_SHOW_CHARSETS:
|
||||
case SQLCOM_SHOW_COLLATIONS:
|
||||
case SQLCOM_SHOW_STORAGE_ENGINES:
|
||||
case SQLCOM_SELECT:
|
||||
thd->status_var.last_query_cost= 0.0;
|
||||
if (all_tables)
|
||||
|
@ -2920,9 +2921,6 @@ end_with_restore_list:
|
|||
thd->security_ctx->priv_user),
|
||||
lex->verbose);
|
||||
break;
|
||||
case SQLCOM_SHOW_STORAGE_ENGINES:
|
||||
res= mysqld_show_storage_engines(thd);
|
||||
break;
|
||||
case SQLCOM_SHOW_AUTHORS:
|
||||
res= mysqld_show_authors(thd);
|
||||
break;
|
||||
|
@ -4610,7 +4608,17 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
|
|||
Security_context *sctx= thd->security_ctx;
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
ulong db_access;
|
||||
bool db_is_pattern= test(want_access & GRANT_ACL);
|
||||
/*
|
||||
GRANT command:
|
||||
In case of database level grant the database name may be a pattern,
|
||||
in case of table|column level grant the database name can not be a pattern.
|
||||
We use 'dont_check_global_grants' as a flag to determine
|
||||
if it's database level grant command
|
||||
(see SQLCOM_GRANT case, mysql_execute_command() function) and
|
||||
set db_is_pattern according to 'dont_check_global_grants' value.
|
||||
*/
|
||||
bool db_is_pattern= (test(want_access & GRANT_ACL) &&
|
||||
dont_check_global_grants);
|
||||
#endif
|
||||
ulong dummy;
|
||||
DBUG_ENTER("check_access");
|
||||
|
|
|
@ -5459,8 +5459,7 @@ static bool write_log_drop_shadow_frm(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
char shadow_path[FN_LEN];
|
||||
DBUG_ENTER("write_log_drop_shadow_frm");
|
||||
|
||||
build_table_filename(shadow_path, sizeof(shadow_path), lpt->db,
|
||||
lpt->table_name, "#", 0);
|
||||
build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt);
|
||||
pthread_mutex_lock(&LOCK_gdl);
|
||||
if (write_log_replace_delete_frm(lpt, 0UL, NULL,
|
||||
(const char*)shadow_path, FALSE))
|
||||
|
@ -5508,8 +5507,7 @@ static bool write_log_rename_frm(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
part_info->first_log_entry= NULL;
|
||||
build_table_filename(path, sizeof(path), lpt->db,
|
||||
lpt->table_name, "", 0);
|
||||
build_table_filename(shadow_path, sizeof(shadow_path), lpt->db,
|
||||
lpt->table_name, "#", 0);
|
||||
build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt);
|
||||
pthread_mutex_lock(&LOCK_gdl);
|
||||
if (write_log_replace_delete_frm(lpt, 0UL, shadow_path, path, TRUE))
|
||||
goto error;
|
||||
|
@ -5674,8 +5672,7 @@ static bool write_log_final_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
part_info->first_log_entry= NULL;
|
||||
build_table_filename(path, sizeof(path), lpt->db,
|
||||
lpt->table_name, "", 0);
|
||||
build_table_filename(shadow_path, sizeof(shadow_path), lpt->db,
|
||||
lpt->table_name, "#", 0);
|
||||
build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt);
|
||||
pthread_mutex_lock(&LOCK_gdl);
|
||||
if (write_log_dropped_partitions(lpt, &next_entry, (const char*)path,
|
||||
lpt->alter_info->flags & ALTER_REORGANIZE_PARTITION))
|
||||
|
|
|
@ -33,7 +33,8 @@ class sys_var;
|
|||
*/
|
||||
#define SHOW_FUNC SHOW_FUNC, SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_LONGLONG, \
|
||||
SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, SHOW_HAVE, \
|
||||
SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, SHOW_LONG_NOFLUSH
|
||||
SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, SHOW_LONG_NOFLUSH, \
|
||||
SHOW_LONGLONG_STATUS
|
||||
#include <mysql/plugin.h>
|
||||
#undef SHOW_FUNC
|
||||
typedef enum enum_mysql_show_type SHOW_TYPE;
|
||||
|
|
|
@ -572,6 +572,8 @@ void set_param_date(Item_param *param, uchar **pos, ulong len)
|
|||
static void set_param_str(Item_param *param, uchar **pos, ulong len)
|
||||
{
|
||||
ulong length= get_param_length(pos, len);
|
||||
if (length > len)
|
||||
length= len;
|
||||
param->set_str((const char *)*pos, length);
|
||||
*pos+= length;
|
||||
}
|
||||
|
@ -742,6 +744,8 @@ static bool insert_params_with_log(Prepared_statement *stmt, uchar *null_array,
|
|||
if (read_pos >= data_end)
|
||||
DBUG_RETURN(1);
|
||||
param->set_param_func(param, &read_pos, data_end - read_pos);
|
||||
if (param->state == Item_param::NO_VALUE)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
res= param->query_val_str(&str);
|
||||
|
@ -778,6 +782,8 @@ static bool insert_params(Prepared_statement *stmt, uchar *null_array,
|
|||
if (read_pos >= data_end)
|
||||
DBUG_RETURN(1);
|
||||
param->set_param_func(param, &read_pos, data_end - read_pos);
|
||||
if (param->state == Item_param::NO_VALUE)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
if (param->convert_str_value(stmt->thd))
|
||||
|
@ -860,6 +866,8 @@ static bool emb_insert_params(Prepared_statement *stmt, String *expanded_query)
|
|||
client_param->length ?
|
||||
*client_param->length :
|
||||
client_param->buffer_length);
|
||||
if (param->state == Item_param::NO_VALUE)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
if (param->convert_str_value(thd))
|
||||
|
@ -902,6 +910,8 @@ static bool emb_insert_params_with_log(Prepared_statement *stmt,
|
|||
client_param->length ?
|
||||
*client_param->length :
|
||||
client_param->buffer_length);
|
||||
if (param->state == Item_param::NO_VALUE)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
res= param->query_val_str(&str);
|
||||
|
|
|
@ -10414,7 +10414,9 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
|
|||
*/
|
||||
while (!table->file->rnd_next(new_table.record[1]))
|
||||
{
|
||||
if ((write_err= new_table.file->write_row(new_table.record[1])))
|
||||
write_err= new_table.file->write_row(new_table.record[1]);
|
||||
DBUG_EXECUTE_IF("raise_error", write_err= HA_ERR_FOUND_DUPP_KEY ;);
|
||||
if (write_err)
|
||||
goto err;
|
||||
}
|
||||
/* copy row that filled HEAP table */
|
||||
|
@ -10454,6 +10456,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
|
|||
err2:
|
||||
delete new_table.file;
|
||||
thd->proc_info=save_proc_info;
|
||||
table->mem_root= new_table.mem_root;
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
|
|
|
@ -79,58 +79,6 @@ append_algorithm(TABLE_LIST *table, String *buff);
|
|||
** List all table types supported
|
||||
***************************************************************************/
|
||||
|
||||
static my_bool show_handlerton(THD *thd, plugin_ref plugin,
|
||||
void *arg)
|
||||
{
|
||||
handlerton *default_type= (handlerton *) arg;
|
||||
Protocol *protocol= thd->protocol;
|
||||
handlerton *hton= plugin_data(plugin, handlerton *);
|
||||
|
||||
if (!(hton->flags & HTON_HIDDEN))
|
||||
{
|
||||
protocol->prepare_for_resend();
|
||||
protocol->store(plugin_name(plugin)->str, plugin_name(plugin)->length,
|
||||
system_charset_info);
|
||||
const char *option_name= show_comp_option_name[(int) hton->state];
|
||||
|
||||
if (hton->state == SHOW_OPTION_YES && default_type == hton)
|
||||
option_name= "DEFAULT";
|
||||
protocol->store(option_name, system_charset_info);
|
||||
protocol->store(plugin_decl(plugin)->descr, system_charset_info);
|
||||
protocol->store(hton->commit ? "YES" : "NO", system_charset_info);
|
||||
protocol->store(hton->prepare ? "YES" : "NO", system_charset_info);
|
||||
protocol->store(hton->savepoint_set ? "YES" : "NO", system_charset_info);
|
||||
|
||||
return protocol->write() ? 1 : 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool mysqld_show_storage_engines(THD *thd)
|
||||
{
|
||||
List<Item> field_list;
|
||||
Protocol *protocol= thd->protocol;
|
||||
DBUG_ENTER("mysqld_show_storage_engines");
|
||||
|
||||
field_list.push_back(new Item_empty_string("Engine",10));
|
||||
field_list.push_back(new Item_empty_string("Support",10));
|
||||
field_list.push_back(new Item_empty_string("Comment",80));
|
||||
field_list.push_back(new Item_empty_string("Transactions",3));
|
||||
field_list.push_back(new Item_empty_string("XA",3));
|
||||
field_list.push_back(new Item_empty_string("Savepoints",3));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (plugin_foreach(thd, show_handlerton,
|
||||
MYSQL_STORAGE_ENGINE_PLUGIN, ha_default_handlerton(thd)))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
send_eof(thd);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
static int make_version_string(char *buf, int buf_length, uint version)
|
||||
{
|
||||
return my_snprintf(buf, buf_length, "%d.%d", version>>8,version&0xff);
|
||||
|
@ -2109,6 +2057,8 @@ static bool show_status_array(THD *thd, const char *wild,
|
|||
case SHOW_LONG_NOFLUSH: // the difference lies in refresh_status()
|
||||
end= int10_to_str(*(long*) value, buff, 10);
|
||||
break;
|
||||
case SHOW_LONGLONG_STATUS:
|
||||
value= ((char *) status_var + (ulonglong) value);
|
||||
case SHOW_LONGLONG:
|
||||
end= longlong10_to_str(*(longlong*) value, buff, 10);
|
||||
break;
|
||||
|
@ -3313,6 +3263,7 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
|
|||
handlerton *hton= plugin_data(plugin, handlerton *);
|
||||
const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : NullS;
|
||||
CHARSET_INFO *scs= system_charset_info;
|
||||
handlerton *default_type= ha_default_handlerton(thd);
|
||||
DBUG_ENTER("iter_schema_engines");
|
||||
|
||||
if (!(hton->flags & HTON_HIDDEN))
|
||||
|
@ -3321,16 +3272,16 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
|
|||
if (!(wild && wild[0] &&
|
||||
wild_case_compare(scs, name->str,wild)))
|
||||
{
|
||||
LEX_STRING state[2]= {{ C_STRING_WITH_LEN("ENABLED") },
|
||||
{ C_STRING_WITH_LEN("DISABLED") }};
|
||||
LEX_STRING yesno[2]= {{ C_STRING_WITH_LEN("NO") },
|
||||
{ C_STRING_WITH_LEN("YES") }};
|
||||
LEX_STRING *tmp;
|
||||
const char *option_name= show_comp_option_name[(int) hton->state];
|
||||
restore_record(table, s->default_values);
|
||||
|
||||
table->field[0]->store(name->str, name->length, scs);
|
||||
tmp= &state[test(hton->state)];
|
||||
table->field[1]->store(tmp->str, tmp->length, scs);
|
||||
if (hton->state == SHOW_OPTION_YES && default_type == hton)
|
||||
option_name= "DEFAULT";
|
||||
table->field[1]->store(option_name, strlen(option_name), scs);
|
||||
table->field[2]->store(plugin_decl(plugin)->descr,
|
||||
strlen(plugin_decl(plugin)->descr), scs);
|
||||
tmp= &yesno[test(hton->commit)];
|
||||
|
@ -3652,6 +3603,7 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
|
|||
DBUG_ENTER("get_schema_views_record");
|
||||
char definer[USER_HOST_BUFF_SIZE];
|
||||
uint definer_len;
|
||||
bool updatable_view;
|
||||
|
||||
if (tables->view)
|
||||
{
|
||||
|
@ -3689,7 +3641,34 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
|
|||
else
|
||||
table->field[4]->store(STRING_WITH_LEN("NONE"), cs);
|
||||
|
||||
if (tables->updatable_view)
|
||||
updatable_view= 0;
|
||||
if (tables->algorithm != VIEW_ALGORITHM_TMPTABLE)
|
||||
{
|
||||
/*
|
||||
We should use tables->view->select_lex.item_list here and
|
||||
can not use Field_iterator_view because the view always uses
|
||||
temporary algorithm during opening for I_S and
|
||||
TABLE_LIST fields 'field_translation' & 'field_translation_end'
|
||||
are uninitialized is this case.
|
||||
*/
|
||||
List<Item> *fields= &tables->view->select_lex.item_list;
|
||||
List_iterator<Item> it(*fields);
|
||||
Item *item;
|
||||
Item_field *field;
|
||||
/*
|
||||
chech that at least one coulmn in view is updatable
|
||||
*/
|
||||
while ((item= it++))
|
||||
{
|
||||
if ((field= item->filed_for_view_update()) && field->field &&
|
||||
!field->field->table->pos_in_table_list->schema_table)
|
||||
{
|
||||
updatable_view= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (updatable_view)
|
||||
table->field[5]->store(STRING_WITH_LEN("YES"), cs);
|
||||
else
|
||||
table->field[5]->store(STRING_WITH_LEN("NO"), cs);
|
||||
|
@ -4046,7 +4025,7 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table,
|
|||
table->field[22]->store(part_elem->part_comment,
|
||||
strlen(part_elem->part_comment), cs);
|
||||
else
|
||||
table->field[22]->store(STRING_WITH_LEN("default"), cs);
|
||||
table->field[22]->store(STRING_WITH_LEN(""), cs);
|
||||
if (part_elem->nodegroup_id != UNDEF_NODEGROUP)
|
||||
table->field[23]->store((longlong) part_elem->nodegroup_id, TRUE);
|
||||
else
|
||||
|
|
|
@ -1161,6 +1161,31 @@ void release_ddl_log()
|
|||
*/
|
||||
|
||||
|
||||
/**
|
||||
@brief construct a temporary shadow file name.
|
||||
|
||||
@details Make a shadow file name used by ALTER TABLE to construct the
|
||||
modified table (with keeping the original). The modified table is then
|
||||
moved back as original table. The name must start with the temp file
|
||||
prefix so it gets filtered out by table files listing routines.
|
||||
|
||||
@param[out] buff buffer to receive the constructed name
|
||||
@param bufflen size of buff
|
||||
@param lpt alter table data structure
|
||||
|
||||
@retval path length
|
||||
*/
|
||||
|
||||
uint build_table_shadow_filename(char *buff, size_t bufflen,
|
||||
ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||
{
|
||||
char tmp_name[FN_REFLEN];
|
||||
my_snprintf (tmp_name, sizeof (tmp_name), "%s-%s", tmp_file_prefix,
|
||||
lpt->table_name);
|
||||
return build_table_filename(buff, bufflen, lpt->db, tmp_name, "", FN_IS_TMP);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
SYNOPSIS
|
||||
mysql_write_frm()
|
||||
|
@ -1201,8 +1226,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
|||
/*
|
||||
Build shadow frm file name
|
||||
*/
|
||||
build_table_filename(shadow_path, sizeof(shadow_path), lpt->db,
|
||||
lpt->table_name, "#", 0);
|
||||
build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt);
|
||||
strxmov(shadow_frm_name, shadow_path, reg_ext, NullS);
|
||||
if (flags & WFRM_WRITE_SHADOW)
|
||||
{
|
||||
|
@ -1225,6 +1249,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
|||
|
||||
if (part_info)
|
||||
{
|
||||
TABLE_SHARE *share= lpt->table->s;
|
||||
if (!(part_syntax_buf= generate_partition_syntax(part_info,
|
||||
&syntax_len,
|
||||
TRUE, TRUE)))
|
||||
|
@ -1232,7 +1257,16 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
|||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
part_info->part_info_string= part_syntax_buf;
|
||||
part_info->part_info_len= syntax_len;
|
||||
share->partition_info_len= part_info->part_info_len= syntax_len;
|
||||
if (share->partition_info_buffer_size < syntax_len + 1)
|
||||
{
|
||||
share->partition_info_buffer_size= syntax_len+1;
|
||||
if (!(share->partition_info=
|
||||
(char*) alloc_root(&share->mem_root, syntax_len+1)))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
}
|
||||
memcpy((char*) share->partition_info, part_syntax_buf, syntax_len + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -5713,21 +5747,31 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||
table_list->table_name_length,
|
||||
table_list->table_name, 0);
|
||||
|
||||
/* Disable alter of enabled log tables */
|
||||
if (table_kind && logger.is_log_table_enabled(table_kind))
|
||||
if (table_kind)
|
||||
{
|
||||
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "ALTER");
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
/* Disable alter of enabled log tables */
|
||||
if (logger.is_log_table_enabled(table_kind))
|
||||
{
|
||||
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "ALTER");
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
/* Disable alter of log tables to unsupported engine */
|
||||
if (table_kind &&
|
||||
(create_info->used_fields & HA_CREATE_USED_ENGINE) &&
|
||||
(!create_info->db_type || /* unknown engine */
|
||||
!(create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
|
||||
{
|
||||
my_error(ER_UNSUPORTED_LOG_ENGINE, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
/* Disable alter of log tables to unsupported engine */
|
||||
if ((create_info->used_fields & HA_CREATE_USED_ENGINE) &&
|
||||
(!create_info->db_type || /* unknown engine */
|
||||
!(create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
|
||||
{
|
||||
my_error(ER_UNSUPORTED_LOG_ENGINE, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (alter_info->flags & ALTER_PARTITION)
|
||||
{
|
||||
my_error(ER_WRONG_USAGE, MYF(0), "PARTITION", "log table");
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5756,8 +5800,6 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||
strxnmov(new_name_buff, sizeof (new_name_buff) - 1, mysql_data_home, "/", db,
|
||||
"/", table_name, reg_ext, NullS);
|
||||
(void) unpack_filename(new_name_buff, new_name_buff);
|
||||
if (lower_case_table_names != 2)
|
||||
my_casedn_str(files_charset_info, new_name_buff);
|
||||
/*
|
||||
If this is just a rename of a view, short cut to the
|
||||
following scenario: 1) lock LOCK_open 2) do a RENAME
|
||||
|
|
|
@ -7509,7 +7509,8 @@ select_derived2:
|
|||
{
|
||||
LEX *lex= Lex;
|
||||
lex->derived_tables|= DERIVED_SUBQUERY;
|
||||
if (!lex->expr_allows_subselect)
|
||||
if (!lex->expr_allows_subselect ||
|
||||
lex->sql_command == (int)SQLCOM_PURGE)
|
||||
{
|
||||
my_parse_error(ER(ER_SYNTAX_ERROR));
|
||||
MYSQL_YYABORT;
|
||||
|
@ -9049,6 +9050,7 @@ purge:
|
|||
{
|
||||
LEX *lex=Lex;
|
||||
lex->type=0;
|
||||
lex->sql_command = SQLCOM_PURGE;
|
||||
} purge_options
|
||||
{}
|
||||
;
|
||||
|
@ -9060,7 +9062,6 @@ purge_options:
|
|||
purge_option:
|
||||
TO_SYM TEXT_STRING_sys
|
||||
{
|
||||
Lex->sql_command = SQLCOM_PURGE;
|
||||
Lex->to_log = $2.str;
|
||||
}
|
||||
| BEFORE_SYM expr
|
||||
|
@ -11234,7 +11235,8 @@ subselect_init:
|
|||
subselect_start:
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (!lex->expr_allows_subselect)
|
||||
if (!lex->expr_allows_subselect ||
|
||||
lex->sql_command == (int)SQLCOM_PURGE)
|
||||
{
|
||||
my_parse_error(ER(ER_SYNTAX_ERROR));
|
||||
MYSQL_YYABORT;
|
||||
|
|
|
@ -726,7 +726,8 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
|||
{
|
||||
uint32 partition_info_len = uint4korr(next_chunk);
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if ((share->partition_info_len= partition_info_len))
|
||||
if ((share->partition_info_buffer_size=
|
||||
share->partition_info_len= partition_info_len))
|
||||
{
|
||||
if (!(share->partition_info= (char*)
|
||||
memdup_root(&share->mem_root, next_chunk + 4,
|
||||
|
|
|
@ -243,6 +243,7 @@ typedef struct st_table_share
|
|||
bool auto_partitioned;
|
||||
const char *partition_info;
|
||||
uint partition_info_len;
|
||||
uint partition_info_buffer_size;
|
||||
const char *part_state;
|
||||
uint part_state_len;
|
||||
handlerton *default_part_db_type;
|
||||
|
|
|
@ -16161,6 +16161,62 @@ static void test_bug27876()
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Bug#28505: mysql_affected_rows() returns wrong value if CLIENT_FOUND_ROWS
|
||||
flag is set.
|
||||
*/
|
||||
static void test_bug28505()
|
||||
{
|
||||
my_ulonglong res;
|
||||
|
||||
myquery(mysql_query(mysql, "drop table if exists t1"));
|
||||
myquery(mysql_query(mysql, "create table t1(f1 int primary key)"));
|
||||
myquery(mysql_query(mysql, "insert into t1 values(1)"));
|
||||
myquery(mysql_query(mysql,
|
||||
"insert into t1 values(1) on duplicate key update f1=1"));
|
||||
res= mysql_affected_rows(mysql);
|
||||
DIE_UNLESS(!res);
|
||||
myquery(mysql_query(mysql, "drop table t1"));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Bug#28934: server crash when receiving malformed com_execute packets
|
||||
*/
|
||||
|
||||
static void test_bug28934()
|
||||
{
|
||||
my_bool error= 0;
|
||||
MYSQL_BIND bind[5];
|
||||
MYSQL_STMT *stmt;
|
||||
int cnt;
|
||||
|
||||
myquery(mysql_query(mysql, "drop table if exists t1"));
|
||||
myquery(mysql_query(mysql, "create table t1(id int)"));
|
||||
|
||||
myquery(mysql_query(mysql, "insert into t1 values(1),(2),(3),(4),(5)"));
|
||||
stmt= mysql_simple_prepare(mysql,"select * from t1 where id in(?,?,?,?,?)");
|
||||
check_stmt(stmt);
|
||||
|
||||
memset (&bind, 0, sizeof (bind));
|
||||
for (cnt= 0; cnt < 5; cnt++)
|
||||
{
|
||||
bind[cnt].buffer_type= MYSQL_TYPE_LONG;
|
||||
bind[cnt].buffer= (char*)&cnt;
|
||||
bind[cnt].buffer_length= 0;
|
||||
}
|
||||
myquery(mysql_stmt_bind_param(stmt, bind));
|
||||
|
||||
stmt->param_count=2;
|
||||
error= mysql_stmt_execute(stmt);
|
||||
DIE_UNLESS(error != 0);
|
||||
myerror(NULL);
|
||||
mysql_stmt_close(stmt);
|
||||
|
||||
myquery(mysql_query(mysql, "drop table t1"));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Read and parse arguments and MySQL options from my.cnf
|
||||
*/
|
||||
|
@ -16442,12 +16498,14 @@ static struct my_tests_st my_tests[]= {
|
|||
{ "test_bug15518", test_bug15518 },
|
||||
{ "test_bug23383", test_bug23383 },
|
||||
{ "test_bug21635", test_bug21635 },
|
||||
{ "test_bug28505", test_bug28505 },
|
||||
{ "test_status", test_status },
|
||||
{ "test_bug24179", test_bug24179 },
|
||||
{ "test_ps_query_cache", test_ps_query_cache },
|
||||
#ifdef fix_bug_in_pb_first
|
||||
{ "test_bug28075", test_bug28075 },
|
||||
#endif
|
||||
{ "test_bug28934", test_bug28934 },
|
||||
{ "test_bug27876", test_bug27876 },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue