You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
8.0 KiB
245 lines
8.0 KiB
# Bug #27252609 UNABLE TO CREATE INDEX WHEN SPATIAL DATATYPES ARE USED
|
|
# WITH REQUIRED OPTION
|
|
|
|
# This file contains test cases that should be run both in strict and non-strict
|
|
# modes.
|
|
|
|
#
|
|
# ALTER TABLE with generated geometry column
|
|
#
|
|
|
|
# Stored generated column with valid geometry.
|
|
CREATE TABLE t1 (doc JSON) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
--error ER_ALTER_OPERATION_NOT_SUPPORTED
|
|
ALTER TABLE t1
|
|
ADD COLUMN g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) STORED NOT NULL,
|
|
ALGORITHM=INPLACE;
|
|
ALTER TABLE t1
|
|
ADD COLUMN g2 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) STORED NOT NULL,
|
|
ALGORITHM=COPY;
|
|
DROP TABLE t1;
|
|
|
|
# Stored generated column with invalid geometry value or NULL in non-nullable
|
|
# column. Both should fail since the value is invalid for the column.
|
|
CREATE TABLE t1 (doc JSON) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid-geojson":[11.11,12.22]}}'
|
|
);
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
ALTER TABLE t1
|
|
ADD COLUMN g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) STORED NOT NULL;
|
|
# ST_CROSSES(polygon, point) is always NULL.
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
ALTER TABLE t1
|
|
ADD COLUMN g2 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_CROSSES(ST_GEOMFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 0))'),
|
|
ST_GEOMFROMTEXT('POINT(0 0)'))
|
|
) STORED NOT NULL;
|
|
DROP TABLE t1;
|
|
|
|
# Virtual generated column with valid geometry.
|
|
CREATE TABLE t1 (doc JSON) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
ALTER TABLE t1
|
|
ADD COLUMN g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=INPLACE;
|
|
ALTER TABLE t1
|
|
ADD COLUMN g2 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=COPY;
|
|
SELECT doc FROM t1;
|
|
SELECT ST_ASTEXT(g1) FROM t1;
|
|
SELECT ST_ASTEXT(g2) FROM t1;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid":[11.11,12.22]}}'
|
|
);
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","coordinates":[1,2]}}';
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","invalid":[11.11,12.22]}}';
|
|
DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Virtual generated column with invalid geometry value or NULL in non-nullable
|
|
# column. Both are allowed with ALGORITHM=INPLACE, but should fail when the
|
|
# invalid value is used.
|
|
CREATE TABLE t1 (doc JSON) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid-geojson":[11.11,12.22]}}'
|
|
);
|
|
ALTER TABLE t1
|
|
ADD COLUMN g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=INPLACE;
|
|
# ST_CROSSES(polygon, point) is always NULL.
|
|
ALTER TABLE t1
|
|
ADD COLUMN g2 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_CROSSES(ST_GEOMFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 0))'),
|
|
ST_GEOMFROMTEXT('POINT(0 0)'))
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=INPLACE;
|
|
SELECT doc FROM t1;
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
SELECT ST_ASTEXT(g1) FROM t1;
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
INSERT INTO t1 (doc) VALUES ('{"foo":"bar"}');
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","coordinates":[1,2]}}';
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","invalid":[11.11,12.22]}}';
|
|
# Commented out because of bug #27599073.
|
|
#--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
#DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (doc JSON) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid-geojson":[11.11,12.22]}}'
|
|
);
|
|
# ST_CROSSES(polygon, point) is always NULL.
|
|
ALTER TABLE t1
|
|
ADD COLUMN g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_CROSSES(ST_GEOMFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 0))'),
|
|
ST_GEOMFROMTEXT('POINT(0 0)'))
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=INPLACE;
|
|
SELECT doc FROM t1;
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
SELECT ST_ASTEXT(g1) FROM t1;
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
INSERT INTO t1 (doc) VALUES ('{"foo":"bar"}');
|
|
# Commented out because of bug #27599073.
|
|
#--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
#DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Virtual generated column with invalid geometry value or NULL in non-nullable
|
|
# column. With ALGORITHM=COPY, the invalid value is computed immediately, and
|
|
# the ALTER statement fails immediately.
|
|
CREATE TABLE t1 (doc JSON) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid-geojson":[11.11,12.22]}}'
|
|
);
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
ALTER TABLE t1
|
|
ADD COLUMN g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=COPY;
|
|
# ST_CROSSES(polygon, point) is always NULL.
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
ALTER TABLE t1
|
|
ADD COLUMN g2 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_CROSSES(ST_GEOMFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 0))'),
|
|
ST_GEOMFROMTEXT('POINT(0 0)'))
|
|
) VIRTUAL NOT NULL,
|
|
ALGORITHM=COPY;
|
|
DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# CREATE TABLE with generated geometry column
|
|
#
|
|
|
|
# Stored generated column
|
|
CREATE TABLE t1 (
|
|
doc JSON,
|
|
g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) STORED NOT NULL
|
|
) ENGINE= InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid":[11.11,12.22]}}'
|
|
);
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","coordinates":[1,2]}}';
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","invalid":[11.11,12.22]}}';
|
|
DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (
|
|
doc JSON,
|
|
g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_CROSSES(ST_GEOMFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 0))'),
|
|
ST_GEOMFROMTEXT('POINT(0 0)'))
|
|
) STORED NOT NULL
|
|
) ENGINE=InnoDB;
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid":[11.11,12.22]}}'
|
|
);
|
|
DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Virtual generated column
|
|
CREATE TABLE t1 (
|
|
doc JSON,
|
|
g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(JSON_EXTRACT(doc, '$.geojson'), 2, 4326)
|
|
) VIRTUAL NOT NULL
|
|
) ENGINE=InnoDB;
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid":[11.11,12.22]}}'
|
|
);
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","coordinates":[1,2]}}';
|
|
--error ER_INVALID_GEOJSON_MISSING_MEMBER
|
|
UPDATE t1 SET doc='{"geojson":{"type":"Point","invalid":[11.11,12.22]}}';
|
|
DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (
|
|
doc JSON,
|
|
g1 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_CROSSES(ST_GEOMFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 0))'),
|
|
ST_GEOMFROMTEXT('POINT(0 0)'))
|
|
) VIRTUAL NOT NULL
|
|
) ENGINE=InnoDB;
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
--error ER_BAD_NULL_ERROR_NOT_IGNORED
|
|
INSERT INTO t1 (doc) VALUES (
|
|
'{"geojson":{"type":"Point","invalid":[11.11,12.22]}}'
|
|
);
|
|
DELETE FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (col1 JSON, col2 VARBINARY(255) GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(col1->>'$.geojson')
|
|
) VIRTUAL);
|
|
INSERT INTO t1 (col1) VALUES (
|
|
'{"geojson":{"type":"Point","coordinates":[11.11,12.22]}}'
|
|
);
|
|
ALTER TABLE t1
|
|
CHANGE COLUMN col2 col2 GEOMETRY GENERATED ALWAYS AS (
|
|
ST_GEOMFROMGEOJSON(col1->>'$.geojson')
|
|
) VIRTUAL NOT NULL;
|
|
DROP TABLE t1;
|
|
|