mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-19177: Geometry support by the partition feature.
Remove the limitation, add tests.
This commit is contained in:
125
mysql-test/main/partition_geometries.result
Normal file
125
mysql-test/main/partition_geometries.result
Normal file
@ -0,0 +1,125 @@
|
||||
#
|
||||
# MDEV-19177: Geometry support for partition feature
|
||||
# Test partition/geometry type cross-compatibility for the 4 storage engines that support
|
||||
# geometries (Aria, MyISAM, InnoDB, Archive)
|
||||
# Geometries to test - point, multipolygon, geometry collection
|
||||
# Note: Archive does not support additional indices.
|
||||
#
|
||||
SET @point = Point(3,3);
|
||||
SET @poly = MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))));
|
||||
SET @collection = GeometryCollection(Point(1,1), Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))));
|
||||
#
|
||||
# Aria engine
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=Aria PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
ST_AsGeoJSON(geom)
|
||||
{"type": "Point", "coordinates": [3, 3]}
|
||||
{"type": "MultiPolygon", "coordinates": [[[[0, 3], [3, 3], [3, 0], [0, 3]]]]}
|
||||
{"type": "GeometryCollection", "geometries": [{"type": "Point", "coordinates": [1, 1]}, {"type": "Polygon", "coordinates": [[[0, 3], [3, 3], [3, 0], [0, 3]]]}]}
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
SPATIAL KEY `geom` (`geom`)
|
||||
) ENGINE=Aria AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
PARTITION BY HASH (`id`)
|
||||
PARTITIONS 10
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MyISAM engine
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=myisam PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
ST_AsGeoJSON(geom)
|
||||
{"type": "Point", "coordinates": [3, 3]}
|
||||
{"type": "MultiPolygon", "coordinates": [[[[0, 3], [3, 3], [3, 0], [0, 3]]]]}
|
||||
{"type": "GeometryCollection", "geometries": [{"type": "Point", "coordinates": [1, 1]}, {"type": "Polygon", "coordinates": [[[0, 3], [3, 3], [3, 0], [0, 3]]]}]}
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
SPATIAL KEY `geom` (`geom`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
PARTITION BY HASH (`id`)
|
||||
PARTITIONS 10
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# InnoDB engine
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=innodb PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
ST_AsGeoJSON(geom)
|
||||
{"type": "Point", "coordinates": [3, 3]}
|
||||
{"type": "MultiPolygon", "coordinates": [[[[0, 3], [3, 3], [3, 0], [0, 3]]]]}
|
||||
{"type": "GeometryCollection", "geometries": [{"type": "Point", "coordinates": [1, 1]}, {"type": "Polygon", "coordinates": [[[0, 3], [3, 3], [3, 0], [0, 3]]]}]}
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
SPATIAL KEY `geom` (`geom`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
PARTITION BY HASH (`id`)
|
||||
PARTITIONS 10
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Archive engine
|
||||
#
|
||||
INSTALL SONAME 'ha_archive';
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry,
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=archive PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
ERROR HY000: The storage engine partition doesn't support SPATIAL indexes
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry,
|
||||
PRIMARY KEY (id)
|
||||
) Engine=archive PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
ST_AsGeoJSON(geom)
|
||||
{"type": "Point", "coordinates": [3, 3]}
|
||||
{"type": "MultiPolygon", "coordinates": [[[[0, 3], [3, 3], [3, 0], [0, 3]]]]}
|
||||
{"type": "GeometryCollection", "geometries": [{"type": "Point", "coordinates": [1, 1]}, {"type": "Polygon", "coordinates": [[[0, 3], [3, 3], [3, 0], [0, 3]]]}]}
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
PARTITION BY HASH (`id`)
|
||||
PARTITIONS 10
|
||||
DROP TABLE t1;
|
||||
UNINSTALL SONAME 'ha_archive';
|
93
mysql-test/main/partition_geometries.test
Normal file
93
mysql-test/main/partition_geometries.test
Normal file
@ -0,0 +1,93 @@
|
||||
-- source include/have_geometry.inc
|
||||
|
||||
if (!$HA_ARCHIVE_SO) {
|
||||
skip Needs Archive plugin;
|
||||
}
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-19177: Geometry support for partition feature
|
||||
--echo # Test partition/geometry type cross-compatibility for the 4 storage engines that support
|
||||
--echo # geometries (Aria, MyISAM, InnoDB, Archive)
|
||||
--echo # Geometries to test - point, multipolygon, geometry collection
|
||||
--echo # Note: Archive does not support additional indices.
|
||||
--echo #
|
||||
SET @point = Point(3,3);
|
||||
SET @poly = MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))));
|
||||
SET @collection = GeometryCollection(Point(1,1), Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))));
|
||||
|
||||
--source include/have_partition.inc
|
||||
|
||||
--echo #
|
||||
--echo # Aria engine
|
||||
--echo #
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=Aria PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MyISAM engine
|
||||
--echo #
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=myisam PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # InnoDB engine
|
||||
--echo #
|
||||
--source include/have_innodb.inc
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=innodb PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Archive engine
|
||||
--echo #
|
||||
|
||||
INSTALL SONAME 'ha_archive';
|
||||
--error ER_TABLE_CANT_HANDLE_SPKEYS
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry,
|
||||
SPATIAL INDEX(geom)
|
||||
) Engine=archive PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
CREATE TABLE t1 (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`geom` geometry,
|
||||
PRIMARY KEY (id)
|
||||
) Engine=archive PARTITION BY HASH (id)
|
||||
PARTITIONS 10;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, @point), (NULL, @poly), (NULL, @collection);
|
||||
SELECT ST_AsGeoJSON(geom) FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
UNINSTALL SONAME 'ha_archive';
|
||||
|
@ -1093,7 +1093,7 @@ PARTITION pNorth VALUES IN (10,20,30) ,
|
||||
PARTITION pEast VALUES IN (40,50,60) ,
|
||||
PARTITION pWest VALUES IN (70,80,100)
|
||||
);
|
||||
ERROR 42000: The storage engine for the table doesn't support GEOMETRY
|
||||
ERROR HY000: A BLOB field is not allowed in partition function
|
||||
#check start transaction commit & Rollback
|
||||
START TRANSACTION;
|
||||
DELETE FROM tab3;
|
||||
|
@ -648,7 +648,7 @@ CREATE TABLE child (id GEOMETRY, parent_id GEOMETRY,
|
||||
) ENGINE=INNODB;
|
||||
|
||||
--echo #check partition table support
|
||||
--error 1178
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
CREATE TABLE emp2(
|
||||
id GEOMETRY NOT NULL,
|
||||
store_name VARCHAR(30),
|
||||
|
@ -75,8 +75,7 @@
|
||||
HA_REC_NOT_IN_SEQ | \
|
||||
HA_CAN_REPAIR | \
|
||||
HA_REUSES_FILE_NAMES)
|
||||
#define PARTITION_DISABLED_TABLE_FLAGS (HA_CAN_GEOMETRY | \
|
||||
HA_DUPLICATE_POS | \
|
||||
#define PARTITION_DISABLED_TABLE_FLAGS (HA_DUPLICATE_POS | \
|
||||
HA_CAN_INSERT_DELAYED | \
|
||||
HA_READ_BEFORE_WRITE_REMOVAL |\
|
||||
HA_CAN_TABLES_WITHOUT_ROLLBACK)
|
||||
|
Reference in New Issue
Block a user