mirror of
https://github.com/MariaDB/server.git
synced 2025-11-28 17:36:30 +03:00
MDEV-12559 Split Item::temporal_precision() into virtual methods in Type_handler
- Adding a new virtual method Type_handler::Item_time_precision()
- Adding a new virtual method Type_handler::Item_datetime_precision()
- Removing Item::temporal_precision() and adding Item::time_precision()
and Item::datetime_precision() instead.
- Moving Item_func_convert_tz::fix_length_and_dec() from item_timefunc.cc
to item_timefunc.h. It's only two lines, and we're changing it anyway.
- Removing Item_temporal_typecast::fix_length_and_dec_generic(),
moving this code to
Type_handler::Item_{date|time|datetime}_typecast_fix_length_and_dec().
This allows to get rid of one more field_type() call.
Also, in the old reduction, Item_date_typecast::fix_length_and_dec()
unnecessarily called args[0]->temporal_precision(). The new reduction
does not call args[0]->datetime_precision(), as DATE does not
have fractional digits.
This commit is contained in:
@@ -389,6 +389,8 @@ public:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
virtual uint Item_time_precision(Item *item) const;
|
||||
virtual uint Item_datetime_precision(Item *item) const;
|
||||
/**
|
||||
Makes a temporary table Field to handle numeric aggregate functions,
|
||||
e.g. SUM(DISTINCT expr), AVG(DISTINCT expr), etc.
|
||||
@@ -1040,6 +1042,7 @@ public:
|
||||
|
||||
class Type_handler_string_result: public Type_handler
|
||||
{
|
||||
uint Item_temporal_precision(Item *item, bool is_time) const;
|
||||
public:
|
||||
Item_result result_type() const { return STRING_RESULT; }
|
||||
Item_result cmp_type() const { return STRING_RESULT; }
|
||||
@@ -1055,6 +1058,14 @@ public:
|
||||
const Type_std_attributes *item,
|
||||
SORT_FIELD_ATTR *attr) const;
|
||||
uint32 max_display_length(const Item *item) const;
|
||||
uint Item_time_precision(Item *item) const
|
||||
{
|
||||
return Item_temporal_precision(item, true);
|
||||
}
|
||||
uint Item_datetime_precision(Item *item) const
|
||||
{
|
||||
return Item_temporal_precision(item, false);
|
||||
}
|
||||
int Item_save_in_field(Item *item, Field *field, bool no_conversions) const;
|
||||
String *print_item_value(THD *thd, Item *item, String *str) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user