From: Date: March 2 2007 12:09pm Subject: bk commit into 5.0 tree (ramil:1.2419) BUG#26038 List-Archive: http://lists.mysql.com/commits/21006 X-Bug: 26038 Message-Id: <20070302110949.0274D3400075@ramil.myoffice.izhnet.ru> Below is the list of changes that have just been committed into a local 5.0 repository of ram. When ram does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2007-03-02 15:09:44+04:00, ramil@stripped +7 -0 after merge fix (bug #26038) Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. mysql-test/include/gis_generic.inc@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +2 -2 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. mysql-test/r/archive_gis.result@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +2 -2 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. mysql-test/r/gis.result@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +46 -4 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. mysql-test/r/innodb_gis.result@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +2 -2 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. mysql-test/r/ndb_gis.result@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +4 -4 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. mysql-test/t/gis.test@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +2 -2 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. sql/item_geofunc.cc@stripped, 2007-03-02 15:09:43+04:00, ramil@stripped +2 -5 after merge fix Item_func_geometry_from_text::val_str() should set null_value in case of wrong data. # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: ramil # Host: ramil.myoffice.izhnet.ru # Root: /home/ram/work/b26038/b26038.5.0 --- 1.3/mysql-test/include/gis_generic.inc 2007-03-02 15:09:48 +04:00 +++ 1.4/mysql-test/include/gis_generic.inc 2007-03-02 15:09:48 +04:00 @@ -165,14 +165,14 @@ insert IGNORE into t1 values ('Garbage') drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); --error 1416 insert into t1 values (1); --error 1416 insert into t1 values (1.11); --error 1416 insert into t1 values ("qwerty"); ---error 1416 +--error 1048 insert into t1 values (pointfromtext('point(1,1)')); drop table t1; --- 1.3/mysql-test/r/archive_gis.result 2007-03-02 15:09:48 +04:00 +++ 1.4/mysql-test/r/archive_gis.result 2007-03-02 15:09:48 +04:00 @@ -446,7 +446,7 @@ ERROR 22003: Cannot get geometry object insert IGNORE into t1 values ('Garbage'); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); insert into t1 values (1); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (1.11); @@ -454,5 +454,5 @@ ERROR 22003: Cannot get geometry object insert into t1 values ("qwerty"); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (pointfromtext('point(1,1)')); -ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +ERROR 23000: Column 'fl' cannot be null drop table t1; --- 1.3/mysql-test/r/innodb_gis.result 2007-03-02 15:09:48 +04:00 +++ 1.4/mysql-test/r/innodb_gis.result 2007-03-02 15:09:48 +04:00 @@ -446,7 +446,7 @@ ERROR 22003: Cannot get geometry object insert IGNORE into t1 values ('Garbage'); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); insert into t1 values (1); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (1.11); @@ -454,5 +454,5 @@ ERROR 22003: Cannot get geometry object insert into t1 values ("qwerty"); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (pointfromtext('point(1,1)')); -ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +ERROR 23000: Column 'fl' cannot be null drop table t1; --- 1.4/mysql-test/r/ndb_gis.result 2007-03-02 15:09:48 +04:00 +++ 1.5/mysql-test/r/ndb_gis.result 2007-03-02 15:09:48 +04:00 @@ -446,7 +446,7 @@ ERROR 22003: Cannot get geometry object insert IGNORE into t1 values ('Garbage'); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); insert into t1 values (1); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (1.11); @@ -454,7 +454,7 @@ ERROR 22003: Cannot get geometry object insert into t1 values ("qwerty"); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (pointfromtext('point(1,1)')); -ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +ERROR 23000: Column 'fl' cannot be null drop table t1; set engine_condition_pushdown = on; DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; @@ -904,7 +904,7 @@ ERROR 22003: Cannot get geometry object insert IGNORE into t1 values ('Garbage'); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); insert into t1 values (1); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (1.11); @@ -912,5 +912,5 @@ ERROR 22003: Cannot get geometry object insert into t1 values ("qwerty"); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (pointfromtext('point(1,1)')); -ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +ERROR 23000: Column 'fl' cannot be null drop table t1; --- 1.40/mysql-test/r/gis.result 2007-03-02 15:09:48 +04:00 +++ 1.41/mysql-test/r/gis.result 2007-03-02 15:09:48 +04:00 @@ -578,7 +578,7 @@ create table t1 select GeomFromWKB(POINT show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `GeomFromWKB(POINT(1,3))` geometry NOT NULL default '' + `GeomFromWKB(POINT(1,3))` geometry default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; CREATE TABLE `t1` (`object_id` bigint(20) unsigned NOT NULL default '0', `geo` @@ -657,7 +657,7 @@ t1 where object_id=85984; object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo)) 85984 MULTIPOLYGON 0 POINT(-114.87787186923 36.33101763469) drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); insert into t1 values (1); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (1.11); @@ -665,7 +665,7 @@ ERROR 22003: Cannot get geometry object insert into t1 values ("qwerty"); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field insert into t1 values (pointfromtext('point(1,1)')); -ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +ERROR 23000: Column 'fl' cannot be null drop table t1; select (asWKT(geomfromwkb((0x000000000140240000000000004024000000000000)))); (asWKT(geomfromwkb((0x000000000140240000000000004024000000000000)))) @@ -689,6 +689,48 @@ load data infile '../std_data_ln/bad_gis ERROR 22004: Column was set to data type implicit default; NULL supplied for NOT NULL column 'b' at row 1 alter table t1 enable keys; drop table t1; +create table t1 (a int, b blob); +insert into t1 values (1, ''), (2, NULL), (3, '1'); +select * from t1; +a b +1 +2 NULL +3 1 +select +geometryfromtext(b) IS NULL, geometryfromwkb(b) IS NULL, astext(b) IS NULL, +aswkb(b) IS NULL, geometrytype(b) IS NULL, centroid(b) IS NULL, +envelope(b) IS NULL, startpoint(b) IS NULL, endpoint(b) IS NULL, +exteriorring(b) IS NULL, pointn(b, 1) IS NULL, geometryn(b, 1) IS NULL, +interiorringn(b, 1) IS NULL, multipoint(b) IS NULL, isempty(b) IS NULL, +issimple(b) IS NULL, isclosed(b) IS NULL, dimension(b) IS NULL, +numgeometries(b) IS NULL, numinteriorrings(b) IS NULL, numpoints(b) IS NULL, +area(b) IS NULL, glength(b) IS NULL, srid(b) IS NULL, x(b) IS NULL, +y(b) IS NULL +from t1; +geometryfromtext(b) IS NULL geometryfromwkb(b) IS NULL astext(b) IS NULL aswkb(b) IS NULL geometrytype(b) IS NULL centroid(b) IS NULL envelope(b) IS NULL startpoint(b) IS NULL endpoint(b) IS NULL exteriorring(b) IS NULL pointn(b, 1) IS NULL geometryn(b, 1) IS NULL interiorringn(b, 1) IS NULL multipoint(b) IS NULL isempty(b) IS NULL issimple(b) IS NULL isclosed(b) IS NULL dimension(b) IS NULL numgeometries(b) IS NULL numinteriorrings(b) IS NULL numpoints(b) IS NULL area(b) IS NULL glength(b) IS NULL srid(b) IS NULL x(b) IS NULL y(b) IS NULL +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +select +within(b, b) IS NULL, contains(b, b) IS NULL, overlaps(b, b) IS NULL, +equals(b, b) IS NULL, disjoint(b, b) IS NULL, touches(b, b) IS NULL, +intersects(b, b) IS NULL, crosses(b, b) IS NULL +from t1; +within(b, b) IS NULL contains(b, b) IS NULL overlaps(b, b) IS NULL equals(b, b) IS NULL disjoint(b, b) IS NULL touches(b, b) IS NULL intersects(b, b) IS NULL crosses(b, b) IS NULL +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +select +point(b, b) IS NULL, linestring(b) IS NULL, polygon(b) IS NULL, multipoint(b) IS NULL, +multilinestring(b) IS NULL, multipolygon(b) IS NULL, +geometrycollection(b) IS NULL +from t1; +point(b, b) IS NULL linestring(b) IS NULL polygon(b) IS NULL multipoint(b) IS NULL multilinestring(b) IS NULL multipolygon(b) IS NULL geometrycollection(b) IS NULL +0 1 1 1 1 1 1 +1 1 1 1 1 1 1 +0 1 1 1 1 1 1 +drop table t1; +End of 4.1 tests create table t1 (s1 geometry not null,s2 char(100)); create trigger t1_bu before update on t1 for each row set new.s1 = null; insert into t1 values (null,null); @@ -715,7 +757,7 @@ drop table t1; create table t1 select GeomFromText('point(1 1)'); desc t1; Field Type Null Key Default Extra -GeomFromText('point(1 1)') geometry NO +GeomFromText('point(1 1)') geometry YES NULL drop table t1; create table t1 (g geometry not null); insert into t1 values(default); --- 1.33/mysql-test/t/gis.test 2007-03-02 15:09:48 +04:00 +++ 1.34/mysql-test/t/gis.test 2007-03-02 15:09:48 +04:00 @@ -360,14 +360,14 @@ t1 where object_id=85984; drop table t1; -create table t1 (fl geometry); +create table t1 (fl geometry not null); --error 1416 insert into t1 values (1); --error 1416 insert into t1 values (1.11); --error 1416 insert into t1 values ("qwerty"); ---error 1416 +--error 1048 insert into t1 values (pointfromtext('point(1,1)')); drop table t1; --- 1.30/sql/item_geofunc.cc 2007-03-02 15:09:48 +04:00 +++ 1.31/sql/item_geofunc.cc 2007-03-02 15:09:48 +04:00 @@ -64,11 +64,8 @@ String *Item_func_geometry_from_text::va return 0; str->length(0); str->q_append(srid); - if (!Geometry::create_from_wkt(&buffer, &trs, str, 0)) - /* We shouldn't return NULL here as NULL is a legal spatial object */ - /* Geometry::bad_spatial_data will produce error message beeing stored*/ - /* in GEOMETRY field */ - return &Geometry::bad_geometry_data; + if ((null_value= !Geometry::create_from_wkt(&buffer, &trs, str, 0))) + return 0; return str; }