diff options
author | gkodinov/kgeorge@magare.gmz <> | 2007-10-10 16:26:02 +0300 |
---|---|---|
committer | gkodinov/kgeorge@magare.gmz <> | 2007-10-10 16:26:02 +0300 |
commit | e971b18f0690c723dac547bcdcaaa8ba9ff2850b (patch) | |
tree | 10232e94f6ae12c66b7122e5c199c8de76b8add1 /sql/field.cc | |
parent | 20ec6605d349c3cfa5c062a9818612616bbe3baa (diff) | |
download | mariadb-git-e971b18f0690c723dac547bcdcaaa8ba9ff2850b.tar.gz |
Bug #30825: Problems when putting a non-spatial index on a GIS column
Fixed the usage of spatial data (and Point in specific) with
non-spatial indexes.
Several problems :
- The length of the Point class was not updated to include the
spatial reference system identifier. Fixed by increasing with 4
bytes.
- The storage length of the spatial columns was not accounting for
the length that is prepended to it. Fixed by treating the
spatial data columns as blobs (and thus increasing the storage
length)
- When creating the key image for comparison in index read wrong
key image was created (the one needed for and r-tree search,
not the one for b-tree/other search). Fixed by treating the
spatial data columns as blobs (and creating the correct kind of
image based on the index type).
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 30 |
1 files changed, 0 insertions, 30 deletions
diff --git a/sql/field.cc b/sql/field.cc index e6e4195ba1e..ded31972a7f 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -7416,36 +7416,6 @@ uint Field_blob::max_packed_col_length(uint max_length) #ifdef HAVE_SPATIAL -uint Field_geom::get_key_image(char *buff, uint length, imagetype type) -{ - char *blob; - const char *dummy; - MBR mbr; - ulong blob_length= get_length(ptr); - Geometry_buffer buffer; - Geometry *gobj; - const uint image_length= SIZEOF_STORED_DOUBLE*4; - - if (blob_length < SRID_SIZE) - { - bzero(buff, image_length); - return image_length; - } - get_ptr(&blob); - gobj= Geometry::construct(&buffer, blob, blob_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; -} - - void Field_geom::sql_type(String &res) const { CHARSET_INFO *cs= &my_charset_latin1; |