mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-9234 Add Type_handler::union_element_finalize()
This commit is contained in:
@ -7890,6 +7890,19 @@ bool Type_handler_string_result::Item_eq_value(THD *thd,
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
bool Type_handler_string_result::union_element_finalize(const Item * item) const
|
||||
{
|
||||
if (item->collation.derivation == DERIVATION_NONE)
|
||||
{
|
||||
my_error(ER_CANT_AGGREGATE_NCOLLATIONS, MYF(0), "UNION");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void Type_handler_var_string::
|
||||
|
@ -3356,6 +3356,14 @@ public:
|
||||
virtual Field *make_conversion_table_field(TABLE *TABLE,
|
||||
uint metadata,
|
||||
const Field *target) const= 0;
|
||||
/*
|
||||
Performs the final data type validation for a UNION element,
|
||||
after the regular "aggregation for result" was done.
|
||||
*/
|
||||
virtual bool union_element_finalize(const Item * item) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// Automatic upgrade, e.g. for ALTER TABLE t1 FORCE
|
||||
virtual void Column_definition_implicit_upgrade(Column_definition *c) const
|
||||
{ }
|
||||
@ -4580,6 +4588,7 @@ public:
|
||||
void sortlength(THD *thd,
|
||||
const Type_std_attributes *item,
|
||||
SORT_FIELD_ATTR *attr) const;
|
||||
bool union_element_finalize(const Item * item) const;
|
||||
bool Column_definition_prepare_stage1(THD *thd,
|
||||
MEM_ROOT *mem_root,
|
||||
Column_definition *c,
|
||||
|
@ -1085,13 +1085,13 @@ cont:
|
||||
|
||||
while ((type= tp++))
|
||||
{
|
||||
if (type->cmp_type() == STRING_RESULT &&
|
||||
type->collation.derivation == DERIVATION_NONE)
|
||||
{
|
||||
my_error(ER_CANT_AGGREGATE_NCOLLATIONS, MYF(0), "UNION");
|
||||
/*
|
||||
Test if the aggregated data type is OK for a UNION element.
|
||||
E.g. in case of string data, DERIVATION_NONE is not allowed.
|
||||
*/
|
||||
if (type->type_handler()->union_element_finalize(type))
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Disable the usage of fulltext searches in the last union branch.
|
||||
|
Reference in New Issue
Block a user