summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2005-04-29 20:23:02 +0500
committerunknown <hf@deer.(none)>2005-04-29 20:23:02 +0500
commitd1c514729f2ccaae140758e9578c86092a175176 (patch)
treea1ccc4cac7fa2e450dd06586cd94df5312459b26 /sql/field.cc
parent5b4a243927b36e13b761bd6f65d7c390b24696fe (diff)
downloadmariadb-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.cc30
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;
}