diff options
author | gkodinov/kgeorge@magare.gmz <> | 2007-10-23 11:44:14 +0300 |
---|---|---|
committer | gkodinov/kgeorge@magare.gmz <> | 2007-10-23 11:44:14 +0300 |
commit | 3553f6eac20bd08d2bbf40f49c8830c580681acc (patch) | |
tree | b06c9ed11a905264c96930def5aab8cf1965e43d /sql | |
parent | ffea2073b10ee86cbd7b037053e520145803afc6 (diff) | |
parent | d066e2173c814a373503b598ffc787094c914775 (diff) | |
download | mariadb-git-3553f6eac20bd08d2bbf40f49c8830c580681acc.tar.gz |
Merge magare.gmz:/home/kgeorge/mysql/autopush/B30825-new-5.0-opt
into magare.gmz:/home/kgeorge/mysql/work/B30825-5.1-opt
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 30 | ||||
-rw-r--r-- | sql/field.h | 1 | ||||
-rw-r--r-- | sql/sql_select.h | 8 | ||||
-rw-r--r-- | sql/sql_table.cc | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 2 | ||||
-rw-r--r-- | sql/table.cc | 6 |
6 files changed, 12 insertions, 37 deletions
diff --git a/sql/field.cc b/sql/field.cc index 08747534084..e04162d5e14 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -8031,36 +8031,6 @@ uint Field_blob::is_equal(Create_field *new_field) #ifdef HAVE_SPATIAL -uint Field_geom::get_key_image(uchar *buff, uint length, imagetype type) -{ - uchar *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, (char*) 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; diff --git a/sql/field.h b/sql/field.h index 8aad6783291..d0d867d0b32 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1522,7 +1522,6 @@ public: int store(double nr); int store(longlong nr, bool unsigned_val); int store_decimal(const my_decimal *); - uint get_key_image(uchar *buff,uint length,imagetype type); uint size_of() const { return sizeof(*this); } int reset(void) { return !maybe_null() || Field_blob::reset(); } geometry_type get_geometry_type() { return geom_type; }; diff --git a/sql/sql_select.h b/sql/sql_select.h index efa92432e2b..256d57cc10a 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -566,9 +566,13 @@ public: store_key(THD *thd, Field *field_arg, uchar *ptr, uchar *null, uint length) :null_key(0), null_ptr(null), err(0) { - if (field_arg->type() == MYSQL_TYPE_BLOB) + if (field_arg->type() == MYSQL_TYPE_BLOB + || field_arg->type() == MYSQL_TYPE_GEOMETRY) { - /* Key segments are always packed with a 2 byte length prefix */ + /* + Key segments are always packed with a 2 byte length prefix. + See mi_rkey for details. + */ to_field= new Field_varstring(ptr, length, 2, null, 1, Field::NONE, field_arg->field_name, field_arg->table->s, field_arg->charset()); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index cd39623f2b4..86d1fe79a00 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2740,7 +2740,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, } if (f_is_geom(sql_field->pack_flag) && sql_field->geom_type == Field::GEOM_POINT) - column->length= 21; + column->length= 25; if (!column->length) { my_error(ER_BLOB_KEY_WITHOUT_LENGTH, MYF(0), column->field_name); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ce64323464f..d90e85a11d2 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4896,7 +4896,7 @@ spatial_type: | GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; } | POINT_SYM { - Lex->length= (char*)"21"; + Lex->length= (char*)"25"; $$= Field::GEOM_POINT; } | MULTIPOINT { $$= Field::GEOM_MULTIPOINT; } diff --git a/sql/table.cc b/sql/table.cc index c1d8e3abe94..a212751db8d 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1351,9 +1351,11 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, keyinfo->key_length+= HA_KEY_NULL_LENGTH; } if (field->type() == MYSQL_TYPE_BLOB || - field->real_type() == MYSQL_TYPE_VARCHAR) + field->real_type() == MYSQL_TYPE_VARCHAR || + field->type() == MYSQL_TYPE_GEOMETRY) { - if (field->type() == MYSQL_TYPE_BLOB) + if (field->type() == MYSQL_TYPE_BLOB || + field->type() == MYSQL_TYPE_GEOMETRY) key_part->key_part_flag|= HA_BLOB_PART; else key_part->key_part_flag|= HA_VAR_LENGTH_PART; |