mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
Merge mysql.com:/home/ram/work/b26038/b26038.5.0
into mysql.com:/home/ram/work/b26038/b26038.5.1 mysql-test/t/gis.test: Auto merged sql/item_geofunc.cc: Auto merged sql/item_geofunc.h: Auto merged sql/spatial.cc: Auto merged sql/spatial.h: Auto merged mysql-test/include/gis_generic.inc: manual merge mysql-test/r/archive_gis.result: manual merge mysql-test/r/gis.result: manual merge mysql-test/r/innodb_gis.result: manual merge mysql-test/r/ndb_gis.result: manual merge
This commit is contained in:
commit
57c08a6a33
10 changed files with 153 additions and 47 deletions
|
|
@ -38,6 +38,7 @@ void Item_geometry_func::fix_length_and_dec()
|
|||
collation.set(&my_charset_bin);
|
||||
decimals=0;
|
||||
max_length=MAX_BLOB_WIDTH;
|
||||
maybe_null= 1;
|
||||
}
|
||||
|
||||
int Item_geometry_func::get_geometry_type() const
|
||||
|
|
@ -66,11 +67,8 @@ String *Item_func_geometry_from_text::val_str(String *str)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -124,6 +122,7 @@ String *Item_func_as_wkt::val_str(String *str)
|
|||
void Item_func_as_wkt::fix_length_and_dec()
|
||||
{
|
||||
max_length=MAX_BLOB_WIDTH;
|
||||
maybe_null= 1;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -389,7 +388,8 @@ String *Item_func_spatial_collection::val_str(String *str)
|
|||
for (i= 0; i < arg_count; ++i)
|
||||
{
|
||||
String *res= args[i]->val_str(&arg_value);
|
||||
if (args[i]->null_value)
|
||||
uint32 len;
|
||||
if (args[i]->null_value || ((len= res->length()) < WKB_HEADER_SIZE))
|
||||
goto err;
|
||||
|
||||
if (coll_type == Geometry::wkb_geometrycollection)
|
||||
|
|
@ -398,13 +398,12 @@ String *Item_func_spatial_collection::val_str(String *str)
|
|||
In the case of GeometryCollection we don't need any checkings
|
||||
for item types, so just copy them into target collection
|
||||
*/
|
||||
if (str->append(res->ptr(), res->length(), (uint32) 512))
|
||||
if (str->append(res->ptr(), len, (uint32) 512))
|
||||
goto err;
|
||||
}
|
||||
else
|
||||
{
|
||||
enum Geometry::wkbType wkb_type;
|
||||
uint32 len=res->length();
|
||||
const char *data= res->ptr() + 1;
|
||||
|
||||
/*
|
||||
|
|
@ -412,8 +411,6 @@ String *Item_func_spatial_collection::val_str(String *str)
|
|||
are of specific type, let's do this checking now
|
||||
*/
|
||||
|
||||
if (len < 5)
|
||||
goto err;
|
||||
wkb_type= (Geometry::wkbType) uint4korr(data);
|
||||
data+= 4;
|
||||
len-= 5;
|
||||
|
|
@ -535,9 +532,13 @@ longlong Item_func_spatial_rel::val_int()
|
|||
longlong Item_func_isempty::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
String tmp;
|
||||
null_value=0;
|
||||
return args[0]->null_value ? 1 : 0;
|
||||
String tmp;
|
||||
String *swkb= args[0]->val_str(&tmp);
|
||||
Geometry_buffer buffer;
|
||||
|
||||
null_value= args[0]->null_value ||
|
||||
!(Geometry::construct(&buffer, swkb->ptr(), swkb->length()));
|
||||
return null_value ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -545,10 +546,11 @@ longlong Item_func_issimple::val_int()
|
|||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
String tmp;
|
||||
String *wkb=args[0]->val_str(&tmp);
|
||||
|
||||
if ((null_value= (!wkb || args[0]->null_value)))
|
||||
return 0;
|
||||
String *swkb= args[0]->val_str(&tmp);
|
||||
Geometry_buffer buffer;
|
||||
|
||||
null_value= args[0]->null_value ||
|
||||
!(Geometry::construct(&buffer, swkb->ptr(), swkb->length()));
|
||||
/* TODO: Ramil or Holyfoot, add real IsSimple calculation */
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue