#Creating the spatial Geometry object USE test; CREATE TABLE gis_point_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g POINT NOT NULL SRID 0,spatial index (g) ) engine=myisam; select count(g) from gis_point_with_spatial_index where ST_AsText(g) like "%100 10%"; count(g) 0 select ST_AsText(g) from gis_point_with_spatial_index where ST_AsText(g) like "%100 10%"; ST_AsText(g) DROP TABLE gis_point_with_spatial_index; CREATE TABLE gis_line_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_line_with_spatial_index where ST_AsText(g) like "%100 10%"; count(g) 0 select ST_AsText(g) from gis_line_with_spatial_index where ST_AsText(g) like "%100 10%"; ST_AsText(g) DROP TABLE gis_line_with_spatial_index; CREATE TABLE gis_polygon_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_polygon_with_spatial_index where ST_AsText(g) like "%10 10%"; count(g) 0 select ST_AsText(g) from gis_polygon_with_spatial_index where ST_AsText(g) like "%10 10%"; ST_AsText(g) DROP TABLE gis_polygon_with_spatial_index; CREATE TABLE gis_multipoint_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_multipoint_with_spatial_index where ST_AsText(g) like "%10 10%"; count(g) 0 select ST_AsText(g) from gis_multipoint_with_spatial_index where ST_AsText(g) like "%10 10%"; ST_AsText(g) DROP TABLE gis_multipoint_with_spatial_index; CREATE TABLE gis_multiline_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_multiline_with_spatial_index where ST_AsText(g) like "%10 0%"; count(g) 0 select ST_AsText(g) from gis_multiline_with_spatial_index where ST_AsText(g) like "%10 0%"; ST_AsText(g) DROP TABLE gis_multiline_with_spatial_index; CREATE TABLE gis_multipolygon_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_multipolygon_with_spatial_index where ST_AsText(g) like "%10 10%"; count(g) 0 select ST_AsText(g) from gis_multipolygon_with_spatial_index where ST_AsText(g) like "%10 10%"; ST_AsText(g) select count(g) from gis_multipolygon_with_spatial_index where ST_AsText(g) like "%84 0%"; count(g) 0 select ST_AsText(g) from gis_multipolygon_with_spatial_index where ST_AsText(g) like "%84 0%"; ST_AsText(g) DROP TABLE gis_multipolygon_with_spatial_index; CREATE TABLE gis_geometrycollection_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_geometrycollection_with_spatial_index where ST_AsText(g) like "%10 10%"; count(g) 0 select ST_AsText(g) from gis_geometrycollection_with_spatial_index where ST_AsText(g) like "%10 10%"; ST_AsText(g) DROP TABLE gis_geometrycollection_with_spatial_index; CREATE TABLE gis_geometry_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY NOT NULL SRID 0, spatial index (g) ) engine=myisam; select count(g) from gis_geometry_with_spatial_index where ST_AsText(g) like "%10 10%"; count(g) 0 select ST_AsText(g) from gis_geometry_with_spatial_index where ST_AsText(g) like "%10 10%"; ST_AsText(g) DROP TABLE gis_geometry_with_spatial_index; CREATE TABLE gis_point_and_int_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING NOT NULL SRID 0,spatial index (g) ) engine=myisam; select count(g) from gis_point_and_int_with_spatial_index where ST_AsText(g) like "%100 10%"; count(g) 0 select ST_AsText(g) from gis_point_and_int_with_spatial_index where ST_AsText(g) like "%100 10%"; ST_AsText(g) DROP TABLE gis_point_and_int_with_spatial_index; CREATE TABLE gis_point_and_int_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g POINT NOT NULL SRID 0, a int, spatial index (g) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_point_and_int_with_spatial_index VALUES (101, ST_PointFromText('POINT(10 10)'),1), (102, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(10 20)'))),21), (103, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(100 20)'))),3), (104, ST_GeomFromWKB(ST_AsWKB(ST_PointFromText('POINT(100 20)'))),3); SELECT COUNT(g) FROM gis_point_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%point%"; COUNT(g) 4 ALTER TABLE gis_point_and_int_with_spatial_index DROP INDEX g; CREATE SPATIAL INDEX g ON gis_point_and_int_with_spatial_index (g); SELECT COUNT(g) FROM gis_point_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%point%"; COUNT(g) 4 ALTER TABLE gis_point_and_int_with_spatial_index DROP INDEX g; CREATE INDEX a ON gis_point_and_int_with_spatial_index (a) ; select count(g) from gis_point_and_int_with_spatial_index where a like "%3%"; count(g) 2 select ST_AsText(g) from gis_point_and_int_with_spatial_index where a like "%3%"; ST_AsText(g) POINT(100 20) POINT(100 20) DROP TABLE gis_point_and_int_with_spatial_index; CREATE TABLE gis_point_and_int_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g POINT NOT NULL SRID 0, a int, index (a) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_point_and_int_with_spatial_index VALUES (101, ST_PointFromText('POINT(10 10)'),1), (102, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(10 20)'))),21), (103, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(100 20)'))),3), (104, ST_GeomFromWKB(ST_AsWKB(ST_PointFromText('POINT(101 20)'))),3); select count(g) from gis_point_and_int_with_spatial_index where a like "%3%"; count(g) 2 SELECT COUNT(a) FROM gis_point_and_int_with_spatial_index WHERE a LIKE "%3%"; COUNT(a) 2 ALTER TABLE gis_point_and_int_with_spatial_index DROP INDEX a; CREATE SPATIAL INDEX g ON gis_point_and_int_with_spatial_index (g); SELECT COUNT(g) FROM gis_point_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%point%"; COUNT(g) 4 SELECT COUNT(a) FROM gis_point_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%point%"; COUNT(a) 4 DROP TABLE gis_point_and_int_with_spatial_index ; CREATE TABLE gis_linestring_and_int_with_spatial_index (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING NOT NULL SRID 0, a int, spatial index (g) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_linestring_and_int_with_spatial_index VALUES (201,ST_LineFromText('LINESTRING(0 0,0 10,10 0)'),1), (202,ST_LineFromText('LINESTRING(1 1,1 10,10 20)'),2), (203,ST_LineFromText('LINESTRING(1 1,1 10,10 20)'),2); select count(g) from gis_linestring_and_int_with_spatial_index where ST_AsText(g) like "%0%"; count(g) 3 select count(a) from gis_linestring_and_int_with_spatial_index where ST_AsText(g) like "%0%"; count(a) 3 select count(a) from gis_linestring_and_int_with_spatial_index where ST_AsText(g) like "%10 10%"; count(a) 0 ALTER TABLE gis_linestring_and_int_with_spatial_index DROP INDEX g; CREATE INDEX a ON gis_linestring_and_int_with_spatial_index (a) ; SELECT COUNT(g) FROM gis_linestring_and_int_with_spatial_index WHERE a LIKE "%2%"; COUNT(g) 2 ALTER TABLE gis_linestring_and_int_with_spatial_index DROP INDEX a; CREATE SPATIAL INDEX g ON gis_linestring_and_int_with_spatial_index (g) ; SELECT COUNT(g) FROM gis_linestring_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%2%"; COUNT(g) 2 DROP TABLE gis_linestring_and_int_with_spatial_index ; CREATE TABLE gis_multilinestring_and_int_with_spatial_index (fid INTEGER PRIMARY KEY, g MULTILINESTRING NOT NULL SRID 0, a int, spatial index (g) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_multilinestring_and_int_with_spatial_index VALUES (300,ST_MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))'),1), (301,ST_MultiLineStringFromText('MULTILINESTRING((130 48,180 21,10 90),(916 0,516 2373223,816 48))'),1), (302,ST_MultiLineStringFromText('MULTILINESTRING((180 48,10 25891,160 0),(5416 0,19096 29093,19096 498))'),1); select count(g) from gis_multilinestring_and_int_with_spatial_index where ST_AsText(g) like "%48%"; count(g) 3 select count(a) from gis_multilinestring_and_int_with_spatial_index where ST_AsText(g) like "%48%"; count(a) 3 ALTER TABLE gis_multilinestring_and_int_with_spatial_index DROP INDEX g; CREATE INDEX a ON gis_multilinestring_and_int_with_spatial_index (a) ; SELECT COUNT(g) FROM gis_multilinestring_and_int_with_spatial_index WHERE a LIKE "%2%"; COUNT(g) 0 ALTER TABLE gis_multilinestring_and_int_with_spatial_index DROP INDEX a; CREATE SPATIAL INDEX g ON gis_multilinestring_and_int_with_spatial_index (g) ; SELECT COUNT(g) FROM gis_multilinestring_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%48%"; COUNT(g) 3 DROP TABLE gis_multilinestring_and_int_with_spatial_index ; CREATE TABLE gis_polygon_and_int_with_spatial_index (fid INTEGER PRIMARY KEY, g POLYGON NOT NULL SRID 0, a int, spatial index (g) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_polygon_and_int_with_spatial_index VALUES (300,ST_PolygonFromText('POLYGON((183670 10,2470 10,20 249380,10 254760,183670 10))'),12), (301,ST_PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))'),2), (302,ST_PolygonFromText('POLYGON((110 10,320 310,2550 8520,1059 2590,110 10))'),2), (303,ST_PolygonFromText('POLYGON((180 160,55620 5610,240 206560,10 285960,180 160))'),2); select count(g) from gis_polygon_and_int_with_spatial_index where ST_AsText(g) like "%10 10%"; count(g) 2 select count(a) from gis_polygon_and_int_with_spatial_index where ST_AsText(g) like "%10 10%"; count(a) 2 ALTER TABLE gis_polygon_and_int_with_spatial_index DROP INDEX g; CREATE INDEX a ON gis_polygon_and_int_with_spatial_index (a) ; SELECT COUNT(g) FROM gis_polygon_and_int_with_spatial_index WHERE a LIKE "%2%"; COUNT(g) 4 ALTER TABLE gis_polygon_and_int_with_spatial_index DROP INDEX a; CREATE SPATIAL INDEX g ON gis_polygon_and_int_with_spatial_index (g) ; SELECT COUNT(g) FROM gis_polygon_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%48%"; COUNT(g) 0 DROP TABLE gis_polygon_and_int_with_spatial_index ; CREATE TABLE gis_multipolygon_and_int_with_spatial_index (fid INTEGER PRIMARY KEY, g multiPOLYGON NOT NULL SRID 0, a int, spatial index (g) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_multipolygon_and_int_with_spatial_index VALUES (1,ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),1), (2,ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,864 0,8984 42,28 26),(2 18,66 348345723,73 9,48 6,2 18)),((519 18,67 18,348345767 13,59 13,519 18)))'),1), (5,ST_MultiPolygonFromText('MULTIPOLYGON(((254397348 26,28 0,84 0,84 42,254397348 26),(52 18,634834576 23,73 9,48 34834576,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),1), (9,ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,834834574 42,28 26),(52 18,348345766 23,73 9,434834578 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),1); select count(g) from gis_multipolygon_and_int_with_spatial_index where ST_AsText(g) like "%59 18%"; count(g) 3 select count(a) from gis_multipolygon_and_int_with_spatial_index where ST_AsText(g) like "%59 18%"; count(a) 3 ALTER TABLE gis_multipolygon_and_int_with_spatial_index DROP INDEX g; CREATE INDEX a ON gis_multipolygon_and_int_with_spatial_index (a) ; SELECT COUNT(g) FROM gis_multipolygon_and_int_with_spatial_index WHERE a LIKE "%1%"; COUNT(g) 4 ALTER TABLE gis_multipolygon_and_int_with_spatial_index DROP INDEX a; CREATE SPATIAL INDEX g ON gis_multipolygon_and_int_with_spatial_index (g) ; SELECT COUNT(g) FROM gis_multipolygon_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%18%"; COUNT(g) 4 DROP TABLE gis_multipolygon_and_int_with_spatial_index ; CREATE TABLE gis_multipolygon_and_int_with_spatial_index (fid INTEGER NOT NULL, g MULTIPOLYGON PRIMARY KEY, a int) engine=myisam; ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE TABLE gis_multipolygon_and_int_with_spatial_index (fid INTEGER NOT NULL, g MULTIPOLYGON, a int, unique index (g) ) engine=myisam; ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE TABLE gis_multipolygon_and_int_with_spatial_index (fid INTEGER NOT NULL, g MULTIPOLYGON, a int, spatial index (g) ) engine=myisam; ERROR 42000: All parts of a SPATIAL index must be NOT NULL CREATE TABLE gis_multipolygon_and_int_with_spatial_index (fid INTEGER NOT NULL, g MULTIPOLYGON, a int, spatial index (fid) ) engine=myisam; ERROR 42000: A SPATIAL index may only contain a geometrical type column CREATE TABLE gis_multipolygon_and_int_with_spatial_index (fid INTEGER PRIMARY KEY, g MULTIPOLYGON NOT NULL SRID 0, a int, spatial index (g) ) engine=myisam; #INSERT valid entries to Point class INSERT INTO gis_multipolygon_and_int_with_spatial_index VALUES (1,ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),1), (2,ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,864 0,8984 42,28 26),(2 18,66 348345723,73 9,48 6,2 18)),((519 18,67 18,348345767 13,59 13,519 18)))'),1), (5,ST_MultiPolygonFromText('MULTIPOLYGON(((254397348 26,28 0,84 0,84 42,254397348 26),(52 18,634834576 23,73 9,48 34834576,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),1), (9,ST_MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,834834574 42,28 26),(52 18,348345766 23,73 9,434834578 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))'),1); select count(g) from gis_multipolygon_and_int_with_spatial_index where ST_AsText(g) like "%59 18%"; count(g) 3 select count(a) from gis_multipolygon_and_int_with_spatial_index where ST_AsText(g) like "%59 18%"; count(a) 3 ALTER TABLE gis_multipolygon_and_int_with_spatial_index DROP INDEX g; CREATE INDEX a ON gis_multipolygon_and_int_with_spatial_index (a) ; SELECT COUNT(g) FROM gis_multipolygon_and_int_with_spatial_index WHERE a LIKE "%1%"; COUNT(g) 4 ALTER TABLE gis_multipolygon_and_int_with_spatial_index DROP INDEX a; CREATE INDEX g ON gis_multipolygon_and_int_with_spatial_index (g) ; DROP INDEX g ON gis_multipolygon_and_int_with_spatial_index; CREATE SPATIAL INDEX a ON gis_multipolygon_and_int_with_spatial_index (a) ; ERROR 42000: A SPATIAL index may only contain a geometrical type column CREATE SPATIAL INDEX g ON gis_multipolygon_and_int_with_spatial_index (g) ; SELECT COUNT(g) FROM gis_multipolygon_and_int_with_spatial_index WHERE ST_AsText(g) LIKE "%18%"; COUNT(g) 4 DROP TABLE gis_multipolygon_and_int_with_spatial_index ; # # Bug #21087676 FORBID BUILDING NON-SPATIAL INDEX ON GEOMETRY COLUMNS # # Primary key on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0 PRIMARY KEY); ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL PRIMARY KEY); ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE TABLE t1 (g GEOMETRY SRID 0); ALTER TABLE t1 ADD PRIMARY KEY (g); ERROR HY000: Spatial indexes can't be primary or unique indexes. DROP TABLE t1; # Unique index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0 UNIQUE); ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL UNIQUE); ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE UNIQUE INDEX g_idx ON t1(g); ERROR HY000: Spatial indexes can't be primary or unique indexes. ALTER TABLE t1 ADD UNIQUE INDEX (g); ERROR HY000: Spatial indexes can't be primary or unique indexes. DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE UNIQUE INDEX g_idx ON t1(g); ERROR HY000: Spatial indexes can't be primary or unique indexes. ALTER TABLE t1 ADD UNIQUE INDEX (g); ERROR HY000: Spatial indexes can't be primary or unique indexes. DROP TABLE t1; # Prefix index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, INDEX (g(10))); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g(10))); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE INDEX g_idx ON t1(g(10)); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys ALTER TABLE t1 ADD INDEX (g(10)); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g(10)); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys ALTER TABLE t1 ADD INDEX (g(10)); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys DROP TABLE t1; # Multi-column index on geometry column is not allowed. CREATE TABLE t1 ( g1 GEOMETRY SRID 0 NOT NULL, g2 GEOMETRY SRID 0 NOT NULL, INDEX (g1, g2) ); ERROR 42000: Too many key parts specified; max 1 parts allowed CREATE TABLE t1 ( g1 GEOMETRY SRID 0, g2 GEOMETRY SRID 0, INDEX (g1, g2) ); ERROR 42000: Too many key parts specified; max 1 parts allowed CREATE TABLE t1 (g GEOMETRY SRID 0, a INT, INDEX (g, a)); ERROR 42000: Too many key parts specified; max 1 parts allowed CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, a INT, INDEX (g, a)); ERROR 42000: Too many key parts specified; max 1 parts allowed CREATE TABLE t1 (g1 GEOMETRY SRID 0, g2 GEOMETRY SRID 0, a INT); CREATE INDEX g_idx ON t1(g1, g2); ERROR 42000: Too many key parts specified; max 1 parts allowed CREATE INDEX g_idx ON t1(g1, a); ERROR 42000: Too many key parts specified; max 1 parts allowed ALTER TABLE t1 ADD INDEX (g1, g2); ERROR 42000: Too many key parts specified; max 1 parts allowed ALTER TABLE t1 ADD INDEX (g1, a); ERROR 42000: Too many key parts specified; max 1 parts allowed DROP TABLE t1; CREATE TABLE t1 ( g1 GEOMETRY SRID 0 NOT NULL, g2 GEOMETRY SRID 0 NOT NULL, a INT ); CREATE INDEX g_idx ON t1(g1, g2); ERROR 42000: Too many key parts specified; max 1 parts allowed CREATE INDEX g_idx ON t1(g1, a); ERROR 42000: Too many key parts specified; max 1 parts allowed ALTER TABLE t1 ADD INDEX (g1, g2); ERROR 42000: Too many key parts specified; max 1 parts allowed ALTER TABLE t1 ADD INDEX (g1, a); ERROR 42000: Too many key parts specified; max 1 parts allowed DROP TABLE t1; # Explicit B-tree index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, INDEX (g) USING BTREE); ERROR HY000: The index type BTREE is not supported for spatial indexes. CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g) USING BTREE); ERROR HY000: The index type BTREE is not supported for spatial indexes. CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE INDEX g_idx ON t1(g) USING BTREE; ERROR HY000: The index type BTREE is not supported for spatial indexes. ALTER TABLE t1 ADD INDEX (g) USING BTREE; ERROR HY000: The index type BTREE is not supported for spatial indexes. DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g) USING BTREE; ERROR HY000: The index type BTREE is not supported for spatial indexes. ALTER TABLE t1 ADD INDEX (g) USING BTREE; ERROR HY000: The index type BTREE is not supported for spatial indexes. DROP TABLE t1; # Explicit hash index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, INDEX (g) USING HASH); ERROR HY000: The index type HASH is not supported for spatial indexes. CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g) USING HASH); ERROR HY000: The index type HASH is not supported for spatial indexes. CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE INDEX g_idx ON t1(g) USING HASH; ERROR HY000: The index type HASH is not supported for spatial indexes. ALTER TABLE t1 ADD INDEX (g) USING HASH; ERROR HY000: The index type HASH is not supported for spatial indexes. DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g) USING HASH; ERROR HY000: The index type HASH is not supported for spatial indexes. ALTER TABLE t1 ADD INDEX (g) USING HASH; ERROR HY000: The index type HASH is not supported for spatial indexes. DROP TABLE t1; # Explicit ASC index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, INDEX (g ASC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g ASC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE INDEX g_idx ON t1(g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD INDEX (g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD INDEX (g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0, SPATIAL INDEX (g ASC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, SPATIAL INDEX (g ASC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE SPATIAL INDEX g_idx ON t1(g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD SPATIAL INDEX (g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE SPATIAL INDEX g_idx ON t1(g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD SPATIAL INDEX (g ASC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; # Explicit DESC index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, INDEX (g DESC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g DESC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE INDEX g_idx ON t1(g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD INDEX (g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD INDEX (g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0, SPATIAL INDEX (g DESC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, SPATIAL INDEX (g DESC)); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE SPATIAL INDEX g_idx ON t1(g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD SPATIAL INDEX (g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE SPATIAL INDEX g_idx ON t1(g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order ALTER TABLE t1 ADD SPATIAL INDEX (g DESC); ERROR HY000: Incorrect usage of spatial/fulltext/hash index and explicit index order DROP TABLE t1; # Fulltext index on geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, FULLTEXT INDEX (g)); ERROR HY000: Column 'g' cannot be part of FULLTEXT index CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, FULLTEXT INDEX (g)); ERROR HY000: Column 'g' cannot be part of FULLTEXT index CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE FULLTEXT INDEX g_idx ON t1(g); ERROR HY000: Column 'g' cannot be part of FULLTEXT index ALTER TABLE t1 ADD FULLTEXT INDEX (g); ERROR HY000: Column 'g' cannot be part of FULLTEXT index DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE FULLTEXT INDEX g_idx ON t1(g); ERROR HY000: Column 'g' cannot be part of FULLTEXT index ALTER TABLE t1 ADD FULLTEXT INDEX (g); ERROR HY000: Column 'g' cannot be part of FULLTEXT index DROP TABLE t1; # Index on nullable geometry column is not allowed. CREATE TABLE t1 (g GEOMETRY SRID 0, INDEX (g)); ERROR 42000: All parts of a SPATIAL index must be NOT NULL CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE INDEX g_idx ON t1(g); ERROR 42000: All parts of a SPATIAL index must be NOT NULL ALTER TABLE t1 ADD INDEX (g); ERROR 42000: All parts of a SPATIAL index must be NOT NULL DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0, SPATIAL INDEX (g)); ERROR 42000: All parts of a SPATIAL index must be NOT NULL CREATE TABLE t1 (g GEOMETRY SRID 0); CREATE SPATIAL INDEX g_idx ON t1(g); ERROR 42000: All parts of a SPATIAL index must be NOT NULL ALTER TABLE t1 ADD SPATIAL INDEX (g); ERROR 42000: All parts of a SPATIAL index must be NOT NULL DROP TABLE t1; # Index on non-nullable geometry column is allowed. CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g)); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g_idx` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); ALTER TABLE t1 ADD INDEX (g), ALGORITHM=COPY; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP INDEX g ON t1; ALTER TABLE t1 ADD INDEX (g), ALGORITHM=INPLACE; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, SPATIAL INDEX (g)); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE SPATIAL INDEX g_idx ON t1(g); SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g_idx` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); ALTER TABLE t1 ADD SPATIAL INDEX (g), ALGORITHM=COPY; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP INDEX g ON t1; ALTER TABLE t1 ADD SPATIAL INDEX (g), ALGORITHM=INPLACE; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `g` geometry NOT NULL /*!80003 SRID 0 */, SPATIAL KEY `g` (`g`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci DROP TABLE t1; # Virtual generated geometry columns don't support spatial indexes. CREATE TABLE t1 (x INTEGER, y INTEGER, g POINT AS (POINT(x, y)) VIRTUAL SRID 0 NOT NULL); ALTER TABLE t1 ADD PRIMARY KEY (g); ERROR HY000: 'Spatial index on virtual generated column' is not supported for generated columns. CREATE INDEX g_idx ON t1(g); ERROR HY000: 'Spatial index on virtual generated column' is not supported for generated columns. CREATE INDEX g_idx ON t1(g(25)); ERROR HY000: 'Spatial index on virtual generated column' is not supported for generated columns. CREATE INDEX g_idx ON t1(g) USING BTREE; ERROR HY000: 'Spatial index on virtual generated column' is not supported for generated columns. DROP TABLE t1; # Stored generated geometry columns follow the same rules as # non-generated columns. CREATE TABLE t1 (x INTEGER, y INTEGER, g POINT AS (POINT(x, y)) STORED SRID 0 NOT NULL); ALTER TABLE t1 ADD PRIMARY KEY (g); ERROR HY000: Spatial indexes can't be primary or unique indexes. CREATE INDEX g_idx ON t1(g); DROP INDEX g_idx ON t1; CREATE INDEX g_idx ON t1(g(25)); ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys CREATE INDEX g_idx ON t1(g) USING BTREE; ERROR HY000: The index type BTREE is not supported for spatial indexes. DROP TABLE t1; # # Bug #27836608 INACCURATE ERROR THROWN WHILE CREATING SPATIAL INDEX OF # INVALID TYPE # # Explicit R-tree index on geometry column is allowed. CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL, INDEX (g) USING RTREE); DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY SRID 0 NOT NULL); CREATE INDEX g_idx ON t1(g) USING RTREE; DROP INDEX g_idx ON t1; ALTER TABLE t1 ADD INDEX (g) USING RTREE; DROP TABLE t1; # Explicit R-tree index on non-gometry column is not allowed. CREATE TABLE t1 (a INT NOT NULL, INDEX (a) USING RTREE); ERROR 42000: A SPATIAL index may only contain a geometrical type column CREATE TABLE t1 (a INT NOT NULL); CREATE INDEX a_idx ON t1(a) USING RTREE; ERROR 42000: A SPATIAL index may only contain a geometrical type column ALTER TABLE t1 ADD INDEX (a) USING RTREE; ERROR 42000: A SPATIAL index may only contain a geometrical type column DROP TABLE t1;