diff options
author | unknown <hf@deer.(none)> | 2005-04-29 20:23:02 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2005-04-29 20:23:02 +0500 |
commit | d1c514729f2ccaae140758e9578c86092a175176 (patch) | |
tree | a1ccc4cac7fa2e450dd06586cd94df5312459b26 /sql/field.cc | |
parent | 5b4a243927b36e13b761bd6f65d7c390b24696fe (diff) | |
download | mariadb-git-d1c514729f2ccaae140758e9578c86092a175176.tar.gz |
Fix for #6553 and #8776 (no errors on bad spatial data)
mysql-test/r/gis-rtree.result:
test result fixed
mysql-test/r/gis.result:
test result fixed
mysql-test/t/gis-rtree.test:
test case fixed
mysql-test/t/gis.test:
test case added
sql/field.cc:
error messages launched now when we try to put bad spatial
data in the GEOMETRY field
sql/field.h:
interface fixed
sql/item_geofunc.cc:
bad_data sign now instead of NULL now returned from
Item_geometry_from_text::val_str
sql/share/errmsg.txt:
error message added
sql/spatial.cc:
bad_geometry data instance
sql/spatial.h:
bad_geometry_data declaration
sql/sql_base.cc:
messages now created in store_* function
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/sql/field.cc b/sql/field.cc index 00f729d5b07..c59d9b63fca 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -7267,12 +7267,38 @@ void Field_geom::sql_type(String &res) const } +int Field_geom::store(double nr) +{ + my_message(ER_CANT_CREATE_GEOMETRY_OBJECT, + ER(ER_CANT_CREATE_GEOMETRY_OBJECT), MYF(0)); + return -1; +} + + +int Field_geom::store(longlong nr) +{ + my_message(ER_CANT_CREATE_GEOMETRY_OBJECT, + ER(ER_CANT_CREATE_GEOMETRY_OBJECT), MYF(0)); + return -1; +} + + +int Field_geom::store_decimal(const my_decimal *) +{ + my_message(ER_CANT_CREATE_GEOMETRY_OBJECT, + ER(ER_CANT_CREATE_GEOMETRY_OBJECT), MYF(0)); + return -1; +} + + int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs) { if (!length) bzero(ptr, Field_blob::pack_length()); else { + if (from == Geometry::bad_geometry_data.ptr()) + goto err; // Check given WKB uint32 wkb_type; if (length < SRID_SIZE + WKB_HEADER_SIZE + SIZEOF_STORED_DOUBLE*2) @@ -7280,7 +7306,7 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs) wkb_type= uint4korr(from + WKB_HEADER_SIZE); if (wkb_type < (uint32) Geometry::wkb_point || wkb_type > (uint32) Geometry::wkb_end) - return -1; + goto err; Field_blob::store_length(length); if (table->copy_blobs || length <= MAX_FIELD_WIDTH) { // Must make a copy @@ -7293,6 +7319,8 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs) err: bzero(ptr, Field_blob::pack_length()); + my_message(ER_CANT_CREATE_GEOMETRY_OBJECT, + ER(ER_CANT_CREATE_GEOMETRY_OBJECT), MYF(0)); return -1; } |