mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0
into deer.(none):/home/hf/work/mysql-5.0.spaerrs
This commit is contained in:
@ -801,5 +801,5 @@ CREATE TABLE t1 (st varchar(100));
|
||||
INSERT INTO t1 VALUES ("Fake string");
|
||||
CREATE TABLE t2 (geom GEOMETRY NOT NULL, SPATIAL KEY gk(geom));
|
||||
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;
|
||||
|
@ -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);
|
||||
insert into t1 values (GeomFromText('Point(1 2)'));
|
||||
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');
|
||||
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);
|
||||
drop table t1;
|
||||
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))
|
||||
85984 MULTIPOLYGON 0 POINT(-114.87787186923 36.33101763469)
|
||||
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));
|
||||
INSERT INTO t1 VALUES ("Fake string");
|
||||
CREATE TABLE t2 (geom GEOMETRY NOT NULL, SPATIAL KEY gk(geom));
|
||||
--error 1105
|
||||
--error 1416
|
||||
INSERT INTO t2 SELECT GeomFromText(st) FROM t1;
|
||||
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);
|
||||
insert into t1 values (GeomFromText('Point(1 2)'));
|
||||
-- error 1105
|
||||
-- error 1416
|
||||
insert into t1 values ('Garbage');
|
||||
-- error 1105
|
||||
-- error 1416
|
||||
insert IGNORE into t1 values ('Garbage');
|
||||
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;
|
||||
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1189,9 +1189,9 @@ public:
|
||||
enum_field_types type() const { return FIELD_TYPE_GEOMETRY; }
|
||||
void sql_type(String &str) const;
|
||||
int store(const char *to, uint length, CHARSET_INFO *charset);
|
||||
int store(double nr) { return 1; }
|
||||
int store(longlong nr) { return 1; }
|
||||
int store_decimal(const my_decimal *) { return 1; }
|
||||
int store(double nr);
|
||||
int store(longlong nr);
|
||||
int store_decimal(const my_decimal *);
|
||||
void get_key_image(char *buff,uint length,imagetype type);
|
||||
};
|
||||
#endif /*HAVE_SPATIAL*/
|
||||
|
@ -55,8 +55,11 @@ String *Item_func_geometry_from_text::val_str(String *str)
|
||||
return 0;
|
||||
str->length(0);
|
||||
str->q_append(srid);
|
||||
if ((null_value= !Geometry::create_from_wkt(&buffer, &trs, str, 0)))
|
||||
return 0;
|
||||
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;
|
||||
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"
|
||||
ER_SP_NO_RETSET_IN_FUNC 0A000
|
||||
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 *******************************/
|
||||
|
||||
String Geometry::bad_geometry_data("Bad object", &my_charset_bin);
|
||||
|
||||
Geometry::Class_info *Geometry::ci_collection[Geometry::wkb_end+1]=
|
||||
{
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||
|
@ -173,6 +173,8 @@ public:
|
||||
static void operator delete(void *ptr, void *buffer)
|
||||
{}
|
||||
|
||||
static String bad_geometry_data;
|
||||
|
||||
enum wkbType
|
||||
{
|
||||
wkb_point= 1,
|
||||
|
@ -3858,12 +3858,9 @@ fill_record(THD *thd, Field **ptr, List<Item> &values, bool ignore_errors)
|
||||
TABLE *table= field->table;
|
||||
if (field == table->next_number_field)
|
||||
table->auto_increment_field_not_null= TRUE;
|
||||
if ((value->save_in_field(field, 0) < 0) && !ignore_errors)
|
||||
{
|
||||
my_message(ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR), MYF(0));
|
||||
if (value->save_in_field(field, 0) == -1)
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(thd->net.report_error);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user