merge
This commit is contained in:
commit
559efbf14e
48
mysql-test/r/partition_innodb_stmt.result
Normal file
48
mysql-test/r/partition_innodb_stmt.result
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# connection default
|
||||||
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id SMALLINT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=innodb
|
||||||
|
PARTITION BY RANGE (id)
|
||||||
|
(
|
||||||
|
PARTITION p1 VALUES LESS THAN (2),
|
||||||
|
PARTITION p2 VALUES LESS THAN (4),
|
||||||
|
PARTITION p3 VALUES LESS THAN (10)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
# Test READ COMMITTED -> REPEATABLE READ
|
||||||
|
FLUSH TABLES;
|
||||||
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
#connection con1
|
||||||
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES(7);
|
||||||
|
COMMIT;
|
||||||
|
# connection default
|
||||||
|
COMMIT;
|
||||||
|
FLUSH TABLES;
|
||||||
|
# Test REPEATABLE READ -> READ COMMITTED
|
||||||
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
7
|
||||||
|
# connection con1
|
||||||
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES(9);
|
||||||
|
ERROR HY000: Binary logging not possible. Message: Transaction level 'READ-COMMITTED' in InnoDB is not safe for binlog mode 'STATEMENT'
|
||||||
|
COMMIT;
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t1;
|
@ -43,8 +43,13 @@ SET INSERT_ID = 30;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
if (!$skip_update)
|
if (!$skip_update)
|
||||||
{
|
{
|
||||||
|
# InnoDB Does not handle this correctly, see bug#14793, bug#21641
|
||||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
-- error 0, ER_BAD_NULL_ERROR
|
-- error 0, ER_BAD_NULL_ERROR
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
if (!$mysql_errno)
|
if (!$mysql_errno)
|
||||||
@ -83,6 +88,16 @@ TRUNCATE TABLE t1;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
if (!$skip_delete)
|
||||||
|
{
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
}
|
||||||
|
# InnoDB does reset auto_increment on OPTIMIZE, Bug#18274
|
||||||
|
# Archive does reset auto_increment on OPTIMIZE, Bug#40216
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
-- echo # Simple test with NULL
|
-- echo # Simple test with NULL
|
||||||
@ -184,6 +199,10 @@ if (!$skip_update)
|
|||||||
{
|
{
|
||||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
-- error 0, ER_BAD_NULL_ERROR
|
-- error 0, ER_BAD_NULL_ERROR
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
if (!$mysql_errno)
|
if (!$mysql_errno)
|
||||||
@ -295,6 +314,15 @@ TRUNCATE TABLE t1;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
if (!$skip_delete)
|
||||||
|
{
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
}
|
||||||
|
# InnoDB does reset auto_increment on OPTIMIZE, Bug#18274
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
-- echo # Test with two threads
|
-- echo # Test with two threads
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
# part_optA-D Extra partitioning options (E.g. INDEX/DATA DIR) #
|
# part_optA-D Extra partitioning options (E.g. INDEX/DATA DIR) #
|
||||||
# #
|
# #
|
||||||
# have_bug33158 NDB case insensitive create, but case sensitive rename #
|
# have_bug33158 NDB case insensitive create, but case sensitive rename #
|
||||||
# have_bug37719 Archive, crash when rename and then select #
|
|
||||||
#------------------------------------------------------------------------------#
|
#------------------------------------------------------------------------------#
|
||||||
# Original Author: mattiasj #
|
# Original Author: mattiasj #
|
||||||
# Original Date: 2008-06-27 #
|
# Original Date: 2008-06-27 #
|
||||||
@ -125,18 +124,12 @@ PARTITION BY KEY (a)
|
|||||||
PARTITION PartD $part_optD);
|
PARTITION PartD $part_optD);
|
||||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
RENAME TABLE TableA to tableA;
|
RENAME TABLE TableA to tableA;
|
||||||
}
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tableA;
|
SELECT * FROM tableA;
|
||||||
RENAME TABLE tableA to TableA;
|
RENAME TABLE tableA to TableA;
|
||||||
}
|
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
DROP TABLE tablea;
|
DROP TABLE tablea;
|
||||||
}
|
}
|
||||||
@ -262,18 +255,12 @@ PARTITION BY HASH (a)
|
|||||||
PARTITION PartD $part_optD);
|
PARTITION PartD $part_optD);
|
||||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
RENAME TABLE TableA to tableA;
|
RENAME TABLE TableA to tableA;
|
||||||
}
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tableA;
|
SELECT * FROM tableA;
|
||||||
RENAME TABLE tableA to TableA;
|
RENAME TABLE tableA to TableA;
|
||||||
}
|
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
DROP TABLE tablea;
|
DROP TABLE tablea;
|
||||||
}
|
}
|
||||||
@ -388,18 +375,12 @@ PARTITION BY RANGE (a)
|
|||||||
PARTITION PartD VALUES LESS THAN (13) $part_optD);
|
PARTITION PartD VALUES LESS THAN (13) $part_optD);
|
||||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
RENAME TABLE TableA to tableA;
|
RENAME TABLE TableA to tableA;
|
||||||
}
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tableA;
|
SELECT * FROM tableA;
|
||||||
RENAME TABLE tableA to TableA;
|
RENAME TABLE tableA to TableA;
|
||||||
}
|
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
DROP TABLE tablea;
|
DROP TABLE tablea;
|
||||||
}
|
}
|
||||||
@ -516,18 +497,12 @@ PARTITION BY LIST (a)
|
|||||||
PARTITION PartD VALUES IN (5,6,12) $part_optD);
|
PARTITION PartD VALUES IN (5,6,12) $part_optD);
|
||||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
RENAME TABLE TableA to tableA;
|
RENAME TABLE TableA to tableA;
|
||||||
}
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
if (!$have_bug37719)
|
|
||||||
{
|
|
||||||
--sorted_result
|
--sorted_result
|
||||||
SELECT * FROM tableA;
|
SELECT * FROM tableA;
|
||||||
RENAME TABLE tableA to TableA;
|
RENAME TABLE tableA to TableA;
|
||||||
}
|
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
DROP TABLE tablea;
|
DROP TABLE tablea;
|
||||||
}
|
}
|
||||||
|
@ -105,6 +105,17 @@ c1
|
|||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status OK
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Simple test with NULL
|
# Simple test with NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -368,6 +379,19 @@ c1
|
|||||||
25
|
25
|
||||||
26
|
26
|
||||||
27
|
27
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status OK
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (c1)
|
||||||
|
PARTITIONS 2 */
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with two threads
|
# Test with two threads
|
||||||
# con default
|
# con default
|
||||||
|
@ -36,6 +36,12 @@ SET INSERT_ID = 30;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
1
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -96,6 +102,18 @@ t1 CREATE TABLE `t1` (
|
|||||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Simple test with NULL
|
# Simple test with NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -167,6 +185,12 @@ INSERT INTO t1 VALUES (NULL), (90);
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
1
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -278,6 +302,20 @@ t1 CREATE TABLE `t1` (
|
|||||||
PARTITIONS 2 */
|
PARTITIONS 2 */
|
||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (c1)
|
||||||
|
PARTITIONS 2 */
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with two threads
|
# Test with two threads
|
||||||
# con default
|
# con default
|
||||||
|
@ -35,6 +35,12 @@ SET INSERT_ID = 30;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
31
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -52,7 +58,7 @@ c1
|
|||||||
30
|
30
|
||||||
31
|
31
|
||||||
32
|
32
|
||||||
50
|
40
|
||||||
51
|
51
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -110,6 +116,19 @@ t1 CREATE TABLE `t1` (
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||||
|
test.t1 optimize status OK
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Simple test with NULL
|
# Simple test with NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -189,6 +208,12 @@ INSERT INTO t1 VALUES (NULL), (90);
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
141
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -209,10 +234,10 @@ c1
|
|||||||
60
|
60
|
||||||
90
|
90
|
||||||
91
|
91
|
||||||
150
|
140
|
||||||
|
141
|
||||||
|
142
|
||||||
151
|
151
|
||||||
152
|
|
||||||
153
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with auto_increment_increment and auto_increment_offset.
|
# Test with auto_increment_increment and auto_increment_offset.
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -359,6 +384,21 @@ PARTITIONS 2 */
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||||
|
test.t1 optimize status OK
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (c1)
|
||||||
|
PARTITIONS 2 */
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with two threads
|
# Test with two threads
|
||||||
# con default
|
# con default
|
||||||
|
@ -35,6 +35,12 @@ SET INSERT_ID = 30;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
52
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -50,7 +56,7 @@ c1
|
|||||||
22
|
22
|
||||||
23
|
23
|
||||||
30
|
30
|
||||||
50
|
40
|
||||||
51
|
51
|
||||||
52
|
52
|
||||||
53
|
53
|
||||||
@ -110,6 +116,18 @@ t1 CREATE TABLE `t1` (
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=MEMORY AUTO_INCREMENT=102 DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Simple test with NULL
|
# Simple test with NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -189,6 +207,12 @@ INSERT INTO t1 VALUES (NULL), (90);
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
152
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -209,7 +233,7 @@ c1
|
|||||||
60
|
60
|
||||||
90
|
90
|
||||||
91
|
91
|
||||||
150
|
140
|
||||||
151
|
151
|
||||||
152
|
152
|
||||||
153
|
153
|
||||||
@ -359,6 +383,20 @@ PARTITIONS 2 */
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
27
|
27
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=MEMORY AUTO_INCREMENT=102 DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (c1)
|
||||||
|
PARTITIONS 2 */
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with two threads
|
# Test with two threads
|
||||||
# con default
|
# con default
|
||||||
|
@ -35,6 +35,12 @@ SET INSERT_ID = 30;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
52
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -50,7 +56,7 @@ c1
|
|||||||
22
|
22
|
||||||
23
|
23
|
||||||
30
|
30
|
||||||
50
|
40
|
||||||
51
|
51
|
||||||
52
|
52
|
||||||
53
|
53
|
||||||
@ -110,6 +116,18 @@ t1 CREATE TABLE `t1` (
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status OK
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=102 DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Simple test with NULL
|
# Simple test with NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -189,6 +207,12 @@ INSERT INTO t1 VALUES (NULL), (90);
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
152
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -209,7 +233,7 @@ c1
|
|||||||
60
|
60
|
||||||
90
|
90
|
||||||
91
|
91
|
||||||
150
|
140
|
||||||
151
|
151
|
||||||
152
|
152
|
||||||
153
|
153
|
||||||
@ -359,6 +383,20 @@ PARTITIONS 2 */
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
27
|
27
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status OK
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=MyISAM AUTO_INCREMENT=102 DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (c1)
|
||||||
|
PARTITIONS 2 */
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with two threads
|
# Test with two threads
|
||||||
# con default
|
# con default
|
||||||
|
@ -36,6 +36,12 @@ SET INSERT_ID = 30;
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
52
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -51,7 +57,7 @@ c1
|
|||||||
22
|
22
|
||||||
23
|
23
|
||||||
30
|
30
|
||||||
50
|
40
|
||||||
51
|
51
|
||||||
52
|
52
|
||||||
53
|
53
|
||||||
@ -111,6 +117,18 @@ t1 CREATE TABLE `t1` (
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Simple test with NULL
|
# Simple test with NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -190,6 +208,12 @@ INSERT INTO t1 VALUES (NULL), (90);
|
|||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||||
|
FLUSH TABLES;
|
||||||
|
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||||
|
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||||
|
AND TABLE_NAME='t1';
|
||||||
|
AUTO_INCREMENT
|
||||||
|
152
|
||||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
INSERT INTO t1 VALUES (NULL);
|
INSERT INTO t1 VALUES (NULL);
|
||||||
@ -210,7 +234,7 @@ c1
|
|||||||
60
|
60
|
||||||
90
|
90
|
||||||
91
|
91
|
||||||
150
|
140
|
||||||
151
|
151
|
||||||
152
|
152
|
||||||
153
|
153
|
||||||
@ -360,6 +384,20 @@ PARTITIONS 2 */
|
|||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
INSERT INTO t1 VALUES (100);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
DELETE FROM t1 WHERE c1 >= 100;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY HASH (c1)
|
||||||
|
PARTITIONS 2 */
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Test with two threads
|
# Test with two threads
|
||||||
# con default
|
# con default
|
||||||
|
@ -170,26 +170,30 @@ SHOW TABLES;
|
|||||||
Tables_in_MySQL_Test_DB
|
Tables_in_MySQL_Test_DB
|
||||||
TableA
|
TableA
|
||||||
tablea
|
tablea
|
||||||
|
RENAME TABLE TableA to tableA;
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
10
|
||||||
|
2
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
SELECT * FROM tableA;
|
||||||
|
a
|
||||||
|
1
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
12
|
12
|
||||||
2
|
2
|
||||||
2
|
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
9
|
RENAME TABLE tableA to TableA;
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
tablea CREATE TABLE `tablea` (
|
tablea CREATE TABLE `tablea` (
|
||||||
@ -206,7 +210,6 @@ ALTER TABLE TableA REMOVE PARTITIONING;
|
|||||||
SELECT * FROM TableA;
|
SELECT * FROM TableA;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
12
|
12
|
||||||
@ -216,10 +219,7 @@ a
|
|||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
8
|
||||||
8
|
|
||||||
9
|
|
||||||
9
|
9
|
||||||
SHOW CREATE TABLE TableA;
|
SHOW CREATE TABLE TableA;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
@ -406,26 +406,30 @@ SHOW TABLES;
|
|||||||
Tables_in_MySQL_Test_DB
|
Tables_in_MySQL_Test_DB
|
||||||
TableA
|
TableA
|
||||||
tablea
|
tablea
|
||||||
|
RENAME TABLE TableA to tableA;
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
10
|
||||||
|
2
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
SELECT * FROM tableA;
|
||||||
|
a
|
||||||
|
1
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
12
|
12
|
||||||
2
|
2
|
||||||
2
|
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
9
|
RENAME TABLE tableA to TableA;
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
tablea CREATE TABLE `tablea` (
|
tablea CREATE TABLE `tablea` (
|
||||||
@ -442,21 +446,16 @@ ALTER TABLE TableA REMOVE PARTITIONING;
|
|||||||
SELECT * FROM TableA;
|
SELECT * FROM TableA;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
12
|
12
|
||||||
2
|
2
|
||||||
2
|
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
8
|
8
|
||||||
8
|
|
||||||
9
|
|
||||||
9
|
9
|
||||||
SHOW CREATE TABLE TableA;
|
SHOW CREATE TABLE TableA;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
@ -638,26 +637,30 @@ SHOW TABLES;
|
|||||||
Tables_in_MySQL_Test_DB
|
Tables_in_MySQL_Test_DB
|
||||||
TableA
|
TableA
|
||||||
tablea
|
tablea
|
||||||
|
RENAME TABLE TableA to tableA;
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
10
|
||||||
|
2
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
SELECT * FROM tableA;
|
||||||
|
a
|
||||||
|
1
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
12
|
12
|
||||||
2
|
2
|
||||||
2
|
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
9
|
RENAME TABLE tableA to TableA;
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
tablea CREATE TABLE `tablea` (
|
tablea CREATE TABLE `tablea` (
|
||||||
@ -674,22 +677,16 @@ ALTER TABLE TableA REMOVE PARTITIONING;
|
|||||||
SELECT * FROM TableA;
|
SELECT * FROM TableA;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
|
||||||
10
|
10
|
||||||
11
|
11
|
||||||
12
|
12
|
||||||
2
|
2
|
||||||
2
|
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
8
|
||||||
8
|
|
||||||
9
|
|
||||||
9
|
9
|
||||||
SHOW CREATE TABLE TableA;
|
SHOW CREATE TABLE TableA;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
@ -866,23 +863,27 @@ SHOW TABLES;
|
|||||||
Tables_in_MySQL_Test_DB
|
Tables_in_MySQL_Test_DB
|
||||||
TableA
|
TableA
|
||||||
tablea
|
tablea
|
||||||
|
RENAME TABLE TableA to tableA;
|
||||||
SELECT * FROM tablea;
|
SELECT * FROM tablea;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
10
|
||||||
12
|
|
||||||
2
|
2
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
SELECT * FROM tableA;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
12
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
9
|
RENAME TABLE tableA to TableA;
|
||||||
SHOW CREATE TABLE tablea;
|
SHOW CREATE TABLE tablea;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
tablea CREATE TABLE `tablea` (
|
tablea CREATE TABLE `tablea` (
|
||||||
@ -899,19 +900,13 @@ ALTER TABLE TableA REMOVE PARTITIONING;
|
|||||||
SELECT * FROM TableA;
|
SELECT * FROM TableA;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
1
|
|
||||||
10
|
|
||||||
12
|
12
|
||||||
2
|
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
6
|
6
|
||||||
7
|
7
|
||||||
7
|
|
||||||
8
|
8
|
||||||
8
|
|
||||||
9
|
|
||||||
9
|
9
|
||||||
SHOW CREATE TABLE TableA;
|
SHOW CREATE TABLE TableA;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
#------------------------------------------------------------------------------#
|
#------------------------------------------------------------------------------#
|
||||||
# Engine specific settings and requirements
|
# Engine specific settings and requirements
|
||||||
let $have_bug37719= 1;
|
|
||||||
|
|
||||||
##### Storage engine to be tested
|
##### Storage engine to be tested
|
||||||
--source include/have_archive.inc
|
--source include/have_archive.inc
|
||||||
|
59
mysql-test/t/partition_innodb_stmt.test
Normal file
59
mysql-test/t/partition_innodb_stmt.test
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
--source include/have_binlog_format_statement.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--echo # connection default
|
||||||
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
|
||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id SMALLINT NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=innodb
|
||||||
|
PARTITION BY RANGE (id)
|
||||||
|
(
|
||||||
|
PARTITION p1 VALUES LESS THAN (2),
|
||||||
|
PARTITION p2 VALUES LESS THAN (4),
|
||||||
|
PARTITION p3 VALUES LESS THAN (10)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
|
||||||
|
--echo # Test READ COMMITTED -> REPEATABLE READ
|
||||||
|
FLUSH TABLES;
|
||||||
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
connect (con1, localhost, root,,);
|
||||||
|
connection con1;
|
||||||
|
|
||||||
|
--echo #connection con1
|
||||||
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES(7);
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
--echo # connection default
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--echo # Test REPEATABLE READ -> READ COMMITTED
|
||||||
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
|
||||||
|
--echo # connection con1
|
||||||
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
|
BEGIN;
|
||||||
|
--error ER_BINLOG_LOGGING_IMPOSSIBLE
|
||||||
|
INSERT INTO t1 VALUES(9);
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t1;
|
@ -107,7 +107,7 @@ static handler *partition_create_handler(handlerton *hton,
|
|||||||
MEM_ROOT *mem_root)
|
MEM_ROOT *mem_root)
|
||||||
{
|
{
|
||||||
ha_partition *file= new (mem_root) ha_partition(hton, share);
|
ha_partition *file= new (mem_root) ha_partition(hton, share);
|
||||||
if (file && file->initialise_partition(mem_root))
|
if (file && file->initialize_partition(mem_root))
|
||||||
{
|
{
|
||||||
delete file;
|
delete file;
|
||||||
file= 0;
|
file= 0;
|
||||||
@ -160,8 +160,7 @@ const uint ha_partition::NO_CURRENT_PART_ID= 0xFFFFFFFF;
|
|||||||
|
|
||||||
ha_partition::ha_partition(handlerton *hton, TABLE_SHARE *share)
|
ha_partition::ha_partition(handlerton *hton, TABLE_SHARE *share)
|
||||||
:handler(hton, share), m_part_info(NULL), m_create_handler(FALSE),
|
:handler(hton, share), m_part_info(NULL), m_create_handler(FALSE),
|
||||||
m_is_sub_partitioned(0), is_clone(FALSE), auto_increment_lock(FALSE),
|
m_is_sub_partitioned(0)
|
||||||
auto_increment_safe_stmt_log_lock(FALSE)
|
|
||||||
{
|
{
|
||||||
DBUG_ENTER("ha_partition::ha_partition(table)");
|
DBUG_ENTER("ha_partition::ha_partition(table)");
|
||||||
init_handler_variables();
|
init_handler_variables();
|
||||||
@ -181,10 +180,8 @@ ha_partition::ha_partition(handlerton *hton, TABLE_SHARE *share)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ha_partition::ha_partition(handlerton *hton, partition_info *part_info)
|
ha_partition::ha_partition(handlerton *hton, partition_info *part_info)
|
||||||
:handler(hton, NULL), m_part_info(part_info),
|
:handler(hton, NULL), m_part_info(part_info), m_create_handler(TRUE),
|
||||||
m_create_handler(TRUE),
|
m_is_sub_partitioned(m_part_info->is_sub_partitioned())
|
||||||
m_is_sub_partitioned(m_part_info->is_sub_partitioned()), is_clone(FALSE),
|
|
||||||
auto_increment_lock(FALSE), auto_increment_safe_stmt_log_lock(FALSE)
|
|
||||||
{
|
{
|
||||||
DBUG_ENTER("ha_partition::ha_partition(part_info)");
|
DBUG_ENTER("ha_partition::ha_partition(part_info)");
|
||||||
init_handler_variables();
|
init_handler_variables();
|
||||||
@ -194,7 +191,7 @@ ha_partition::ha_partition(handlerton *hton, partition_info *part_info)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Initialise handler object
|
Initialize handler object
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
init_handler_variables()
|
init_handler_variables()
|
||||||
@ -231,7 +228,7 @@ void ha_partition::init_handler_variables()
|
|||||||
m_innodb= FALSE;
|
m_innodb= FALSE;
|
||||||
m_extra_cache= FALSE;
|
m_extra_cache= FALSE;
|
||||||
m_extra_cache_size= 0;
|
m_extra_cache_size= 0;
|
||||||
m_table_flags= HA_FILE_BASED | HA_REC_NOT_IN_SEQ;
|
m_handler_status= handler_not_initialized;
|
||||||
m_low_byte_first= 1;
|
m_low_byte_first= 1;
|
||||||
m_part_field_array= NULL;
|
m_part_field_array= NULL;
|
||||||
m_ordered_rec_buffer= NULL;
|
m_ordered_rec_buffer= NULL;
|
||||||
@ -241,6 +238,9 @@ void ha_partition::init_handler_variables()
|
|||||||
m_rec0= 0;
|
m_rec0= 0;
|
||||||
m_curr_key_info[0]= NULL;
|
m_curr_key_info[0]= NULL;
|
||||||
m_curr_key_info[1]= NULL;
|
m_curr_key_info[1]= NULL;
|
||||||
|
is_clone= FALSE,
|
||||||
|
auto_increment_lock= FALSE;
|
||||||
|
auto_increment_safe_stmt_log_lock= FALSE;
|
||||||
/*
|
/*
|
||||||
this allows blackhole to work properly
|
this allows blackhole to work properly
|
||||||
*/
|
*/
|
||||||
@ -287,10 +287,10 @@ ha_partition::~ha_partition()
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Initialise partition handler object
|
Initialize partition handler object
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
initialise_partition()
|
initialize_partition()
|
||||||
mem_root Allocate memory through this
|
mem_root Allocate memory through this
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
@ -320,8 +320,8 @@ ha_partition::~ha_partition()
|
|||||||
normal storage engine
|
normal storage engine
|
||||||
The flag HA_FILE_BASED will be set independent of the underlying handlers
|
The flag HA_FILE_BASED will be set independent of the underlying handlers
|
||||||
4) Index flags initialisation
|
4) Index flags initialisation
|
||||||
When knowledge exists on the indexes it is also possible to initialise the
|
When knowledge exists on the indexes it is also possible to initialize the
|
||||||
index flags. Again the index flags must be initialised by using the under-
|
index flags. Again the index flags must be initialized by using the under-
|
||||||
lying handlers since this is storage engine dependent.
|
lying handlers since this is storage engine dependent.
|
||||||
The flag HA_READ_ORDER will be reset for the time being to indicate no
|
The flag HA_READ_ORDER will be reset for the time being to indicate no
|
||||||
ordered output is available from partition handler indexes. Later a merge
|
ordered output is available from partition handler indexes. Later a merge
|
||||||
@ -331,10 +331,11 @@ ha_partition::~ha_partition()
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool ha_partition::initialise_partition(MEM_ROOT *mem_root)
|
bool ha_partition::initialize_partition(MEM_ROOT *mem_root)
|
||||||
{
|
{
|
||||||
handler **file_array, *file;
|
handler **file_array, *file;
|
||||||
DBUG_ENTER("ha_partition::initialise_partition");
|
ulonglong check_table_flags;
|
||||||
|
DBUG_ENTER("ha_partition::initialize_partition");
|
||||||
|
|
||||||
if (m_create_handler)
|
if (m_create_handler)
|
||||||
{
|
{
|
||||||
@ -346,11 +347,9 @@ bool ha_partition::initialise_partition(MEM_ROOT *mem_root)
|
|||||||
else if (!table_share || !table_share->normalized_path.str)
|
else if (!table_share || !table_share->normalized_path.str)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Called with dummy table share (delete, rename and alter table)
|
Called with dummy table share (delete, rename and alter table).
|
||||||
Don't need to set-up table flags other than
|
Don't need to set-up anything.
|
||||||
HA_FILE_BASED here
|
|
||||||
*/
|
*/
|
||||||
m_table_flags|= HA_FILE_BASED | HA_REC_NOT_IN_SEQ;
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
else if (get_from_handler_file(table_share->normalized_path.str, mem_root))
|
else if (get_from_handler_file(table_share->normalized_path.str, mem_root))
|
||||||
@ -362,15 +361,12 @@ bool ha_partition::initialise_partition(MEM_ROOT *mem_root)
|
|||||||
We create all underlying table handlers here. We do it in this special
|
We create all underlying table handlers here. We do it in this special
|
||||||
method to be able to report allocation errors.
|
method to be able to report allocation errors.
|
||||||
|
|
||||||
Set up table_flags, low_byte_first, primary_key_is_clustered and
|
Set up low_byte_first, primary_key_is_clustered and
|
||||||
has_transactions since they are called often in all kinds of places,
|
has_transactions since they are called often in all kinds of places,
|
||||||
other parameters are calculated on demand.
|
other parameters are calculated on demand.
|
||||||
HA_FILE_BASED is always set for partition handler since we use a
|
Verify that all partitions have the same table_flags.
|
||||||
special file for handling names of partitions, engine types.
|
|
||||||
HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_CAN_SQL_HANDLER, HA_DUPLICATE_POS,
|
|
||||||
HA_CAN_INSERT_DELAYED is disabled until further investigated.
|
|
||||||
*/
|
*/
|
||||||
m_table_flags= (ulong)m_file[0]->ha_table_flags();
|
check_table_flags= m_file[0]->ha_table_flags();
|
||||||
m_low_byte_first= m_file[0]->low_byte_first();
|
m_low_byte_first= m_file[0]->low_byte_first();
|
||||||
m_pkey_is_clustered= TRUE;
|
m_pkey_is_clustered= TRUE;
|
||||||
file_array= m_file;
|
file_array= m_file;
|
||||||
@ -385,12 +381,13 @@ bool ha_partition::initialise_partition(MEM_ROOT *mem_root)
|
|||||||
}
|
}
|
||||||
if (!file->primary_key_is_clustered())
|
if (!file->primary_key_is_clustered())
|
||||||
m_pkey_is_clustered= FALSE;
|
m_pkey_is_clustered= FALSE;
|
||||||
m_table_flags&= file->ha_table_flags();
|
if (check_table_flags != file->ha_table_flags())
|
||||||
|
{
|
||||||
|
my_error(ER_MIX_HANDLER_ERROR, MYF(0));
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
} while (*(++file_array));
|
} while (*(++file_array));
|
||||||
m_table_flags&= ~(HA_CAN_GEOMETRY | HA_CAN_FULLTEXT | HA_DUPLICATE_POS |
|
m_handler_status= handler_initialized;
|
||||||
HA_CAN_SQL_HANDLER | HA_CAN_INSERT_DELAYED |
|
|
||||||
HA_PRIMARY_KEY_REQUIRED_FOR_POSITION);
|
|
||||||
m_table_flags|= HA_FILE_BASED | HA_REC_NOT_IN_SEQ;
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2399,6 +2396,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
handler **file;
|
handler **file;
|
||||||
char name_buff[FN_REFLEN];
|
char name_buff[FN_REFLEN];
|
||||||
bool is_not_tmp_table= (table_share->tmp_table == NO_TMP_TABLE);
|
bool is_not_tmp_table= (table_share->tmp_table == NO_TMP_TABLE);
|
||||||
|
ulonglong check_table_flags= 0;
|
||||||
DBUG_ENTER("ha_partition::open");
|
DBUG_ENTER("ha_partition::open");
|
||||||
|
|
||||||
DBUG_ASSERT(table->s == table_share);
|
DBUG_ASSERT(table->s == table_share);
|
||||||
@ -2438,7 +2436,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialise the bitmap we use to determine what partitions are used */
|
/* Initialize the bitmap we use to determine what partitions are used */
|
||||||
if (!is_clone)
|
if (!is_clone)
|
||||||
{
|
{
|
||||||
if (bitmap_init(&(m_part_info->used_partitions), NULL, m_tot_parts, TRUE))
|
if (bitmap_init(&(m_part_info->used_partitions), NULL, m_tot_parts, TRUE))
|
||||||
@ -2446,8 +2444,6 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
bitmap_set_all(&(m_part_info->used_partitions));
|
bitmap_set_all(&(m_part_info->used_partitions));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Recalculate table flags as they may change after open */
|
|
||||||
m_table_flags= m_file[0]->ha_table_flags();
|
|
||||||
file= m_file;
|
file= m_file;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -2459,11 +2455,26 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
m_no_locks+= (*file)->lock_count();
|
m_no_locks+= (*file)->lock_count();
|
||||||
name_buffer_ptr+= strlen(name_buffer_ptr) + 1;
|
name_buffer_ptr+= strlen(name_buffer_ptr) + 1;
|
||||||
set_if_bigger(ref_length, ((*file)->ref_length));
|
set_if_bigger(ref_length, ((*file)->ref_length));
|
||||||
m_table_flags&= (*file)->ha_table_flags();
|
/*
|
||||||
|
Verify that all partitions have the same set of table flags.
|
||||||
|
Mask all flags that partitioning enables/disables.
|
||||||
|
*/
|
||||||
|
if (!check_table_flags)
|
||||||
|
{
|
||||||
|
check_table_flags= (((*file)->ha_table_flags() &
|
||||||
|
~(PARTITION_DISABLED_TABLE_FLAGS)) |
|
||||||
|
(PARTITION_ENABLED_TABLE_FLAGS));
|
||||||
|
}
|
||||||
|
else if (check_table_flags != (((*file)->ha_table_flags() &
|
||||||
|
~(PARTITION_DISABLED_TABLE_FLAGS)) |
|
||||||
|
(PARTITION_ENABLED_TABLE_FLAGS)))
|
||||||
|
{
|
||||||
|
DBUG_PRINT("error", ("check_table_flag 0x%x != 0x%x table_flags()",
|
||||||
|
check_table_flags, (*file)->ha_table_flags()));
|
||||||
|
error= HA_ERR_INITIALIZATION;
|
||||||
|
goto err_handler;
|
||||||
|
}
|
||||||
} while (*(++file));
|
} while (*(++file));
|
||||||
m_table_flags&= ~(HA_CAN_GEOMETRY | HA_CAN_FULLTEXT | HA_DUPLICATE_POS |
|
|
||||||
HA_CAN_SQL_HANDLER | HA_CAN_INSERT_DELAYED);
|
|
||||||
m_table_flags|= HA_FILE_BASED | HA_REC_NOT_IN_SEQ;
|
|
||||||
key_used_on_scan= m_file[0]->key_used_on_scan;
|
key_used_on_scan= m_file[0]->key_used_on_scan;
|
||||||
implicit_emptied= m_file[0]->implicit_emptied;
|
implicit_emptied= m_file[0]->implicit_emptied;
|
||||||
/*
|
/*
|
||||||
@ -2478,7 +2489,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
*/
|
*/
|
||||||
clear_handler_file();
|
clear_handler_file();
|
||||||
/*
|
/*
|
||||||
Initialise priority queue, initialised to reading forward.
|
Initialize priority queue, initialized to reading forward.
|
||||||
*/
|
*/
|
||||||
if ((error= init_queue(&m_queue, m_tot_parts, (uint) PARTITION_BYTES_IN_POS,
|
if ((error= init_queue(&m_queue, m_tot_parts, (uint) PARTITION_BYTES_IN_POS,
|
||||||
0, key_rec_cmp, (void*)this)))
|
0, key_rec_cmp, (void*)this)))
|
||||||
@ -2514,6 +2525,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
to ensure we have correct statistics we call info from open after
|
to ensure we have correct statistics we call info from open after
|
||||||
calling open on all individual handlers.
|
calling open on all individual handlers.
|
||||||
*/
|
*/
|
||||||
|
m_handler_status= handler_opened;
|
||||||
info(HA_STATUS_VARIABLE | HA_STATUS_CONST);
|
info(HA_STATUS_VARIABLE | HA_STATUS_CONST);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
@ -2584,6 +2596,7 @@ repeat:
|
|||||||
goto repeat;
|
goto repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_handler_status= handler_closed;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2985,17 +2998,6 @@ int ha_partition::update_row(const uchar *old_data, uchar *new_data)
|
|||||||
DBUG_PRINT("info", ("Update in partition %d", new_part_id));
|
DBUG_PRINT("info", ("Update in partition %d", new_part_id));
|
||||||
tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
|
tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
|
||||||
error= m_file[new_part_id]->ha_update_row(old_data, new_data);
|
error= m_file[new_part_id]->ha_update_row(old_data, new_data);
|
||||||
/*
|
|
||||||
if updating an auto_increment column, update
|
|
||||||
table_share->ha_data->next_auto_inc_val if needed.
|
|
||||||
(not to be used if auto_increment on secondary field in a multi-
|
|
||||||
column index)
|
|
||||||
mysql_update does not set table->next_number_field, so we use
|
|
||||||
table->found_next_number_field instead.
|
|
||||||
*/
|
|
||||||
if (table->found_next_number_field && new_data == table->record[0] &&
|
|
||||||
!table->s->next_number_keypart)
|
|
||||||
set_auto_increment_if_higher(table->found_next_number_field->val_int());
|
|
||||||
reenable_binlog(thd);
|
reenable_binlog(thd);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
@ -3005,9 +3007,6 @@ int ha_partition::update_row(const uchar *old_data, uchar *new_data)
|
|||||||
old_part_id, new_part_id));
|
old_part_id, new_part_id));
|
||||||
tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
|
tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
|
||||||
error= m_file[new_part_id]->ha_write_row(new_data);
|
error= m_file[new_part_id]->ha_write_row(new_data);
|
||||||
if (table->found_next_number_field && new_data == table->record[0] &&
|
|
||||||
!table->s->next_number_keypart)
|
|
||||||
set_auto_increment_if_higher(table->found_next_number_field->val_int());
|
|
||||||
reenable_binlog(thd);
|
reenable_binlog(thd);
|
||||||
if (error)
|
if (error)
|
||||||
goto exit;
|
goto exit;
|
||||||
@ -3025,6 +3024,22 @@ int ha_partition::update_row(const uchar *old_data, uchar *new_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
/*
|
||||||
|
if updating an auto_increment column, update
|
||||||
|
table_share->ha_data->next_auto_inc_val if needed.
|
||||||
|
(not to be used if auto_increment on secondary field in a multi-column
|
||||||
|
index)
|
||||||
|
mysql_update does not set table->next_number_field, so we use
|
||||||
|
table->found_next_number_field instead.
|
||||||
|
*/
|
||||||
|
if (table->found_next_number_field && new_data == table->record[0] &&
|
||||||
|
!table->s->next_number_keypart)
|
||||||
|
{
|
||||||
|
HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data;
|
||||||
|
if (!ha_data->auto_inc_initialized)
|
||||||
|
info(HA_STATUS_AUTO);
|
||||||
|
set_auto_increment_if_higher(table->found_next_number_field->val_int());
|
||||||
|
}
|
||||||
table->timestamp_field_type= orig_timestamp_type;
|
table->timestamp_field_type= orig_timestamp_type;
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
@ -3571,7 +3586,7 @@ int ha_partition::rnd_pos_by_record(uchar *record)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Initialise handler before start of index scan
|
Initialize handler before start of index scan
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
index_init()
|
index_init()
|
||||||
@ -4456,7 +4471,7 @@ int ha_partition::handle_ordered_index_scan(uchar *buf, bool reverse_order)
|
|||||||
{
|
{
|
||||||
found= TRUE;
|
found= TRUE;
|
||||||
/*
|
/*
|
||||||
Initialise queue without order first, simply insert
|
Initialize queue without order first, simply insert
|
||||||
*/
|
*/
|
||||||
queue_element(&m_queue, j++)= (uchar*)queue_buf(i);
|
queue_element(&m_queue, j++)= (uchar*)queue_buf(i);
|
||||||
}
|
}
|
||||||
@ -4777,7 +4792,7 @@ int ha_partition::info(uint flag)
|
|||||||
}
|
}
|
||||||
} while (*(++file_array));
|
} while (*(++file_array));
|
||||||
if (stats.records < 2 &&
|
if (stats.records < 2 &&
|
||||||
!(m_table_flags & HA_STATS_RECORDS_IS_EXACT))
|
!(m_file[0]->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT))
|
||||||
stats.records= 2;
|
stats.records= 2;
|
||||||
if (stats.records > 0)
|
if (stats.records > 0)
|
||||||
stats.mean_rec_length= (ulong) (stats.data_file_length / stats.records);
|
stats.mean_rec_length= (ulong) (stats.data_file_length / stats.records);
|
||||||
@ -5151,7 +5166,7 @@ void ha_partition::get_dynamic_partition_info(PARTITION_INFO *stat_info,
|
|||||||
5) Parameters only used by MyISAM internally
|
5) Parameters only used by MyISAM internally
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
HA_EXTRA_REINIT_CACHE:
|
HA_EXTRA_REINIT_CACHE:
|
||||||
This call reinitialises the READ CACHE described above if there is one
|
This call reinitializes the READ CACHE described above if there is one
|
||||||
and otherwise the call is ignored.
|
and otherwise the call is ignored.
|
||||||
|
|
||||||
We can thus safely call it on all underlying handlers if they are
|
We can thus safely call it on all underlying handlers if they are
|
||||||
@ -5233,7 +5248,6 @@ int ha_partition::extra(enum ha_extra_function operation)
|
|||||||
break;
|
break;
|
||||||
case HA_EXTRA_NORMAL:
|
case HA_EXTRA_NORMAL:
|
||||||
case HA_EXTRA_QUICK:
|
case HA_EXTRA_QUICK:
|
||||||
case HA_EXTRA_NO_READCHECK:
|
|
||||||
case HA_EXTRA_PREPARE_FOR_UPDATE:
|
case HA_EXTRA_PREPARE_FOR_UPDATE:
|
||||||
case HA_EXTRA_FORCE_REOPEN:
|
case HA_EXTRA_FORCE_REOPEN:
|
||||||
case HA_EXTRA_PREPARE_FOR_DROP:
|
case HA_EXTRA_PREPARE_FOR_DROP:
|
||||||
@ -5243,6 +5257,14 @@ int ha_partition::extra(enum ha_extra_function operation)
|
|||||||
DBUG_RETURN(loop_extra(operation));
|
DBUG_RETURN(loop_extra(operation));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HA_EXTRA_NO_READCHECK:
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
This is only done as a part of ha_open, which is also used in
|
||||||
|
ha_partition::open, so no need to do anything.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
case HA_EXTRA_CACHE:
|
case HA_EXTRA_CACHE:
|
||||||
{
|
{
|
||||||
prepare_extra_cache(0);
|
prepare_extra_cache(0);
|
||||||
@ -6154,7 +6176,7 @@ void ha_partition::release_auto_increment()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
MODULE initialise handler for HANDLER call
|
MODULE initialize handler for HANDLER call
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
void ha_partition::init_table_handle_for_HANDLER()
|
void ha_partition::init_table_handle_for_HANDLER()
|
||||||
@ -6247,7 +6269,7 @@ int ha_partition::indexes_are_disabled(void)
|
|||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
Variables for partition share methods. A hash used to track open tables.
|
Variables for partition share methods. A hash used to track open tables.
|
||||||
A mutex for the hash table and an init variable to check if hash table
|
A mutex for the hash table and an init variable to check if hash table
|
||||||
is initialised.
|
is initialized.
|
||||||
There is also a constant ending of the partition handler file name.
|
There is also a constant ending of the partition handler file name.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -48,6 +48,13 @@ typedef struct st_ha_data_partition
|
|||||||
} HA_DATA_PARTITION;
|
} HA_DATA_PARTITION;
|
||||||
|
|
||||||
#define PARTITION_BYTES_IN_POS 2
|
#define PARTITION_BYTES_IN_POS 2
|
||||||
|
#define PARTITION_ENABLED_TABLE_FLAGS (HA_FILE_BASED | HA_REC_NOT_IN_SEQ)
|
||||||
|
#define PARTITION_DISABLED_TABLE_FLAGS (HA_CAN_GEOMETRY | \
|
||||||
|
HA_CAN_FULLTEXT | \
|
||||||
|
HA_DUPLICATE_POS | \
|
||||||
|
HA_CAN_SQL_HANDLER | \
|
||||||
|
HA_CAN_INSERT_DELAYED | \
|
||||||
|
HA_PRIMARY_KEY_REQUIRED_FOR_POSITION)
|
||||||
class ha_partition :public handler
|
class ha_partition :public handler
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@ -92,8 +99,15 @@ private:
|
|||||||
for this since the MySQL Server sometimes allocating the handler object
|
for this since the MySQL Server sometimes allocating the handler object
|
||||||
without freeing them.
|
without freeing them.
|
||||||
*/
|
*/
|
||||||
longlong m_table_flags;
|
|
||||||
ulong m_low_byte_first;
|
ulong m_low_byte_first;
|
||||||
|
enum enum_handler_status
|
||||||
|
{
|
||||||
|
handler_not_initialized= 0,
|
||||||
|
handler_initialized,
|
||||||
|
handler_opened,
|
||||||
|
handler_closed
|
||||||
|
};
|
||||||
|
enum_handler_status m_handler_status;
|
||||||
|
|
||||||
uint m_reorged_parts; // Number of reorganised parts
|
uint m_reorged_parts; // Number of reorganised parts
|
||||||
uint m_tot_parts; // Total number of partitions;
|
uint m_tot_parts; // Total number of partitions;
|
||||||
@ -189,7 +203,7 @@ public:
|
|||||||
enable later calls of the methods to retrieve constants from the under-
|
enable later calls of the methods to retrieve constants from the under-
|
||||||
lying handlers. Returns false if not successful.
|
lying handlers. Returns false if not successful.
|
||||||
*/
|
*/
|
||||||
bool initialise_partition(MEM_ROOT *mem_root);
|
bool initialize_partition(MEM_ROOT *mem_root);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
@ -594,6 +608,8 @@ public:
|
|||||||
The partition handler will support whatever the underlying handlers
|
The partition handler will support whatever the underlying handlers
|
||||||
support except when specifically mentioned below about exceptions
|
support except when specifically mentioned below about exceptions
|
||||||
to this rule.
|
to this rule.
|
||||||
|
NOTE: This cannot be cached since it can depend on TRANSACTION ISOLATION
|
||||||
|
LEVEL which is dynamic, see bug#39084.
|
||||||
|
|
||||||
HA_READ_RND_SAME:
|
HA_READ_RND_SAME:
|
||||||
Not currently used. (Means that the handler supports the rnd_same() call)
|
Not currently used. (Means that the handler supports the rnd_same() call)
|
||||||
@ -718,9 +734,33 @@ public:
|
|||||||
transfer those calls into index_read and other calls in the
|
transfer those calls into index_read and other calls in the
|
||||||
index scan module.
|
index scan module.
|
||||||
(NDB)
|
(NDB)
|
||||||
|
|
||||||
|
HA_PRIMARY_KEY_REQUIRED_FOR_POSITION:
|
||||||
|
Does the storage engine need a PK for position?
|
||||||
|
Used with hidden primary key in InnoDB.
|
||||||
|
Hidden primary keys cannot be supported by partitioning, since the
|
||||||
|
partitioning expressions columns must be a part of the primary key.
|
||||||
|
(InnoDB)
|
||||||
|
|
||||||
|
HA_FILE_BASED is always set for partition handler since we use a
|
||||||
|
special file for handling names of partitions, engine types.
|
||||||
|
HA_REC_NOT_IN_SEQ is always set for partition handler since we cannot
|
||||||
|
guarantee that the records will be returned in sequence.
|
||||||
|
HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_CAN_SQL_HANDLER, HA_DUPLICATE_POS,
|
||||||
|
HA_CAN_INSERT_DELAYED, HA_PRIMARY_KEY_REQUIRED_FOR_POSITION is disabled
|
||||||
|
until further investigated.
|
||||||
*/
|
*/
|
||||||
virtual ulonglong table_flags() const
|
virtual Table_flags table_flags() const
|
||||||
{ return m_table_flags; }
|
{
|
||||||
|
DBUG_ENTER("ha_partition::table_flags");
|
||||||
|
if (m_handler_status < handler_initialized ||
|
||||||
|
m_handler_status >= handler_closed)
|
||||||
|
DBUG_RETURN(PARTITION_ENABLED_TABLE_FLAGS);
|
||||||
|
else
|
||||||
|
DBUG_RETURN((m_file[0]->ha_table_flags() &
|
||||||
|
~(PARTITION_DISABLED_TABLE_FLAGS)) |
|
||||||
|
(PARTITION_ENABLED_TABLE_FLAGS));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is a bitmap of flags that says how the storage engine
|
This is a bitmap of flags that says how the storage engine
|
||||||
@ -892,10 +932,10 @@ private:
|
|||||||
{
|
{
|
||||||
HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data;
|
HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data;
|
||||||
lock_auto_increment();
|
lock_auto_increment();
|
||||||
|
DBUG_ASSERT(ha_data->auto_inc_initialized == TRUE);
|
||||||
/* must check when the mutex is taken */
|
/* must check when the mutex is taken */
|
||||||
if (nr >= ha_data->next_auto_inc_val)
|
if (nr >= ha_data->next_auto_inc_val)
|
||||||
ha_data->next_auto_inc_val= nr + 1;
|
ha_data->next_auto_inc_val= nr + 1;
|
||||||
ha_data->auto_inc_initialized= TRUE;
|
|
||||||
unlock_auto_increment();
|
unlock_auto_increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -903,7 +943,7 @@ public:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
MODULE initialise handler for HANDLER call
|
MODULE initialize handler for HANDLER call
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
This method is a special InnoDB method called before a HANDLER query.
|
This method is a special InnoDB method called before a HANDLER query.
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
|
@ -263,7 +263,7 @@ handler *get_ha_partition(partition_info *part_info)
|
|||||||
DBUG_ENTER("get_ha_partition");
|
DBUG_ENTER("get_ha_partition");
|
||||||
if ((partition= new ha_partition(partition_hton, part_info)))
|
if ((partition= new ha_partition(partition_hton, part_info)))
|
||||||
{
|
{
|
||||||
if (partition->initialise_partition(current_thd->mem_root))
|
if (partition->initialize_partition(current_thd->mem_root))
|
||||||
{
|
{
|
||||||
delete partition;
|
delete partition;
|
||||||
partition= 0;
|
partition= 0;
|
||||||
|
@ -1198,6 +1198,9 @@ public:
|
|||||||
{
|
{
|
||||||
return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0;
|
return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
The cached_table_flags is set at ha_open and ha_external_lock
|
||||||
|
*/
|
||||||
Table_flags ha_table_flags() const { return cached_table_flags; }
|
Table_flags ha_table_flags() const { return cached_table_flags; }
|
||||||
/**
|
/**
|
||||||
These functions represent the public interface to *users* of the
|
These functions represent the public interface to *users* of the
|
||||||
|
@ -171,7 +171,7 @@ int archive_db_init(void *p)
|
|||||||
|
|
||||||
if (pthread_mutex_init(&archive_mutex, MY_MUTEX_INIT_FAST))
|
if (pthread_mutex_init(&archive_mutex, MY_MUTEX_INIT_FAST))
|
||||||
goto error;
|
goto error;
|
||||||
if (hash_init(&archive_open_tables, system_charset_info, 32, 0, 0,
|
if (hash_init(&archive_open_tables, table_alias_charset, 32, 0, 0,
|
||||||
(hash_get_key) archive_get_key, 0, 0))
|
(hash_get_key) archive_get_key, 0, 0))
|
||||||
{
|
{
|
||||||
VOID(pthread_mutex_destroy(&archive_mutex));
|
VOID(pthread_mutex_destroy(&archive_mutex));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user