summaryrefslogtreecommitdiff
path: root/sql/spatial.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/spatial.cc')
-rw-r--r--sql/spatial.cc47
1 files changed, 35 insertions, 12 deletions
diff --git a/sql/spatial.cc b/sql/spatial.cc
index bda64c6d420..13fff34df21 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -241,9 +241,8 @@ Geometry::Class_info *Geometry::find_class(const char *name, size_t len)
{
if (*cur_rt &&
((*cur_rt)->m_name.length == len) &&
- (my_strnncoll(&my_charset_latin1,
- (const uchar*) (*cur_rt)->m_name.str, len,
- (const uchar*) name, len) == 0))
+ (my_charset_latin1.strnncoll((*cur_rt)->m_name.str, len,
+ name, len) == 0))
return *cur_rt;
}
return 0;
@@ -277,6 +276,33 @@ Geometry *Geometry::construct(Geometry_buffer *buffer,
}
+uint Geometry::get_key_image_itMBR(LEX_CSTRING &src, uchar *buff, uint length)
+{
+ const char *dummy;
+ MBR mbr;
+ Geometry_buffer buffer;
+ Geometry *gobj;
+ const uint image_length= SIZEOF_STORED_DOUBLE*4;
+
+ if (src.length < SRID_SIZE)
+ {
+ bzero(buff, image_length);
+ return image_length;
+ }
+ gobj= Geometry::construct(&buffer, (char*) src.str, (uint32) src.length);
+ if (!gobj || gobj->get_mbr(&mbr, &dummy))
+ bzero(buff, image_length);
+ else
+ {
+ float8store(buff, mbr.xmin);
+ float8store(buff+8, mbr.xmax);
+ float8store(buff+16, mbr.ymin);
+ float8store(buff+24, mbr.ymax);
+ }
+ return image_length;
+}
+
+
Geometry *Geometry::create_from_wkt(Geometry_buffer *buffer,
Gis_read_stream *trs, String *wkt,
bool init_stream)
@@ -520,8 +546,8 @@ Geometry *Geometry::create_from_json(Geometry_buffer *buffer,
goto create_geom;
}
else if (je->value_len == feature_coll_type_len &&
- my_strnncoll(&my_charset_latin1, je->value, je->value_len,
- feature_coll_type, feature_coll_type_len) == 0)
+ my_charset_latin1.strnncoll(je->value, je->value_len,
+ feature_coll_type, feature_coll_type_len) == 0)
{
/*
'FeatureCollection' type found. Handle the 'Featurecollection'/'features'
@@ -532,8 +558,8 @@ Geometry *Geometry::create_from_json(Geometry_buffer *buffer,
fcoll_type_found= 1;
}
else if (je->value_len == feature_type_len &&
- my_strnncoll(&my_charset_latin1, je->value, je->value_len,
- feature_type, feature_type_len) == 0)
+ my_charset_latin1.strnncoll(je->value, je->value_len,
+ feature_type, feature_type_len) == 0)
{
if (geometry_start)
goto handle_geometry_key;
@@ -926,8 +952,7 @@ static int read_point_from_json(json_engine_t *je, bool er_on_3D,
goto bad_coordinates;
d= (n_coord == 0) ? x : ((n_coord == 1) ? y : &tmp);
- *d= my_strntod(je->s.cs, (char *) je->value,
- je->value_len, &endptr, &err);
+ *d= je->s.cs->strntod((char *) je->value, je->value_len, &endptr, &err);
if (err)
goto bad_coordinates;
n_coord++;
@@ -3251,9 +3276,7 @@ bool Gis_geometry_collection::init_from_wkt(Gis_read_stream *trs, String *wkb)
return 1;
if (next_word.length != 5 ||
- (my_strnncoll(&my_charset_latin1,
- (const uchar*) "empty", 5,
- (const uchar*) next_word.str, 5) != 0))
+ (my_charset_latin1.strnncoll("empty", 5, next_word.str, 5) != 0))
{
for (;;)
{