mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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
This commit is contained in:
@ -801,5 +801,5 @@ CREATE TABLE t1 (st varchar(100));
|
|||||||
INSERT INTO t1 VALUES ("Fake string");
|
INSERT INTO t1 VALUES ("Fake string");
|
||||||
CREATE TABLE t2 (geom GEOMETRY NOT NULL, SPATIAL KEY gk(geom));
|
CREATE TABLE t2 (geom GEOMETRY NOT NULL, SPATIAL KEY gk(geom));
|
||||||
INSERT INTO t2 SELECT GeomFromText(st) FROM t1;
|
INSERT INTO t2 SELECT GeomFromText(st) FROM t1;
|
||||||
ERROR HY000: Unknown error
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -461,9 +461,9 @@ Note 1003 select issimple(multipoint(point(3,6),point(4,10))) AS `issimple(Multi
|
|||||||
create table t1 (a geometry not null);
|
create table t1 (a geometry not null);
|
||||||
insert into t1 values (GeomFromText('Point(1 2)'));
|
insert into t1 values (GeomFromText('Point(1 2)'));
|
||||||
insert into t1 values ('Garbage');
|
insert into t1 values ('Garbage');
|
||||||
ERROR HY000: Unknown error
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
insert IGNORE into t1 values ('Garbage');
|
insert IGNORE into t1 values ('Garbage');
|
||||||
ERROR HY000: Unknown error
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
alter table t1 add spatial index(a);
|
alter table t1 add spatial index(a);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1(a geometry not null, spatial index(a));
|
create table t1(a geometry not null, spatial index(a));
|
||||||
@ -655,3 +655,13 @@ t1 where object_id=85984;
|
|||||||
object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo))
|
object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo))
|
||||||
85984 MULTIPOLYGON 0 POINT(-114.87787186923 36.33101763469)
|
85984 MULTIPOLYGON 0 POINT(-114.87787186923 36.33101763469)
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (fl geometry);
|
||||||
|
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);
|
||||||
|
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
|
||||||
|
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
|
||||||
|
drop table t1;
|
||||||
|
@ -168,6 +168,6 @@ drop table t1;
|
|||||||
CREATE TABLE t1 (st varchar(100));
|
CREATE TABLE t1 (st varchar(100));
|
||||||
INSERT INTO t1 VALUES ("Fake string");
|
INSERT INTO t1 VALUES ("Fake string");
|
||||||
CREATE TABLE t2 (geom GEOMETRY NOT NULL, SPATIAL KEY gk(geom));
|
CREATE TABLE t2 (geom GEOMETRY NOT NULL, SPATIAL KEY gk(geom));
|
||||||
--error 1105
|
--error 1416
|
||||||
INSERT INTO t2 SELECT GeomFromText(st) FROM t1;
|
INSERT INTO t2 SELECT GeomFromText(st) FROM t1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -165,9 +165,9 @@ explain extended select issimple(MultiPoint(Point(3, 6), Point(4, 10))), issimpl
|
|||||||
|
|
||||||
create table t1 (a geometry not null);
|
create table t1 (a geometry not null);
|
||||||
insert into t1 values (GeomFromText('Point(1 2)'));
|
insert into t1 values (GeomFromText('Point(1 2)'));
|
||||||
-- error 1105
|
-- error 1416
|
||||||
insert into t1 values ('Garbage');
|
insert into t1 values ('Garbage');
|
||||||
-- error 1105
|
-- error 1416
|
||||||
insert IGNORE into t1 values ('Garbage');
|
insert IGNORE into t1 values ('Garbage');
|
||||||
alter table t1 add spatial index(a);
|
alter table t1 add spatial index(a);
|
||||||
|
|
||||||
@ -359,3 +359,15 @@ select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from
|
|||||||
t1 where object_id=85984;
|
t1 where object_id=85984;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
create table t1 (fl geometry);
|
||||||
|
--error 1416
|
||||||
|
insert into t1 values (1);
|
||||||
|
--error 1416
|
||||||
|
insert into t1 values (1.11);
|
||||||
|
--error 1416
|
||||||
|
insert into t1 values ("qwerty");
|
||||||
|
--error 1416
|
||||||
|
insert into t1 values (pointfromtext('point(1,1)'));
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
30
sql/field.cc
30
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)
|
int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
if (!length)
|
if (!length)
|
||||||
bzero(ptr, Field_blob::pack_length());
|
bzero(ptr, Field_blob::pack_length());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (from == Geometry::bad_geometry_data.ptr())
|
||||||
|
goto err;
|
||||||
// Check given WKB
|
// Check given WKB
|
||||||
uint32 wkb_type;
|
uint32 wkb_type;
|
||||||
if (length < SRID_SIZE + WKB_HEADER_SIZE + SIZEOF_STORED_DOUBLE*2)
|
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);
|
wkb_type= uint4korr(from + WKB_HEADER_SIZE);
|
||||||
if (wkb_type < (uint32) Geometry::wkb_point ||
|
if (wkb_type < (uint32) Geometry::wkb_point ||
|
||||||
wkb_type > (uint32) Geometry::wkb_end)
|
wkb_type > (uint32) Geometry::wkb_end)
|
||||||
return -1;
|
goto err;
|
||||||
Field_blob::store_length(length);
|
Field_blob::store_length(length);
|
||||||
if (table->copy_blobs || length <= MAX_FIELD_WIDTH)
|
if (table->copy_blobs || length <= MAX_FIELD_WIDTH)
|
||||||
{ // Must make a copy
|
{ // Must make a copy
|
||||||
@ -7293,6 +7319,8 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs)
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
bzero(ptr, Field_blob::pack_length());
|
bzero(ptr, Field_blob::pack_length());
|
||||||
|
my_message(ER_CANT_CREATE_GEOMETRY_OBJECT,
|
||||||
|
ER(ER_CANT_CREATE_GEOMETRY_OBJECT), MYF(0));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1189,9 +1189,9 @@ public:
|
|||||||
enum_field_types type() const { return FIELD_TYPE_GEOMETRY; }
|
enum_field_types type() const { return FIELD_TYPE_GEOMETRY; }
|
||||||
void sql_type(String &str) const;
|
void sql_type(String &str) const;
|
||||||
int store(const char *to, uint length, CHARSET_INFO *charset);
|
int store(const char *to, uint length, CHARSET_INFO *charset);
|
||||||
int store(double nr) { return 1; }
|
int store(double nr);
|
||||||
int store(longlong nr) { return 1; }
|
int store(longlong nr);
|
||||||
int store_decimal(const my_decimal *) { return 1; }
|
int store_decimal(const my_decimal *);
|
||||||
void get_key_image(char *buff,uint length,imagetype type);
|
void get_key_image(char *buff,uint length,imagetype type);
|
||||||
};
|
};
|
||||||
#endif /*HAVE_SPATIAL*/
|
#endif /*HAVE_SPATIAL*/
|
||||||
|
@ -55,8 +55,11 @@ String *Item_func_geometry_from_text::val_str(String *str)
|
|||||||
return 0;
|
return 0;
|
||||||
str->length(0);
|
str->length(0);
|
||||||
str->q_append(srid);
|
str->q_append(srid);
|
||||||
if ((null_value= !Geometry::create_from_wkt(&buffer, &trs, str, 0)))
|
if (!Geometry::create_from_wkt(&buffer, &trs, str, 0))
|
||||||
return 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;
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5344,3 +5344,5 @@ ER_SP_NOT_VAR_ARG 42000
|
|||||||
eng "OUT or INOUT argument %d for routine %s is not a variable"
|
eng "OUT or INOUT argument %d for routine %s is not a variable"
|
||||||
ER_SP_NO_RETSET_IN_FUNC 0A000
|
ER_SP_NO_RETSET_IN_FUNC 0A000
|
||||||
eng "Not allowed to return a result set from a function"
|
eng "Not allowed to return a result set from a function"
|
||||||
|
ER_CANT_CREATE_GEOMETRY_OBJECT 22003
|
||||||
|
eng "Cannot get geometry object from data you send to the GEOMETRY field"
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
/***************************** Gis_class_info *******************************/
|
/***************************** Gis_class_info *******************************/
|
||||||
|
|
||||||
|
String Geometry::bad_geometry_data("Bad object", &my_charset_bin);
|
||||||
|
|
||||||
Geometry::Class_info *Geometry::ci_collection[Geometry::wkb_end+1]=
|
Geometry::Class_info *Geometry::ci_collection[Geometry::wkb_end+1]=
|
||||||
{
|
{
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||||
|
@ -173,6 +173,8 @@ public:
|
|||||||
static void operator delete(void *ptr, void *buffer)
|
static void operator delete(void *ptr, void *buffer)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
static String bad_geometry_data;
|
||||||
|
|
||||||
enum wkbType
|
enum wkbType
|
||||||
{
|
{
|
||||||
wkb_point= 1,
|
wkb_point= 1,
|
||||||
|
@ -3858,11 +3858,8 @@ fill_record(THD *thd, Field **ptr, List<Item> &values, bool ignore_errors)
|
|||||||
TABLE *table= field->table;
|
TABLE *table= field->table;
|
||||||
if (field == table->next_number_field)
|
if (field == table->next_number_field)
|
||||||
table->auto_increment_field_not_null= TRUE;
|
table->auto_increment_field_not_null= TRUE;
|
||||||
if ((value->save_in_field(field, 0) < 0) && !ignore_errors)
|
if (value->save_in_field(field, 0) == -1)
|
||||||
{
|
|
||||||
my_message(ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR), MYF(0));
|
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
DBUG_RETURN(thd->net.report_error);
|
DBUG_RETURN(thd->net.report_error);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user