config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/innodb_gis/r/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/innodb_gis/r/point_basic.result

#
# Test for basic POINT operation
#
CREATE TABLE gis_point(p1 POINT, p2 POINT) ENGINE=InnoDB;
INSERT INTO gis_point VALUES
(ST_PointFromText('POINT(0 0)'), ST_PointFromText('POINT(0 0)')),
(ST_PointFromText('POINT(10 -20)'), ST_PointFromText('POINT(10 -20)')),
(ST_PointFromText('POINT(3.1415926 3.535897)'), ST_PointFromText('POINT(-3.932626 -3.488272)')),
(ST_PointFromText('POINT(-111.9876 234.1357)'), ST_PointFromText('POINT(-957.1914 958.1919)'));
SELECT ST_X(p1), ST_Y(p2) FROM gis_point;
ST_X(p1)	ST_Y(p2)
0	0
10	-20
3.1415926	-3.488272
-111.9876	958.1919
DROP TABLE gis_point;
#
# Test when POINT is not on any indexes
#
CREATE TABLE gis_point(p1 POINT, p2 POINT) ENGINE=InnoDB;
INSERT INTO gis_point VALUES
(ST_PointFromText('POINT(100.32374832 101.23741821)'), ST_PointFromText('POINT(100.32374832 101.23741821)')),
(ST_PointFromText('POINT(105.34523342 103.18492302)'), ST_PointFromText('POINT(100.32374832 101.23741821)')),
(ST_PointFromText('POINT(100.32374832 101.23741821)'), ST_PointFromText('POINT(200.32247328 101.86728201)')),
(ST_PointFromText('POINT(100.32374832 101.23741821)'), ST_PointFromText('POINT(100.32374832 101.98527111)'));
EXPLAIN SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	gis_point	NULL	ALL	NULL	NULL	NULL	NULL	#	100.00	Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select st_astext(`test`.`gis_point`.`p1`) AS `ST_AsText(p1)`,st_astext(`test`.`gis_point`.`p2`) AS `ST_AsText(p2)` from `test`.`gis_point` group by `test`.`gis_point`.`p1`,`test`.`gis_point`.`p2`
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
ST_AsText(p1)	ST_AsText(p2)
POINT(100.32374832 101.23741821)	POINT(100.32374832 101.98527111)
POINT(100.32374832 101.23741821)	POINT(100.32374832 101.23741821)
POINT(100.32374832 101.23741821)	POINT(200.32247328 101.86728201)
POINT(105.34523342 103.18492302)	POINT(100.32374832 101.23741821)
SELECT ST_AsText(p1) FROM gis_point WHERE p1 = p2;
ST_AsText(p1)
POINT(100.32374832 101.23741821)
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE p1 = ST_PointFromText('POINT(100.32374832 101.23741821)');
ST_AsText(p1)	ST_AsText(p2)
POINT(100.32374832 101.23741821)	POINT(100.32374832 101.23741821)
POINT(100.32374832 101.23741821)	POINT(200.32247328 101.86728201)
POINT(100.32374832 101.23741821)	POINT(100.32374832 101.98527111)
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE p2 = ST_PointFromText('POINT(200.32247328 101.86728201)');
ST_AsText(p1)	ST_AsText(p2)
POINT(100.32374832 101.23741821)	POINT(200.32247328 101.86728201)
DROP TABLE gis_point;
#
# Test some ALTER TABLE operations on POINT tables
#
CREATE TABLE t1 (
p POINT NOT NULL,
g GEOMETRY NOT NULL
) ENGINE=InnoDB;
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0 1)'), ST_PointFromText('POINT(10 11)'));
INSERT INTO t1 VALUES(ST_PointFromText('POINT(1 1)'), ST_PointFromText('POINT(10 12)'));
INSERT INTO t1 VALUES(ST_PointFromText('POINT(1 0)'), ST_PointFromText('POINT(10 13)'));
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0 0)'), ST_PointFromText('POINT(10 14)'));
SELECT ST_AsText(p), ST_AsText(g) FROM t1;
ST_AsText(p)	ST_AsText(g)
POINT(0 1)	POINT(10 11)
POINT(1 1)	POINT(10 12)
POINT(1 0)	POINT(10 13)
POINT(0 0)	POINT(10 14)
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g';
name	mtype	prtype	len
p	14	1535	12
g	14	1535	12
ALTER TABLE t1 ADD COLUMN p1 POINT, ADD COLUMN p2 POINT, ADD KEY(p);
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1' OR name = 'p2';
name	mtype	prtype	len
p	14	1535	12
g	14	1535	12
p1	14	1279	12
p2	14	1279	12
# NOT NULL POINT will use ''
SELECT count(*) AS `Expect 4` FROM t1 WHERE p1 = '';
Expect 4
0
SELECT count(*) AS `Expect 4` FROM t1 WHERE p2 = '';
Expect 4
0
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p = p1;
ST_AsText(p)	ST_AsText(p1)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p = p2;
ST_AsText(p)	ST_AsText(p1)
ALTER TABLE t1 DROP COLUMN p2;
# NULLABLE POINT will use NULL
ALTER TABLE t1 ADD COLUMN p2 POINT, ADD KEY(p2);
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1' OR name = 'p2';
name	mtype	prtype	len
p	14	1535	12
g	14	1535	12
p1	14	1279	12
p2	14	1279	12
SELECT count(*) AS `Expect 4` FROM t1 WHERE p2 IS NULL;
Expect 4
4
UPDATE t1 SET p2 = ST_PointFromText('POINT(10 20)');
UPDATE t1 SET p1 = ST_PointFromText('POINT(10 20)');
ALTER TABLE t1 DROP COLUMN p2;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
p	14	1535	12
g	14	1535	12
p1	14	1279	12
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p = p1;
ST_AsText(p)	ST_AsText(p1)
INSERT INTO t1 VALUES (ST_PointFromText('POINT(0.5 0.5)'), ST_PointFromText('POINT(0 1)'), ST_PointFromText('POINT(10 19)'));
SELECT ST_AsText(p1) FROM t1;
ST_AsText(p1)
POINT(10 20)
POINT(10 20)
POINT(10 20)
POINT(10 20)
POINT(10 19)
DELETE FROM t1 WHERE p1 = ST_PointFromText('POINT(10 19)');
SELECT ST_AsText(p1) FROM t1;
ST_AsText(p1)
POINT(10 20)
POINT(10 20)
POINT(10 20)
POINT(10 20)
# Add spatial keys on the table
ALTER TABLE t1 ADD SPATIAL(p), ADD SPATIAL(p1);
ERROR 42000: All parts of a SPATIAL index must be NOT NULL
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
p	14	1535	12
g	14	1535	12
p1	14	1279	12
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
ST_AsText(p)	ST_AsText(p1)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
ST_AsText(p)	ST_AsText(p1)
POINT(0 1)	POINT(10 20)
POINT(1 1)	POINT(10 20)
POINT(1 0)	POINT(10 20)
POINT(0 0)	POINT(10 20)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))'));
ST_AsText(p)	ST_AsText(p1)
POINT(0 1)	POINT(10 20)
POINT(1 1)	POINT(10 20)
POINT(1 0)	POINT(10 20)
POINT(0 0)	POINT(10 20)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))'));
ST_AsText(p)	ST_AsText(p1)
POINT(0 0)	POINT(10 20)
# Drop spatial keys on the table
ALTER TABLE t1 DROP KEY p, DROP KEY p1;
ERROR 42000: Can't DROP 'p1'; check that column/key exists
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
p	14	1535	12
g	14	1535	12
p1	14	1279	12
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
ST_AsText(p)	ST_AsText(p1)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
ST_AsText(p)	ST_AsText(p1)
POINT(0 1)	POINT(10 20)
POINT(1 1)	POINT(10 20)
POINT(1 0)	POINT(10 20)
POINT(0 0)	POINT(10 20)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))'));
ST_AsText(p)	ST_AsText(p1)
POINT(0 1)	POINT(10 20)
POINT(1 1)	POINT(10 20)
POINT(1 0)	POINT(10 20)
POINT(0 0)	POINT(10 20)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))'));
ST_AsText(p)	ST_AsText(p1)
POINT(0 0)	POINT(10 20)
TRUNCATE t1;
ALTER TABLE t1 DROP COLUMN p, DROP COLUMN p1;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
g	14	1535	12
ALTER TABLE t1 ADD COLUMN p POINT, ADD COLUMN p1 POINT;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
g	14	1535	12
p	14	1279	12
p1	14	1279	12
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `g` geometry NOT NULL,
  `p` point DEFAULT NULL,
  `p1` point DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.5 0.5)'), ST_PointFromText('POINT(0 1)'), ST_PointFromText('POINT(10 19)'));
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.6 0.6)'), ST_PointFromText('POINT(1 1)'), ST_PointFromText('POINT(10 20)'));
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.7 0.7)'), ST_PointFromText('POINT(1 0)'), ST_PointFromText('POINT(10 21)'));
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.8 0.8)'), ST_PointFromText('POINT(0 0)'), ST_PointFromText('POINT(10 22)'));
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
ST_AsText(p)	ST_AsText(p1)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
ST_AsText(p)	ST_AsText(p1)
POINT(1 1)	POINT(10 20)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))'));
ST_AsText(p)	ST_AsText(p1)
POINT(0 1)	POINT(10 19)
POINT(1 1)	POINT(10 20)
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))'));
ST_AsText(p)	ST_AsText(p1)
POINT(0 0)	POINT(10 22)
ALTER TABLE t1 DROP COLUMN p1, ADD COLUMN p1 POINT, CHANGE COLUMN p pp POINT AFTER p1;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'pp' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
g	14	1535	12
p1	14	1279	12
pp	14	1279	12
UPDATE t1 SET p1 = ST_PointFromText('POINT(5 5)');
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1;
ST_AsText(pp)	ST_AsText(p1)
POINT(0 1)	POINT(5 5)
POINT(1 1)	POINT(5 5)
POINT(1 0)	POINT(5 5)
POINT(0 0)	POINT(5 5)
ALTER TABLE t1 ADD SPATIAL(p1), ADD SPATIAL(pp), ALGORITHM = COPY;
ERROR 42000: All parts of a SPATIAL index must be NOT NULL
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'pp' OR name = 'g' OR name = 'p1';
name	mtype	prtype	len
g	14	1535	12
p1	14	1279	12
pp	14	1279	12
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
ST_AsText(pp)	ST_AsText(p1)
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
ST_AsText(pp)	ST_AsText(p1)
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))')) ORDER BY pp;
ST_AsText(pp)	ST_AsText(p1)
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE MBRWithin(pp, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))')) ORDER BY pp;
ST_AsText(pp)	ST_AsText(p1)
POINT(0 0)	POINT(5 5)
DROP TABLE t1;
#
# Test when the POINT is on B-TREE
#
CREATE TABLE gis_point(fid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, p POINT, KEY(p)) ENGINE=InnoDB;
INSERT INTO gis_point VALUES
(101, ST_PointFromText('POINT(10 10)')),
(102, ST_PointFromText('POINT(20 10)')),
(103, ST_PointFromText('POINT(20 20)')),
(104, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(10 20)'))));
SELECT ST_AsText(p) FROM gis_point;
ST_AsText(p)
POINT(10 10)
POINT(20 10)
POINT(20 20)
POINT(10 20)
SELECT ST_AsText(p) FROM gis_point WHERE p = ST_PointFromText('POINT(20 20)');
ST_AsText(p)
POINT(20 20)
INSERT INTO gis_point VALUES
(201, ST_PointFromText('POINT(100.32374832 101.23741821)')),
(202, ST_PointFromText('POINT(102.43287328 100.23489233)')),
(203, ST_PointFromText('POINT(101.43284962 100.45892392)')),
(204, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)')))),
(205, ST_PointFromText('POINT(101.43284962 100.45892392)')),
(206, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)'))));
'The ORDER BY will use filesort'
EXPLAIN SELECT ST_AsText(p) FROM gis_point ORDER BY p;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	gis_point	NULL	ALL	NULL	NULL	NULL	NULL	#	100.00	Using filesort
Warnings:
Note	1003	/* select#1 */ select st_astext(`test`.`gis_point`.`p`) AS `ST_AsText(p)` from `test`.`gis_point` order by `test`.`gis_point`.`p`
SELECT ST_AsText(p) FROM gis_point ORDER BY p;
ST_AsText(p)
POINT(10 10)
POINT(10 20)
POINT(20 10)
POINT(20 20)
POINT(101.43284962 100.45892392)
POINT(101.43284962 100.45892392)
POINT(100.32374832 101.23741821)
POINT(102.43287328 100.23489233)
POINT(103.4371864 105.248206478)
POINT(103.4371864 105.248206478)
SELECT ST_AsText(p), COUNT(*) FROM gis_point GROUP BY p;
ST_AsText(p)	COUNT(*)
POINT(10 10)	1
POINT(10 20)	1
POINT(20 10)	1
POINT(20 20)	1
POINT(101.43284962 100.45892392)	2
POINT(100.32374832 101.23741821)	1
POINT(102.43287328 100.23489233)	1
POINT(103.4371864 105.248206478)	2
TRUNCATE gis_point;
INSERT INTO gis_point VALUES
(101, ST_PointFromText('POINT(10 10)')),
(102, ST_PointFromText('POINT(20 10)')),
(103, ST_PointFromText('POINT(20 20)')),
(104, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(10 20)'))));
# Check if we can create prefix index on POINT
ALTER TABLE gis_point ADD COLUMN g POINT, ADD KEY(g(8));
INSERT INTO gis_point VALUES
(105, ST_PointFromText('POINT(25 15)'), ST_PointFromText('POINT(100 100)')),
(106, ST_PointFromText('POINT(25 25)'), ST_PointFromText('POINT(110 110)'));
SELECT ST_AsText(p) FROM gis_point;
ST_AsText(p)
POINT(10 10)
POINT(20 10)
POINT(20 20)
POINT(10 20)
POINT(25 15)
POINT(25 25)
SELECT ST_AsText(p), ST_AsText(g) FROM gis_point WHERE g IS NULL;
ST_AsText(p)	ST_AsText(g)
POINT(10 10)	NULL
POINT(20 10)	NULL
POINT(20 20)	NULL
POINT(10 20)	NULL
UPDATE gis_point SET g = ST_PointFromText('POINT(200 200)') WHERE g IS NULL OR g = ST_PointFromText('POINT(110 110)');
SELECT ST_AsText(g) FROM gis_point WHERE g IS NULL OR g = ST_PointFromText('POINT(200 200)');
ST_AsText(g)
POINT(200 200)
POINT(200 200)
POINT(200 200)
POINT(200 200)
POINT(200 200)
# Check the information schema tables
SELECT table_name, column_name, data_type, column_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='gis_point' AND (column_name = 'p' OR column_name = 'g');
table_name	column_name	data_type	column_type
gis_point	p	point	point
gis_point	g	point	point
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g';
name	mtype	prtype	len
p	14	1279	12
g	14	1279	12
SELECT length(p) FROM gis_point;
length(p)
25
25
25
25
25
25
ALTER TABLE gis_point DROP COLUMN g, ALGORITHM = COPY;
TRUNCATE gis_point;
INSERT INTO gis_point VALUES
(101, ST_PointFromText('POINT(10 10)')),
(102, ST_PointFromText('POINT(20 10)')),
(103, ST_PointFromText('POINT(20 20)')),
(104, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(10 20)'))));
# Check if we can create prefix index on POINT
ALTER TABLE gis_point ADD COLUMN g POINT, ADD KEY(g(8));
INSERT INTO gis_point VALUES
(105, ST_PointFromText('POINT(25 15)'), ST_PointFromText('POINT(100 100)')),
(106, ST_PointFromText('POINT(25 25)'), ST_PointFromText('POINT(110 110)'));
SELECT ST_AsText(p) FROM gis_point;
ST_AsText(p)
POINT(10 10)
POINT(20 10)
POINT(20 20)
POINT(10 20)
POINT(25 15)
POINT(25 25)
SELECT ST_AsText(p), ST_AsText(g) FROM gis_point WHERE g IS NULL;
ST_AsText(p)	ST_AsText(g)
POINT(10 10)	NULL
POINT(20 10)	NULL
POINT(20 20)	NULL
POINT(10 20)	NULL
UPDATE gis_point SET g = ST_PointFromText('POINT(200 200)') WHERE g IS NULL OR g = ST_PointFromText('POINT(110 110)');
SELECT ST_AsText(g) FROM gis_point WHERE g IS NULL OR g = ST_PointFromText('POINT(200 200)');
ST_AsText(g)
POINT(200 200)
POINT(200 200)
POINT(200 200)
POINT(200 200)
POINT(200 200)
CHECK TABLE gis_point;
Table	Op	Msg_type	Msg_text
test.gis_point	check	status	OK
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g';
name	mtype	prtype	len
p	14	1279	12
g	14	1279	12
DROP TABLE gis_point;
#
# Check the mtype of other geometry data types should be 15
#
CREATE TABLE g (
geom GEOMETRY NOT NULL,
l LINESTRING NOT NULL,
poly POLYGON NOT NULL,
mp MULTIPOINT NOT NULL,
ml MULTILINESTRING NOT NULL,
mpoly MULTIPOLYGON NOT NULL,
gc GEOMETRYCOLLECTION NOT NULL
) ENGINE=InnoDB;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'geom' OR name = 'l' OR name = 'poly' OR name = 'mp' OR name = 'ml' OR name = 'mpoly' OR name = 'gc';
name	mtype	prtype	len
geom	14	1535	12
l	14	1535	12
poly	14	1535	12
mp	14	1535	12
ml	14	1535	12
mpoly	14	1535	12
gc	14	1535	12
DROP TABLE g;
#
# check the mtype and len with CREATE TABLE AS
#
CREATE TABLE t1 (
p POINT NOT NULL,
g GEOMETRY NOT NULL
) ENGINE=InnoDB;
INSERT INTO t1 VALUES(ST_PointFromText('POINT(10 10)'),ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'));
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' AND name='t1';
name	mtype	prtype	len
p	14	1535	12
CREATE TABLE t2 AS SELECT * FROM t1;
DROP TABLE t1;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' AND name='t2';
name	mtype	prtype	len
p	14	1535	12
DROP table t2;
#
# Test when POINT is used in spatial index
#
SET @ls1 = ST_GeomFromText('LINESTRING(0 20, 10 0)');
SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 10 20)');
SET @ls3 = ST_GeomFromText('LINESTRING(20 -40, 21 -42)');
SET @ls4 = ST_GeomFromText('LINESTRING(20 -42, 21 -40)');
SET @poly1 = ST_GeomFromText('POLYGON((2 2, 2 10, 10 10, 10 2, 2 2))');
SET @poly2 = ST_GeomFromText('POLYGON((0 0, -5 0, -4 -1, -6 -15, -3 -15, 0 0))');
SET @poly3 = ST_GeomFromText('POLYGON((10.0 10.0, 20.5 20, 20.5 50, 32.0 64.0, 32.3 64.6, 5 60, 10 10))');
SET @poly4 = ST_GeomFromText('POLYGON((0 10, -10 10, -10 -10, 0 -10, 0 10))');
SET @p1 = ST_PointFromText('POINT(0 0)');
SET @mpoly = ST_GeomFromText('MULTIPOLYGON(((3 3, 3 16, 16 16, 16 3, 3 3)), ((10 10, 10 50, 50 50, 50 10, 10 10)))');
CREATE TABLE gis_point (p1 POINT NOT NULL, p2 POINT NOT NULL, SPATIAL KEY k1 (p1), SPATIAL KEY k2 (p2)) ENGINE=InnoDB;
INSERT INTO gis_point VALUES
(ST_PointFromText('POINT(1 2)'), ST_PointFromText('POINT(-1 -3)')),
(ST_PointFromText('POINT(2 4)'), ST_PointFromText('POINT(-2 -6)')),
(ST_PointFromText('POINT(3 6)'), ST_PointFromText('POINT(-3 -9)')),
(ST_PointFromText('POINT(4 8)'), ST_PointFromText('POINT(-4 -12)')),
(ST_PointFromText('POINT(5 10)'), ST_PointFromText('POINT(-5 -15)')),
(ST_PointFromText('POINT(6 12)'), ST_PointFromText('POINT(-6 -18)')),
(ST_PointFromText('POINT(7 14)'), ST_PointFromText('POINT(-7 -21)')),
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)')),
(ST_PointFromText('POINT(9 18)'), ST_PointFromText('POINT(-4 2)')),
(ST_PointFromText('POINT(10 21)'), ST_PointFromText('POINT(-6 3)')),
(ST_PointFromText('POINT(20.5 41)'), ST_PointFromText('POINT(-8 4)')),
(ST_PointFromText('POINT(26.25 57)'), ST_PointFromText('POINT(1 2)')),
(ST_PointFromText('POINT(32.1234 64.2468)'), ST_PointFromText('POINT(-1 -1)'));
CREATE TABLE gis_point1 SELECT * FROM gis_point;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p1' OR name = 'p2';
name	mtype	prtype	len
p1	14	1535	12
p2	14	1535	12
p1	14	1535	12
p2	14	1535	12
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point1;
ST_AsText(p1)	ST_AsText(p2)
POINT(1 2)	POINT(-1 -3)
POINT(2 4)	POINT(-2 -6)
POINT(3 6)	POINT(-3 -9)
POINT(4 8)	POINT(-4 -12)
POINT(5 10)	POINT(-5 -15)
POINT(6 12)	POINT(-6 -18)
POINT(7 14)	POINT(-7 -21)
POINT(8 16)	POINT(0 0)
POINT(9 18)	POINT(-4 2)
POINT(10 21)	POINT(-6 3)
POINT(20.5 41)	POINT(-8 4)
POINT(26.25 57)	POINT(1 2)
POINT(32.1234 64.2468)	POINT(-1 -1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Intersection(@ls1, @ls2) = p1;
ST_AsText(p1)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p2) FROM gis_point1 WHERE ST_Contains(@poly2, p2);
ST_AsText(p2)
POINT(-1 -3)
POINT(-2 -6)
POINT(-3 -9)
POINT(-4 -12)
POINT(-1 -1)
SELECT ST_AsText(p2) FROM gis_point1 WHERE ST_Equals(p2, @p1);
ST_AsText(p2)
POINT(0 0)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
ST_AsText(p1)
POINT(20.5 41)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Contains(@mpoly, p1);
ST_AsText(p1)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(20.5 41)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly);
ST_AsText(p1)
# Check functions that use MBR, with line type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @ls1);
ST_AsText(p1)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBREquals(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @ls3);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Crosses(p1, @ls1);
ST_AsText(p1)
# Check functions that use MBR, with polygon type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Crosses(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @poly1);
ST_AsText(p1)
POINT(1 2)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBREquals(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @poly1);
ST_AsText(p1)
# Check functions that use MBR, with point type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBREquals(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Crosses(p1, @p1);
ST_AsText(p1)
# Check with MBR functions point type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @p1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
# Check with MBR functions point polygon data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @p1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
# Check with MBR functions polygon type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @poly1);
ST_AsText(p1)
POINT(1 2)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @poly1);
ST_AsText(p1)
# Check with MBR functions line type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @ls1);
ST_AsText(p1)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @ls1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @ls1);
ST_AsText(p1)
DROP TABLE gis_point1;
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point;
ST_AsText(p1)	ST_AsText(p2)
POINT(1 2)	POINT(-1 -3)
POINT(2 4)	POINT(-2 -6)
POINT(3 6)	POINT(-3 -9)
POINT(4 8)	POINT(-4 -12)
POINT(5 10)	POINT(-5 -15)
POINT(6 12)	POINT(-6 -18)
POINT(7 14)	POINT(-7 -21)
POINT(8 16)	POINT(0 0)
POINT(9 18)	POINT(-4 2)
POINT(10 21)	POINT(-6 3)
POINT(20.5 41)	POINT(-8 4)
POINT(26.25 57)	POINT(1 2)
POINT(32.1234 64.2468)	POINT(-1 -1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Intersection(@ls1, @ls2) = p1;
ST_AsText(p1)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2);
ST_AsText(p2)
POINT(-1 -3)
POINT(-2 -6)
POINT(-3 -9)
POINT(-4 -12)
POINT(-1 -1)
SELECT ST_AsText(p2) FROM gis_point WHERE ST_Equals(p2, @p1);
ST_AsText(p2)
POINT(0 0)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
ST_AsText(p1)
POINT(20.5 41)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Contains(@mpoly, p1);
ST_AsText(p1)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(20.5 41)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly);
ST_AsText(p1)
# Check functions that use MBR, with line type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls3);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @ls1);
ST_AsText(p1)
# Check functions that use MBR, with polygon type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
POINT(9 18)
POINT(8 16)
POINT(7 14)
POINT(6 12)
POINT(1 2)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
ST_AsText(p1)
# Check functions that use MBR, with point type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
POINT(9 18)
POINT(8 16)
POINT(7 14)
POINT(6 12)
POINT(5 10)
POINT(4 8)
POINT(3 6)
POINT(2 4)
POINT(1 2)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @p1);
ST_AsText(p1)
# Check with MBR functions point type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
POINT(9 18)
POINT(8 16)
POINT(7 14)
POINT(6 12)
POINT(5 10)
POINT(4 8)
POINT(3 6)
POINT(2 4)
POINT(1 2)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
# Check with MBR functions point polygon data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
POINT(9 18)
POINT(8 16)
POINT(7 14)
POINT(6 12)
POINT(5 10)
POINT(4 8)
POINT(3 6)
POINT(2 4)
POINT(1 2)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
# Check with MBR functions polygon type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
POINT(9 18)
POINT(8 16)
POINT(7 14)
POINT(6 12)
POINT(1 2)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @poly1);
ST_AsText(p1)
# Check with MBR functions line type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
ST_AsText(p1)
POINT(32.1234 64.2468)
POINT(26.25 57)
POINT(20.5 41)
POINT(10 21)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @ls1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
ST_AsText(p1)
# Modify the storage engine to Myisam, Check the spatial functions
ALTER TABLE gis_point ENGINE Myisam;
# Check functions that use MBR, with line type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
ST_AsText(p1)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls3);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @ls1);
ST_AsText(p1)
# Check functions that use MBR, with polygon type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
ST_AsText(p1)
POINT(1 2)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
ST_AsText(p1)
# Check functions that use MBR, with point type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @p1);
ST_AsText(p1)
# Check with MBR functions point type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
# Check with MBR functions point polygon data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
ST_AsText(p1)
# Check with MBR functions polygon type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(3 6)
POINT(4 8)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
ST_AsText(p1)
POINT(1 2)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @poly1);
ST_AsText(p1)
# Check with MBR functions line type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
ST_AsText(p1)
POINT(1 2)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
POINT(6 12)
POINT(7 14)
POINT(8 16)
POINT(9 18)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
ST_AsText(p1)
POINT(10 21)
POINT(20.5 41)
POINT(26.25 57)
POINT(32.1234 64.2468)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @ls1);
ST_AsText(p1)
# No matching records
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls1);
ST_AsText(p1)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
ST_AsText(p1)
# Modify the storage engine to InnoDB again, do following testing
ALTER TABLE gis_point ENGINE InnoDB;
CHECK TABLE gis_point;
Table	Op	Msg_type	Msg_text
test.gis_point	check	status	OK
The ORDER BY for spatial index will use filesort
EXPLAIN SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	gis_point	NULL	ALL	NULL	NULL	NULL	NULL	#	100.00	Using filesort
Warnings:
Note	1003	/* select#1 */ select st_astext(`test`.`gis_point`.`p1`) AS `ST_AsText(p1)`,st_astext(`test`.`gis_point`.`p2`) AS `ST_AsText(p2)` from `test`.`gis_point` order by `test`.`gis_point`.`p1`,`test`.`gis_point`.`p2`
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
ST_AsText(p1)	ST_AsText(p2)
POINT(2 4)	POINT(-2 -6)
POINT(3 6)	POINT(-3 -9)
POINT(4 8)	POINT(-4 -12)
POINT(5 10)	POINT(-5 -15)
POINT(6 12)	POINT(-6 -18)
POINT(7 14)	POINT(-7 -21)
POINT(8 16)	POINT(0 0)
POINT(9 18)	POINT(-4 2)
POINT(10 21)	POINT(-6 3)
POINT(1 2)	POINT(-1 -3)
POINT(26.25 57)	POINT(1 2)
POINT(20.5 41)	POINT(-8 4)
POINT(32.1234 64.2468)	POINT(-1 -1)
Try to do IDU on the table and verify the result
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
Expect (32.1234 64.2468)
POINT(32.1234 64.2468)
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 41)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
Expect (32.1234 64.2468) AND (20.5 41)
POINT(32.1234 64.2468)
POINT(20.5 41)
CHECK TABLE gis_point;
Table	Op	Msg_type	Msg_text
test.gis_point	check	status	OK
Use a trx to test the IDU on the table and verify the result
START TRANSACTION;
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
Expect (32.1234 64.2468)
POINT(32.1234 64.2468)
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 49)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 49)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
Expect (32.1234 64.2468) AND (20.5 49)
POINT(32.1234 64.2468)
POINT(20.5 49)
ROLLBACK;
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
Expect (32.1234 64.2468) AND (20.5 41)
POINT(32.1234 64.2468)
POINT(20.5 41)
CHECK TABLE gis_point;
Table	Op	Msg_type	Msg_text
test.gis_point	check	status	OK
DROP TABLE gis_point;
#
# Test inserting/updating different type data into POINT field
#
CREATE TABLE gis_point (i INT, p POINT) ENGINE=InnoDB;
CREATE TABLE geom (i INT, g GEOMETRY NOT NULL, SPATIAL KEY(g)) ENGINE=InnoDB;
INSERT INTO gis_point VALUES(0, ST_PointFromText('POINT(1 1)'));
INSERT INTO gis_point VALUES(1, ST_PointFromText('POINT(2 2)'));
INSERT INTO gis_point VALUES(2, NULL);
ALTER TABLE gis_point ADD COLUMN j INT, ALGORITHM = COPY;
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p';
name	mtype	prtype	len
p	14	1279	12
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p';
name	mtype	prtype	len
p	14	1279	12
SELECT i, ST_AsText(p) FROM gis_point;
i	ST_AsText(p)
0	POINT(1 1)
1	POINT(2 2)
2	NULL
UPDATE gis_point SET p = NULL WHERE p = ST_PointFromText('POINT(1 1)');
UPDATE gis_point SET p = ST_PointFromText('POINT(1 2)') WHERE p = ST_PointFromText('POINT(2 2)');
UPDATE gis_point SET p = ST_PointFromText('POINT(1 1)') WHERE p IS NULL;
SELECT i, ST_AsText(p) FROM gis_point;
i	ST_AsText(p)
0	POINT(1 1)
1	POINT(1 2)
2	POINT(1 1)
INSERT INTO geom VALUES(0, ST_PointFromText('POINT(0 0)'));
INSERT INTO geom VALUES(1, ST_PointFromText('POINT(10 10)'));
INSERT INTO geom VALUES(2, ST_GeomFromText('POLYGON((7 1,6 2,6 3,10 3,10 1,7 1))'));
SELECT ST_AsText(g) FROM geom;
ST_AsText(g)
POINT(0 0)
POINT(10 10)
POLYGON((7 1,6 2,6 3,10 3,10 1,7 1))
SELECT ST_AsText(p) FROM gis_point;
ST_AsText(p)
POINT(1 1)
POINT(1 2)
POINT(1 1)
DELETE FROM geom WHERE g = ST_GeomFromText('POLYGON((7 1,6 2,6 3,10 3,10 1,7 1))');
From GEOMETRY to POINT, now ALL the data are POINT
ALTER TABLE geom MODIFY g POINT NOT NULL;
SHOW CREATE TABLE geom;
Table	Create Table
geom	CREATE TABLE `geom` (
  `i` int(11) DEFAULT NULL,
  `g` point NOT NULL,
  SPATIAL KEY `g` (`g`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SELECT ST_AsText(g) FROM geom;
ST_AsText(g)
POINT(0 0)
POINT(10 10)
From POINT to GEOMETRY, all data are POINT
ALTER TABLE geom MODIFY g GEOMETRY NOT NULL;
SHOW CREATE TABLE geom;
Table	Create Table
geom	CREATE TABLE `geom` (
  `i` int(11) DEFAULT NULL,
  `g` geometry NOT NULL,
  SPATIAL KEY `g` (`g`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
TRUNCATE TABLE geom;
From GEOMETRY to POINT, the table is empty
ALTER TABLE geom MODIFY g POINT NOT NULL;
SHOW CREATE TABLE geom;
Table	Create Table
geom	CREATE TABLE `geom` (
  `i` int(11) DEFAULT NULL,
  `g` point NOT NULL,
  SPATIAL KEY `g` (`g`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SELECT ST_AsText(g) FROM geom;
ST_AsText(g)
CHECK TABLE gis_point;
Table	Op	Msg_type	Msg_text
test.gis_point	check	status	OK
CHECK TABLE geom;
Table	Op	Msg_type	Msg_text
test.geom	check	status	OK
DROP TABLE gis_point, geom;
#
# Test when a geom field, such as POINT, is also a primary key
#
CREATE TABLE t1 (
a INT NOT NULL,
p POINT NOT NULL,
l LINESTRING NOT NULL,
g GEOMETRY NOT NULL,
PRIMARY KEY(p),
SPATIAL KEY `idx2` (p),
SPATIAL KEY `idx3` (l),
SPATIAL KEY `idx4` (g)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES(
1, ST_GeomFromText('POINT(10 10)'),
ST_GeomFromText('LINESTRING(1 1, 5 5, 10 10)'),
ST_GeomFromText('POLYGON((30 30, 40 40, 50 50, 30 50, 30 40, 30 30))'));
INSERT INTO t1 VALUES(
2, ST_GeomFromText('POINT(20 20)'),
ST_GeomFromText('LINESTRING(2 3, 7 8, 9 10, 15 16)'),
ST_GeomFromText('POLYGON((10 30, 30 40, 40 50, 40 30, 30 20, 10 30))'));
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
a	ST_AsText(p)	ST_AsText(l)	ST_AsText(g)
1	POINT(10 10)	LINESTRING(1 1,5 5,10 10)	POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
2	POINT(20 20)	LINESTRING(2 3,7 8,9 10,15 16)	POLYGON((10 30,30 40,40 50,40 30,30 20,10 30))
EXPLAIN UPDATE t1 SET p = ST_GeomFromText('POINT(30 30)') WHERE p = ST_GeomFromText('POINT(20 20)');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	UPDATE	t1	NULL	range	PRIMARY	PRIMARY	27	const	#	100.00	Using where
UPDATE t1 SET p = ST_GeomFromText('POINT(30 30)') WHERE p = ST_GeomFromText('POINT(20 20)');
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
a	ST_AsText(p)	ST_AsText(l)	ST_AsText(g)
1	POINT(10 10)	LINESTRING(1 1,5 5,10 10)	POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
2	POINT(30 30)	LINESTRING(2 3,7 8,9 10,15 16)	POLYGON((10 30,30 40,40 50,40 30,30 20,10 30))
ALTER TABLE t1 DROP PRIMARY KEY;
ALTER TABLE t1 ADD PRIMARY KEY(a);
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
a	ST_AsText(p)	ST_AsText(l)	ST_AsText(g)
1	POINT(10 10)	LINESTRING(1 1,5 5,10 10)	POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
2	POINT(30 30)	LINESTRING(2 3,7 8,9 10,15 16)	POLYGON((10 30,30 40,40 50,40 30,30 20,10 30))
ALTER TABLE t1 DROP PRIMARY KEY;
ALTER TABLE t1 ADD PRIMARY KEY(p);
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
a	ST_AsText(p)	ST_AsText(l)	ST_AsText(g)
1	POINT(10 10)	LINESTRING(1 1,5 5,10 10)	POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
2	POINT(30 30)	LINESTRING(2 3,7 8,9 10,15 16)	POLYGON((10 30,30 40,40 50,40 30,30 20,10 30))
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `p` point NOT NULL,
  `l` linestring NOT NULL,
  `g` geometry NOT NULL,
  PRIMARY KEY (`p`(25)),
  SPATIAL KEY `idx2` (`p`),
  SPATIAL KEY `idx3` (`l`),
  SPATIAL KEY `idx4` (`g`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
a	ST_AsText(p)	ST_AsText(l)	ST_AsText(g)
1	POINT(10 10)	LINESTRING(1 1,5 5,10 10)	POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
2	POINT(30 30)	LINESTRING(2 3,7 8,9 10,15 16)	POLYGON((10 30,30 40,40 50,40 30,30 20,10 30))
ALTER TABLE t1 DROP PRIMARY KEY;
ALTER TABLE t1 ADD PRIMARY KEY(p);
EXPLAIN SELECT a, ST_AsText(p) FROM t1 WHERE a = 2 AND p = ST_GeomFromText('POINT(30 30)');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	const	PRIMARY,idx2	PRIMARY	27	const	#	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select '2' AS `a`,st_astext('
SELECT a, ST_AsText(p) FROM t1 WHERE a = 2 AND p = ST_GeomFromText('POINT(30 30)');
a	ST_AsText(p)
2	POINT(30 30)
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
a	ST_AsText(p)	ST_AsText(l)	ST_AsText(g)
1	POINT(10 10)	LINESTRING(1 1,5 5,10 10)	POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
2	POINT(30 30)	LINESTRING(2 3,7 8,9 10,15 16)	POLYGON((10 30,30 40,40 50,40 30,30 20,10 30))
CHECK TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	check	status	OK
DROP TABLE t1;
#
# Test for foreign keys.
#
CREATE TABLE parent(p POINT, PRIMARY KEY(p)) ENGINE=InnoDB;
CREATE TABLE child(p POINT NOT NULL) ENGINE=InnoDB;
ALTER TABLE parent ADD SPATIAL INDEX idx1(p ASC);
ALTER TABLE child ADD SPATIAL INDEX idx2(p ASC);
SHOW CREATE TABLE parent;
Table	Create Table
parent	CREATE TABLE `parent` (
  `p` point NOT NULL,
  PRIMARY KEY (`p`(25)),
  SPATIAL KEY `idx1` (`p`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE child;
Table	Create Table
child	CREATE TABLE `child` (
  `p` point NOT NULL,
  SPATIAL KEY `idx2` (`p`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE child ADD FOREIGN KEY(p) REFERENCES parent(p);
ERROR HY000: Cannot add foreign key constraint
ALTER TABLE parent DROP INDEX idx1;
ALTER TABLE child ADD FOREIGN KEY(p) REFERENCES parent(p);
ERROR HY000: Cannot add foreign key constraint
ALTER TABLE child DROP INDEX idx2;
ALTER TABLE child ADD FOREIGN KEY(p) REFERENCES parent(p);
ERROR HY000: Cannot add foreign key constraint
DROP TABLE child, parent;
#
# Bug#28763: Selecting geometry fields in UNION caused server crash.
#
CREATE TABLE t1(f1 GEOMETRY, f2 POINT, f3 GEOMETRY) ENGINE=InnoDB;
SELECT f1 FROM t1 UNION SELECT f1 FROM t1;
f1
INSERT INTO t1 (f2,f3) VALUES (ST_GeomFromText('POINT(1 1)'),
ST_GeomFromText('POINT(2 2)'));
SELECT ST_AsText(f2),ST_AsText(f3) FROM t1;
ST_AsText(f2)	ST_AsText(f3)
POINT(1 1)	POINT(2 2)
SELECT ST_AsText(a) FROM (SELECT f2 AS a FROM t1 UNION SELECT f3 FROM t1) t;
ST_AsText(a)
POINT(1 1)
POINT(2 2)
CREATE TABLE t2 AS SELECT f2 AS a FROM t1 UNION SELECT f3 FROM t1;
DESC t2;
Field	Type	Null	Key	Default	Extra
a	geometry	YES		NULL	
SELECT ST_AsText(a) FROM t2;
ST_AsText(a)
POINT(1 1)
POINT(2 2)
DROP TABLE t1, t2;

Man Man