############################################################################# # # The aim of this test case is to test the new column property/constraint # on geometry columns which allows to specify the SRID. # # E.g: CREATE TABLE t1(c1 GEOMETRY SRID 4326, c2 POINT SRID 0 NOT NULL); # # The following scenarios are tested : # # 1. Test table having columns with and without SRID property must # replicate properly. # 2. Test removing of the SRID property from a geometry column must work # fine and replicates properly. # 3. Test the SRID property on a generated column must work fine and # replicate properly. # # Creation date: 2017-08-03 # Author: Pavan Naik # ############################################################################# # Skip the test case on group replication runs since it uses # MyISAM engine tables. --source include/not_group_replication_plugin.inc --source include/master-slave.inc --connection master --echo # Create a table with three columns: --echo # 1) Normal POINT column without SRID specification --echo # 2) Normal POINT column with SRID 0 --echo # 3) Normal POINT column with SRID 4326 CREATE TABLE t1 (no_srid POINT DEFAULT NULL, srid_0 POINT SRID 0 DEFAULT NULL, srid_4326 POINT SRID 4326 DEFAULT NULL); SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS; --echo # Insert some data with correct SRID into these columns INSERT INTO t1 (no_srid, srid_0, srid_4326) VALUES (ST_GeomFromText('POINT(0 0)', 0), ST_GeomFromText('POINT(0 0)', 0), ST_GeomFromText('POINT(0 0)', 4326)); INSERT INTO t1 (no_srid, srid_0, srid_4326) VALUES (ST_GeomFromText('POINT(1 1)', 4326), ST_GeomFromText('POINT(1 1)', 0), ST_GeomFromText('POINT(1 1)', 4326)); --source include/sync_slave_sql_with_master.inc --echo [Connection Slave] --let $diff_tables = master:t1, slave:t1 --source include/diff_tables.inc SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS; SELECT ST_SRID(no_srid) AS no_srid, ST_SRID(srid_0) AS srid_0, ST_SRID(srid_4326) AS srid_4326 FROM t1; --echo [Connection Master] --connection master --echo # Removing the SRID specification from a column should work just fine. ALTER TABLE t1 CHANGE COLUMN srid_4326 no_srid_2 POINT DEFAULT NULL; SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS ORDER BY COLUMN_NAME; --source include/sync_slave_sql_with_master.inc --echo [Connection Slave] --let $diff_tables = master:t1, slave:t1 --source include/diff_tables.inc SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS ORDER BY COLUMN_NAME; SELECT ST_SRID(no_srid) AS no_srid, ST_SRID(no_srid_2) AS no_srid_2, ST_SRID(srid_0) AS srid_0 FROM t1; --echo [Connection Master] --connection master DELETE FROM t1; --source include/sync_slave_sql_with_master.inc --echo [Connection Slave] --let $diff_tables = master:t1, slave:t1 --source include/diff_tables.inc --echo [Connection Master] --connection master ALTER TABLE t1 CHANGE COLUMN srid_0 srid_4326 POINT SRID 4326 DEFAULT NULL; SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS ORDER BY COLUMN_NAME; INSERT INTO t1 (no_srid, no_srid_2, srid_4326) VALUES (ST_GeomFromText('POINT(0 0)', 2000), ST_GeomFromText('POINT(0 0)', 0), ST_GeomFromText('POINT(0 0)', 4326)); INSERT INTO t1 (no_srid, no_srid_2, srid_4326) VALUES (ST_GeomFromText('POINT(1 1)', 4326), ST_GeomFromText('POINT(1 1)', 2000), ST_GeomFromText('POINT(1 1)', 4326)); --source include/sync_slave_sql_with_master.inc --echo [Connection Slave] --let $diff_tables = master:t1, slave:t1 --source include/diff_tables.inc SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS ORDER BY COLUMN_NAME; SELECT ST_SRID(no_srid) AS no_srid, ST_SRID(no_srid_2) AS no_srid_2, ST_SRID(srid_4326) AS srid_4326 FROM t1; --echo [Connection Master] --connection master --echo # Cleanup DROP TABLE t1; --source include/sync_slave_sql_with_master.inc --echo # The SRID property on a generated column should work --echo [Connection Master] --connection master CREATE TABLE t1 (col1 POINT SRID 4326, col2 POINT AS (ST_SRID(col1, 0)) SRID 0); INSERT INTO t1 (col1) VALUES (ST_GeomFromText('POINT(0 0)', 4326)); INSERT INTO t1 (col1) VALUES (ST_GeomFromText('POINT(1 1)', 4326)); SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS; --source include/sync_slave_sql_with_master.inc --echo [Connection Slave] --let $diff_tables = master:t1, slave:t1 --source include/diff_tables.inc SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS; SELECT ST_SRID(col1) AS srid_4326, ST_SRID(col2) AS srid_0 FROM t1; --echo [Connection Master] --connection master DELETE FROM t1; ALTER TABLE t1 CHANGE COLUMN col1 col1 POINT SRID 2000; ALTER TABLE t1 CHANGE COLUMN col2 col2 POINT AS (ST_SRID(col1, 4326)) SRID 4326; INSERT INTO t1 (col1) VALUES (ST_GeomFromText('POINT(0 0)', 2000)); INSERT INTO t1 (col1) VALUES (ST_GeomFromText('POINT(1 1)', 2000)); SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS; --source include/sync_slave_sql_with_master.inc --echo [Connection Slave] --let $diff_tables = master:t1, slave:t1 --source include/diff_tables.inc SELECT * FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS; SELECT ST_SRID(col1) AS srid_2000, ST_SRID(col2) AS srid_4326 FROM t1; --echo [Connection Master] --connection master --echo # Cleanup DROP TABLE t1; --source include/sync_slave_sql_with_master.inc --source include/rpl_end.inc