1--source include/have_innodb.inc
2#
3# Check if partitioning is already active
4#
5if (`SELECT COUNT(*) != 0 FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name = 'partition' AND plugin_status = 'ACTIVE'`) {
6  --skip The generic partitioning engine is already active!
7}
8
9#
10# Check if server has support for loading plugins
11#
12if (`SELECT @@have_dynamic_loading != 'YES'`) {
13  --skip plugin requires dynamic loading
14}
15
16#
17# Check if the variable PARTITION_PLUGIN is set
18#
19if (!$PARTITION_PLUGIN) {
20  --skip Could not find library for partition plugin, see the file plugin.defs
21}
22
23#
24# Check if --plugin-dir was setup for partition.
25#
26if (`SELECT CONCAT('--plugin-dir=', REPLACE(@@plugin_dir, '\\\\', '/')) != '$PARTITION_PLUGIN_OPT/'`) {
27  --skip Partition plugin requires that --plugin-dir is set to the partition plugin dir
28}
29
30# Save the initial number of concurrent sessions
31--source include/count_sessions.inc
32
33let $have_innodb_native_partitioning= 1;
34if ($have_innodb_native_partitioning)
35{
36  --echo # InnoDB supports native partitioning and is required by the test.
37  CREATE TABLE t1 (a int)
38  ENGINE = InnoDB
39  PARTITION BY HASH (a) PARTITIONS 2;
40  INSERT INTO t1 VALUES (1);
41  SELECT * FROM t1;
42  SHOW CREATE TABLE t1;
43  DROP TABLE t1;
44}
45
46--echo # MyISAM requires ha_partition to support partitioning.
47--error ER_FEATURE_NOT_AVAILABLE
48CREATE TABLE t1 (a int)
49ENGINE = MyISAM
50PARTITION BY HASH (a) PARTITIONS 2;
51
52--replace_regex /\.dll/.so/
53eval INSTALL PLUGIN `partition` SONAME '$PARTITION_PLUGIN';
54--replace_regex /\.dll/.so/
55SELECT PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY, PLUGIN_AUTHOR, PLUGIN_DESCRIPTION, PLUGIN_LICENSE, LOAD_OPTION FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'PARTITION';
56
57--replace_regex /\.dll/.so/
58--error ER_UDF_EXISTS
59eval INSTALL PLUGIN `PARTITION` SONAME '$PARTITION_PLUGIN';
60
61CREATE TABLE t1 (a int)
62ENGINE = MyISAM
63PARTITION BY HASH (a) PARTITIONS 2;
64INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
65
66--echo # UNINSTALL will give a warning since an open table is in the table cache
67UNINSTALL PLUGIN `partition`;
68
69--echo # Still working due to UNINSTALL not yet completed
70SHOW CREATE TABLE t1;
71SELECT COUNT(*) FROM t1;
72SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'PARTITION';
73SELECT COUNT(*) FROM mysql.plugin;
74--echo # FLUSH TABLES will close all tables and allow the UNINSTALL to complete
75FLUSH TABLES;
76SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name = 'partition';
77SELECT COUNT(*) FROM mysql.plugin;
78--error ER_FEATURE_NOT_AVAILABLE
79SHOW CREATE TABLE t1;
80--error ER_FEATURE_NOT_AVAILABLE
81SELECT COUNT(*) FROM t1;
82--error ER_FEATURE_NOT_AVAILABLE
83CREATE TABLE t2 (a int)
84ENGINE = MyISAM
85PARTITION BY HASH (a) PARTITIONS 2;
86--error ER_STORAGE_ENGINE_NOT_LOADED
87DROP TABLE t1;
88
89--replace_regex /\.dll/.so/
90eval INSTALL PLUGIN `PARTITION` SONAME '$PARTITION_PLUGIN';
91--replace_regex /\.dll/.so/
92SELECT PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY, PLUGIN_AUTHOR, PLUGIN_DESCRIPTION, PLUGIN_LICENSE, LOAD_OPTION FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'PARTITION';
93
94--replace_regex /\.dll/.so/
95--error ER_UDF_EXISTS
96eval INSTALL PLUGIN `partition` SONAME '$PARTITION_PLUGIN';
97
98DROP TABLE t1;
99
100--echo # Simple partitioned table test
101CREATE TABLE t1(a int) PARTITION BY HASH (a) PARTITIONS 2;
102SHOW CREATE TABLE t1;
103INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
104ALTER TABLE t1 ADD PARTITION PARTITIONS 1;
105INSERT INTO t1 VALUES (6), (7), (8);
106SELECT COUNT(*) FROM t1;
107
108--echo # Cannot drop a partition from a HASH partitioned table
109--error ER_ONLY_ON_RANGE_LIST_PARTITION
110ALTER TABLE t1 DROP PARTITION p0;
111ALTER TABLE t1 COALESCE PARTITION 2;
112--error ER_DROP_LAST_PARTITION
113ALTER TABLE t1 COALESCE PARTITION 1;
114SHOW CREATE TABLE t1;
115DROP TABLE t1;
116
117UNINSTALL PLUGIN `partition`;
118--error ER_SP_DOES_NOT_EXIST
119UNINSTALL PLUGIN `PARTITION`;
120