summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorgkodinov/kgeorge@magare.gmz <>2007-10-23 11:44:14 +0300
committergkodinov/kgeorge@magare.gmz <>2007-10-23 11:44:14 +0300
commit3553f6eac20bd08d2bbf40f49c8830c580681acc (patch)
treeb06c9ed11a905264c96930def5aab8cf1965e43d /sql
parentffea2073b10ee86cbd7b037053e520145803afc6 (diff)
parentd066e2173c814a373503b598ffc787094c914775 (diff)
downloadmariadb-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.cc30
-rw-r--r--sql/field.h1
-rw-r--r--sql/sql_select.h8
-rw-r--r--sql/sql_table.cc2
-rw-r--r--sql/sql_yacc.yy2
-rw-r--r--sql/table.cc6
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;