[Commits] Rev 3663: MDEV-3819 missing constraints for spatial column types. in file:///home/hf/wmar/mdev-3819/

holyfoot at askmonty.org holyfoot at askmonty.org
Wed Feb 20 22:55:21 EET 2013


At file:///home/hf/wmar/mdev-3819/

------------------------------------------------------------
revno: 3663
revision-id: holyfoot at askmonty.org-20130220204741-g7aenhz4n0r9dlo9
parent: vvaintroub at pcbsd-20130219224652-t84v8wepdqvhxfwb
committer: Alexey Botchkov <holyfoot at askmonty.org>
branch nick: mdev-3819
timestamp: Thu 2013-02-21 00:47:41 +0400
message:
  MDEV-3819 missing constraints for spatial column types.
        Checks added to return and error when inappropriate
        geometry type is stored in a field.
-------------- next part --------------
=== modified file 'mysql-test/r/gis-rtree.result'
--- a/mysql-test/r/gis-rtree.result	2012-06-04 15:26:11 +0000
+++ b/mysql-test/r/gis-rtree.result	2013-02-20 20:47:41 +0000
@@ -758,7 +758,7 @@ SPATIAL KEY(g)
 INSERT INTO t1 (g) VALUES (GeomFromText('LineString(1 2, 2 3)')),(GeomFromText('LineString(1 2, 2 4)'));
 drop table t1;
 CREATE TABLE t1 (
-line LINESTRING NOT NULL,
+line GEOMETRY NOT NULL,
 kind ENUM('po', 'pp', 'rr', 'dr', 'rd', 'ts', 'cl') NOT NULL DEFAULT 'po',
 name VARCHAR(32),
 SPATIAL KEY (line)
@@ -1553,7 +1553,7 @@ End of 5.0 tests.
 # Bug #57323/11764487: myisam corruption with insert ignore 
 # and invalid spatial data
 #
-CREATE TABLE t1(a LINESTRING NOT NULL, b GEOMETRY NOT NULL,
+CREATE TABLE t1(a POINT NOT NULL, b GEOMETRY NOT NULL,
 SPATIAL KEY(a), SPATIAL KEY(b)) ENGINE=MyISAM;
 INSERT INTO t1 VALUES(GEOMFROMTEXT("point (0 0)"), GEOMFROMTEXT("point (1 1)"));
 INSERT IGNORE INTO t1 SET a=GEOMFROMTEXT("point (-6 0)"), b=GEOMFROMTEXT("error");

=== modified file 'mysql-test/r/gis.result'
--- a/mysql-test/r/gis.result	2012-09-05 21:14:33 +0000
+++ b/mysql-test/r/gis.result	2013-02-20 20:47:41 +0000
@@ -1047,7 +1047,7 @@ SET @a=0x0000000003000000010000000000000
 SET @a=POLYFROMWKB(@a);
 SET @a=0x00000000030000000000000000000000000000000000144000000000000014400000000000001840000000000000184000000000000014400000000000001440;
 SET @a=POLYFROMWKB(@a);
-create table t1(a polygon NOT NULL)engine=myisam;
+create table t1(a geometry NOT NULL)engine=myisam;
 insert into t1 values (geomfromtext("point(0 1)"));
 insert into t1 values (geomfromtext("point(1 0)"));
 select * from (select polygon(t1.a) as p from t1 order by t1.a) d;
@@ -1491,4 +1491,11 @@ SELECT 1 FROM g1 WHERE a >= ANY
 (SELECT 1 FROM g1 WHERE a = geomfromtext('') OR a) ;
 1
 DROP TABLE g1;
+#
+# MDEV-3819 missing constraints for spatial column types
+#
+create table t1 (pt point);
+insert into t1 values(Geomfromtext('POLYGON((1 1, 2 2, 2 1, 1 1))'));
+ERROR HY000: Incorrect POINT value: 'POLYGON'
+drop table t1;
 End of 5.5 tests

=== modified file 'mysql-test/t/gis-rtree.test'
--- a/mysql-test/t/gis-rtree.test	2012-01-13 14:50:02 +0000
+++ b/mysql-test/t/gis-rtree.test	2013-02-20 20:47:41 +0000
@@ -120,7 +120,7 @@ INSERT INTO t1 (g) VALUES (GeomFromText(
 drop table t1;
 
 CREATE TABLE t1 (
-  line LINESTRING NOT NULL,
+  line GEOMETRY NOT NULL,
   kind ENUM('po', 'pp', 'rr', 'dr', 'rd', 'ts', 'cl') NOT NULL DEFAULT 'po',
   name VARCHAR(32),
 
@@ -935,7 +935,7 @@ DROP TABLE t1;
 --echo # and invalid spatial data
 --echo #
 
-CREATE TABLE t1(a LINESTRING NOT NULL, b GEOMETRY NOT NULL,
+CREATE TABLE t1(a POINT NOT NULL, b GEOMETRY NOT NULL,
   SPATIAL KEY(a), SPATIAL KEY(b)) ENGINE=MyISAM;
 INSERT INTO t1 VALUES(GEOMFROMTEXT("point (0 0)"), GEOMFROMTEXT("point (1 1)"));
 --error ER_CANT_CREATE_GEOMETRY_OBJECT

=== modified file 'mysql-test/t/gis.test'
--- a/mysql-test/t/gis.test	2012-09-05 21:14:33 +0000
+++ b/mysql-test/t/gis.test	2013-02-20 20:47:41 +0000
@@ -741,7 +741,7 @@ SET @a=POLYFROMWKB(@a);
 # Bug #57321    crashes and valgrind errors from spatial types
 #
 
-create table t1(a polygon NOT NULL)engine=myisam;
+create table t1(a geometry NOT NULL)engine=myisam;
 insert into t1 values (geomfromtext("point(0 1)"));
 insert into t1 values (geomfromtext("point(1 0)"));
 select * from (select polygon(t1.a) as p from t1 order by t1.a) d;
@@ -1358,4 +1358,13 @@ SELECT 1 FROM g1 WHERE a >= ANY
 
 DROP TABLE g1;
 
+--echo #
+--echo # MDEV-3819 missing constraints for spatial column types
+--echo #
+
+create table t1 (pt point);
+--error ER_WRONG_VALUE
+insert into t1 values(Geomfromtext('POLYGON((1 1, 2 2, 2 1, 1 1))'));
+drop table t1;
+
 --echo End of 5.5 tests

=== modified file 'sql/field.cc'
--- a/sql/field.cc	2013-01-28 12:36:05 +0000
+++ b/sql/field.cc	2013-02-20 20:47:41 +0000
@@ -7580,6 +7580,18 @@ int Field_geom::store(const char *from, 
     if (wkb_type < (uint32) Geometry::wkb_point ||
         wkb_type > (uint32) Geometry::wkb_last)
       goto err;
+
+    if (geom_type != Field::GEOM_GEOMETRY && 
+        geom_type != Field::GEOM_GEOMETRYCOLLECTION &&
+        (uint32) geom_type != wkb_type)
+    {
+      my_printf_error(ER_WRONG_VALUE, ER(ER_WRONG_VALUE), 
+          MYF(0),
+          Geometry::ci_collection[geom_type]->m_name.str,
+          Geometry::ci_collection[wkb_type]->m_name.str);
+      goto err_exit;
+    }
+
     Field_blob::store_length(length);
     if (table->copy_blobs || length <= MAX_FIELD_WIDTH)
     {                                           // Must make a copy
@@ -7591,9 +7603,10 @@ int Field_geom::store(const char *from, 
   return 0;
 
 err:
-  bzero(ptr, Field_blob::pack_length());  
   my_message(ER_CANT_CREATE_GEOMETRY_OBJECT,
              ER(ER_CANT_CREATE_GEOMETRY_OBJECT), MYF(0));
+err_exit:
+  bzero(ptr, Field_blob::pack_length());  
   return -1;
 }
 



More information about the commits mailing list