Commit 46cbb26b authored by holyfoot/hf@hfmain.(none)'s avatar holyfoot/hf@hfmain.(none)

Merge bk@192.168.21.1:mysql-5.1-opt

into  mysql.com:/home/hf/work/31155/my51-31155
parents da023efb 44325614
...@@ -4492,11 +4492,8 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length) ...@@ -4492,11 +4492,8 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
field= new Field_blob(max_length, maybe_null, name, collation.collation); field= new Field_blob(max_length, maybe_null, name, collation.collation);
break; // Blob handled outside of case break; // Blob handled outside of case
case MYSQL_TYPE_GEOMETRY: case MYSQL_TYPE_GEOMETRY:
field= new Field_geom(max_length, maybe_null, name, table->s, field= new Field_geom(max_length, maybe_null,
(Field::geometry_type) name, table->s, get_geometry_type());
((type() == Item::TYPE_HOLDER) ?
((Item_type_holder *)this)->get_geometry_type() :
((Item_geometry_func *)this)->get_geometry_type()));
} }
if (field) if (field)
field->init(table); field->init(table);
...@@ -6621,9 +6618,7 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item) ...@@ -6621,9 +6618,7 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item)
decimals= 0; decimals= 0;
prev_decimal_int_part= item->decimal_int_part(); prev_decimal_int_part= item->decimal_int_part();
if (item->field_type() == MYSQL_TYPE_GEOMETRY) if (item->field_type() == MYSQL_TYPE_GEOMETRY)
geometry_type= (item->type() == Item::FIELD_ITEM) ? geometry_type= item->get_geometry_type();
((Item_field *)item)->get_geometry_type() :
(Field::geometry_type)((Item_geometry_func *)item)->get_geometry_type();
} }
......
...@@ -1001,6 +1001,8 @@ class Item { ...@@ -1001,6 +1001,8 @@ class Item {
*/ */
virtual bool result_as_longlong() { return FALSE; } virtual bool result_as_longlong() { return FALSE; }
bool is_datetime(); bool is_datetime();
virtual Field::geometry_type get_geometry_type() const
{ return Field::GEOM_GEOMETRY; };
String *check_well_formed_result(String *str); String *check_well_formed_result(String *str);
}; };
...@@ -1470,7 +1472,7 @@ class Item_field :public Item_ident ...@@ -1470,7 +1472,7 @@ class Item_field :public Item_ident
int fix_outer_field(THD *thd, Field **field, Item **reference); int fix_outer_field(THD *thd, Field **field, Item **reference);
virtual Item *update_value_transformer(uchar *select_arg); virtual Item *update_value_transformer(uchar *select_arg);
void print(String *str); void print(String *str);
Field::geometry_type get_geometry_type() Field::geometry_type get_geometry_type() const
{ {
DBUG_ASSERT(field_type() == MYSQL_TYPE_GEOMETRY); DBUG_ASSERT(field_type() == MYSQL_TYPE_GEOMETRY);
return field->get_geometry_type(); return field->get_geometry_type();
...@@ -2808,7 +2810,7 @@ class Item_type_holder: public Item ...@@ -2808,7 +2810,7 @@ class Item_type_holder: public Item
Field *make_field_by_type(TABLE *table); Field *make_field_by_type(TABLE *table);
static uint32 display_length(Item *item); static uint32 display_length(Item *item);
static enum_field_types get_real_type(Item *); static enum_field_types get_real_type(Item *);
Field::geometry_type get_geometry_type() { return geometry_type; }; Field::geometry_type get_geometry_type() const { return geometry_type; };
}; };
......
...@@ -28,7 +28,7 @@ Field *Item_geometry_func::tmp_table_field(TABLE *t_arg) ...@@ -28,7 +28,7 @@ Field *Item_geometry_func::tmp_table_field(TABLE *t_arg)
{ {
Field *result; Field *result;
if ((result= new Field_geom(max_length, maybe_null, name, t_arg->s, if ((result= new Field_geom(max_length, maybe_null, name, t_arg->s,
(Field::geometry_type) get_geometry_type()))) get_geometry_type())))
result->init(t_arg); result->init(t_arg);
return result; return result;
} }
...@@ -41,10 +41,6 @@ void Item_geometry_func::fix_length_and_dec() ...@@ -41,10 +41,6 @@ void Item_geometry_func::fix_length_and_dec()
maybe_null= 1; maybe_null= 1;
} }
int Item_geometry_func::get_geometry_type() const
{
return (int)Field::GEOM_GEOMETRY;
}
String *Item_func_geometry_from_text::val_str(String *str) String *Item_func_geometry_from_text::val_str(String *str)
{ {
...@@ -163,9 +159,9 @@ String *Item_func_geometry_type::val_str(String *str) ...@@ -163,9 +159,9 @@ String *Item_func_geometry_type::val_str(String *str)
} }
int Item_func_envelope::get_geometry_type() const Field::geometry_type Item_func_envelope::get_geometry_type() const
{ {
return (int) Field::GEOM_POLYGON; return Field::GEOM_POLYGON;
} }
...@@ -193,9 +189,9 @@ String *Item_func_envelope::val_str(String *str) ...@@ -193,9 +189,9 @@ String *Item_func_envelope::val_str(String *str)
} }
int Item_func_centroid::get_geometry_type() const Field::geometry_type Item_func_centroid::get_geometry_type() const
{ {
return (int) Field::GEOM_POINT; return Field::GEOM_POINT;
} }
...@@ -333,9 +329,9 @@ String *Item_func_spatial_decomp_n::val_str(String *str) ...@@ -333,9 +329,9 @@ String *Item_func_spatial_decomp_n::val_str(String *str)
*/ */
int Item_func_point::get_geometry_type() const Field::geometry_type Item_func_point::get_geometry_type() const
{ {
return (int) Field::GEOM_POINT; return Field::GEOM_POINT;
} }
......
...@@ -33,7 +33,6 @@ class Item_geometry_func: public Item_str_func ...@@ -33,7 +33,6 @@ class Item_geometry_func: public Item_str_func
void fix_length_and_dec(); void fix_length_and_dec();
enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; } enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; }
Field *tmp_table_field(TABLE *t_arg); Field *tmp_table_field(TABLE *t_arg);
virtual int get_geometry_type() const;
bool is_null() { (void) val_int(); return null_value; } bool is_null() { (void) val_int(); return null_value; }
}; };
...@@ -92,7 +91,7 @@ class Item_func_centroid: public Item_geometry_func ...@@ -92,7 +91,7 @@ class Item_func_centroid: public Item_geometry_func
Item_func_centroid(Item *a): Item_geometry_func(a) {} Item_func_centroid(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "centroid"; } const char *func_name() const { return "centroid"; }
String *val_str(String *); String *val_str(String *);
int get_geometry_type() const; Field::geometry_type get_geometry_type() const;
}; };
class Item_func_envelope: public Item_geometry_func class Item_func_envelope: public Item_geometry_func
...@@ -101,7 +100,7 @@ class Item_func_envelope: public Item_geometry_func ...@@ -101,7 +100,7 @@ class Item_func_envelope: public Item_geometry_func
Item_func_envelope(Item *a): Item_geometry_func(a) {} Item_func_envelope(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "envelope"; } const char *func_name() const { return "envelope"; }
String *val_str(String *); String *val_str(String *);
int get_geometry_type() const; Field::geometry_type get_geometry_type() const;
}; };
class Item_func_point: public Item_geometry_func class Item_func_point: public Item_geometry_func
...@@ -111,7 +110,7 @@ class Item_func_point: public Item_geometry_func ...@@ -111,7 +110,7 @@ class Item_func_point: public Item_geometry_func
Item_func_point(Item *a, Item *b, Item *srid): Item_geometry_func(a, b, srid) {} Item_func_point(Item *a, Item *b, Item *srid): Item_geometry_func(a, b, srid) {}
const char *func_name() const { return "point"; } const char *func_name() const { return "point"; }
String *val_str(String *); String *val_str(String *);
int get_geometry_type() const; Field::geometry_type get_geometry_type() const;
}; };
class Item_func_spatial_decomp: public Item_geometry_func class Item_func_spatial_decomp: public Item_geometry_func
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment