mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#28763: Selecting geometry fields in UNION caused server crash.
This bug was introduced by the fix for the bug#27300. In this fix a section of code was added to the Item::tmp_table_field_from_field_type method. This section intended to create Field_geom fields for the Item_geometry_func class and its descendants. In order to get the geometry type of the current item it casted "this" to the Item_geometry_func* type. But the Item::tmp_table_field_from_field_type method is also used for creation of fields for UNION and in this case this method is called for an object of the Item_type_holder class and the cast to the Item_geometry_func* type causes a server crash. Now the Item::tmp_table_field_from_field_type method correctly works when it's called for both the Item_type_holder and the Item_geometry_func classes. The new geometry_type variable is added to the Item_type_holder class. The new method called get_geometry_type is added to the Item_field and the Field classes. It returns geometry type from the field for the Item_field and the Field_geom classes and fails an assert for other Field descendants.
This commit is contained in:
@ -360,7 +360,11 @@ public:
|
||||
{
|
||||
return field_length / charset()->mbmaxlen;
|
||||
}
|
||||
|
||||
virtual geometry_type get_geometry_type()
|
||||
{
|
||||
/* shouldn't get here. */
|
||||
DBUG_ASSERT(0);
|
||||
}
|
||||
friend bool reopen_table(THD *,struct st_table *,bool);
|
||||
friend int cre_myisam(my_string name, register TABLE *form, uint options,
|
||||
ulonglong auto_increment_value);
|
||||
@ -1325,6 +1329,7 @@ public:
|
||||
uint get_key_image(char *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; };
|
||||
};
|
||||
#endif /*HAVE_SPATIAL*/
|
||||
|
||||
|
Reference in New Issue
Block a user