Added override to all releveant methods in Item (and a few other classes)
Other things: - Remove inline and virtual for methods that are overrides - Added a 'final' to some Item classes
This commit is contained in:
parent
53b43f3078
commit
30f0a246a0
@ -24,12 +24,12 @@ class Item_func_sysconst_test :public Item_func_sysconst
|
||||
{
|
||||
public:
|
||||
Item_func_sysconst_test(THD *thd): Item_func_sysconst(thd) {}
|
||||
String *val_str(String *str)
|
||||
String *val_str(String *str) override
|
||||
{
|
||||
null_value= str->copy(STRING_WITH_LEN("sysconst_test"), system_charset_info);
|
||||
return null_value ? NULL : str;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
max_length= MAX_FIELD_NAME * system_charset_info->mbmaxlen;
|
||||
set_maybe_null();
|
||||
@ -40,8 +40,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("sysconst_test") };
|
||||
return name;
|
||||
}
|
||||
const char *fully_qualified_func_name() const { return "sysconst_test()"; }
|
||||
Item *get_copy(THD *thd)
|
||||
const char *fully_qualified_func_name() const override
|
||||
{ return "sysconst_test()"; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_sysconst_test>(thd, this); }
|
||||
};
|
||||
|
||||
|
@ -27,17 +27,17 @@
|
||||
|
||||
class Item_func_inet_aton : public Item_longlong_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{ return check_argument_types_can_return_text(0, arg_count); }
|
||||
public:
|
||||
Item_func_inet_aton(THD *thd, Item *a): Item_longlong_func(thd, a) {}
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("inet_aton") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals= 0;
|
||||
max_length= 21;
|
||||
@ -45,7 +45,7 @@ public:
|
||||
unsigned_flag= 1;
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_inet_aton>(thd, this); }
|
||||
};
|
||||
|
||||
@ -59,20 +59,20 @@ class Item_func_inet_ntoa : public Item_str_func
|
||||
public:
|
||||
Item_func_inet_ntoa(THD *thd, Item *a): Item_str_func(thd, a)
|
||||
{ }
|
||||
String* val_str(String* str);
|
||||
String *val_str(String* str) override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("inet_ntoa") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals= 0;
|
||||
fix_length_and_charset(3 * 8 + 7, default_charset());
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_inet_ntoa>(thd, this); }
|
||||
};
|
||||
|
||||
@ -111,17 +111,17 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("inet6_aton") };
|
||||
return name;
|
||||
}
|
||||
virtual bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals= 0;
|
||||
fix_length_and_charset(16, &my_charset_bin);
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_inet6_aton>(thd, this); }
|
||||
|
||||
String *val_str(String *to);
|
||||
String *val_str(String *to) override;
|
||||
};
|
||||
|
||||
|
||||
@ -143,7 +143,7 @@ public:
|
||||
return name;
|
||||
}
|
||||
|
||||
virtual bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals= 0;
|
||||
|
||||
@ -155,8 +155,8 @@ public:
|
||||
set_maybe_null();;
|
||||
return FALSE;
|
||||
}
|
||||
String *val_str_ascii(String *to);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str_ascii(String *to) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_inet6_ntoa>(thd, this); }
|
||||
};
|
||||
|
||||
@ -178,10 +178,10 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("is_ipv4") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_is_ipv4>(thd, this); }
|
||||
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
};
|
||||
|
||||
|
||||
@ -201,10 +201,10 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("is_ipv6") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_is_ipv6>(thd, this); }
|
||||
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
};
|
||||
|
||||
|
||||
@ -223,9 +223,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("is_ipv4_compat") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_is_ipv4_compat>(thd, this); }
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
};
|
||||
|
||||
|
||||
@ -244,9 +244,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("is_ipv4_mapped") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_is_ipv4_mapped>(thd, this); }
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
};
|
||||
|
||||
#endif // ITEM_INETFUNC_INCLUDED
|
||||
|
@ -1198,7 +1198,7 @@ public:
|
||||
virtual uint16 key_part_flag() const { return 0; }
|
||||
virtual uint16 key_part_length_bytes() const { return 0; }
|
||||
virtual uint32 key_length() const { return pack_length(); }
|
||||
virtual const Type_handler *type_handler() const= 0;
|
||||
virtual const Type_handler *type_handler() const = 0;
|
||||
virtual enum_field_types type() const
|
||||
{
|
||||
return type_handler()->field_type();
|
||||
@ -4155,7 +4155,7 @@ public:
|
||||
{
|
||||
return (uint32) field_length + sort_suffix_length();
|
||||
}
|
||||
virtual uint32 sort_suffix_length() const override
|
||||
uint32 sort_suffix_length() const override
|
||||
{
|
||||
return (field_charset() == &my_charset_bin ? length_bytes : 0);
|
||||
}
|
||||
@ -4505,7 +4505,7 @@ public:
|
||||
uint32 sort_length() const override;
|
||||
uint32 sort_suffix_length() const override;
|
||||
uint32 value_length() override { return get_length(); }
|
||||
virtual uint32 max_data_length() const override
|
||||
uint32 max_data_length() const override
|
||||
{
|
||||
return (uint32) (((ulonglong) 1 << (packlength*8)) -1);
|
||||
}
|
||||
|
@ -467,7 +467,7 @@ public:
|
||||
}
|
||||
Partition_share *get_part_share() { return part_share; }
|
||||
handler *clone(const char *name, MEM_ROOT *mem_root) override;
|
||||
virtual void set_part_info(partition_info *part_info) override
|
||||
void set_part_info(partition_info *part_info) override
|
||||
{
|
||||
m_part_info= part_info;
|
||||
m_is_sub_partitioned= part_info->is_sub_partitioned();
|
||||
|
110
sql/item.h
110
sql/item.h
@ -2061,7 +2061,7 @@ public:
|
||||
The process of compilation is assumed to go as follows:
|
||||
|
||||
compile()
|
||||
{
|
||||
{
|
||||
if (this->*some_analyzer(...))
|
||||
{
|
||||
compile children if any;
|
||||
@ -2213,7 +2213,7 @@ public:
|
||||
assumes that there are no multi-byte collations amongst the partition
|
||||
fields.
|
||||
*/
|
||||
virtual bool check_partition_func_processor(void *arg) { return 1;}
|
||||
virtual bool check_partition_func_processor(void *arg) { return true; }
|
||||
virtual bool post_fix_fields_part_expr_processor(void *arg) { return 0; }
|
||||
virtual bool rename_fields_processor(void *arg) { return 0; }
|
||||
/*
|
||||
@ -2599,7 +2599,7 @@ public:
|
||||
int get_extraction_flag()
|
||||
{ return marker & EXTRACTION_MASK; }
|
||||
void set_extraction_flag(int16 flags)
|
||||
{
|
||||
{
|
||||
marker &= ~EXTRACTION_MASK;
|
||||
marker|= flags;
|
||||
}
|
||||
@ -2988,7 +2988,6 @@ public:
|
||||
|
||||
public:
|
||||
bool fix_fields(THD *thd, Item **) override= 0;
|
||||
|
||||
double val_real() override;
|
||||
longlong val_int() override;
|
||||
String *val_str(String *sp) override;
|
||||
@ -2999,9 +2998,7 @@ public:
|
||||
|
||||
public:
|
||||
void make_send_field(THD *thd, Send_field *field) override;
|
||||
|
||||
bool const_item() const override { return true; }
|
||||
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root,
|
||||
TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param) override
|
||||
@ -3303,7 +3300,7 @@ public:
|
||||
}
|
||||
int save_in_field(Field *field, bool no_conversions) override
|
||||
{
|
||||
return value_item->save_in_field(field, no_conversions);
|
||||
return value_item->save_in_field(field, no_conversions);
|
||||
}
|
||||
|
||||
bool send(Protocol *protocol, st_value *buffer) override
|
||||
@ -3849,7 +3846,7 @@ public:
|
||||
{
|
||||
save_in_field(result_field, no_conversions);
|
||||
}
|
||||
bool check_partition_func_processor(void *) override { return true; }
|
||||
bool check_partition_func_processor(void *int_arg) override { return true; }
|
||||
bool check_vcol_func_processor(void *arg) override
|
||||
{
|
||||
return mark_unsupported_function(full_name(), arg, VCOL_IMPOSSIBLE);
|
||||
@ -4263,23 +4260,18 @@ public:
|
||||
bool append_for_log(THD *thd, String *str) override;
|
||||
bool check_vcol_func_processor(void *) override { return false; }
|
||||
Item *get_copy(THD *) override { return nullptr; }
|
||||
|
||||
bool add_as_clone(THD *thd);
|
||||
void sync_clones();
|
||||
bool register_clone(Item_param *i) { return m_clones.push_back(i); }
|
||||
|
||||
private:
|
||||
void invalid_default_param() const;
|
||||
|
||||
bool set_value(THD *thd, sp_rcontext *ctx, Item **it) override;
|
||||
|
||||
void set_out_param_info(Send_field *info) override;
|
||||
|
||||
public:
|
||||
const Send_field *get_out_param_info() const override;
|
||||
|
||||
Item_param *get_item_param() override { return this; }
|
||||
|
||||
void make_send_field(THD *thd, Send_field *field) override;
|
||||
|
||||
private:
|
||||
@ -4397,12 +4389,12 @@ public:
|
||||
Item_uint(THD *thd, const char *str_arg, size_t length);
|
||||
Item_uint(THD *thd, ulonglong i): Item_int(thd, i, 10) {}
|
||||
Item_uint(THD *thd, const char *str_arg, longlong i, uint length);
|
||||
double val_real() { return ulonglong2double((ulonglong)value); }
|
||||
Item *clone_item(THD *thd);
|
||||
Item *neg(THD *thd);
|
||||
double val_real() override { return ulonglong2double((ulonglong)value); }
|
||||
Item *clone_item(THD *thd) override;
|
||||
Item *neg(THD *thd) override;
|
||||
decimal_digits_t decimal_precision() const override
|
||||
{ return decimal_digits_t(max_length); }
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_uint>(thd, this); }
|
||||
};
|
||||
|
||||
@ -4444,9 +4436,12 @@ public:
|
||||
{ return &type_handler_newdecimal; }
|
||||
longlong val_int() override
|
||||
{ return decimal_value.to_longlong(unsigned_flag); }
|
||||
double val_real() override { return decimal_value.to_double(); }
|
||||
String *val_str(String *to) override { return decimal_value.to_string(to); }
|
||||
my_decimal *val_decimal(my_decimal *val) override { return &decimal_value; }
|
||||
double val_real() override
|
||||
{ return decimal_value.to_double(); }
|
||||
String *val_str(String *to) override
|
||||
{ return decimal_value.to_string(to); }
|
||||
my_decimal *val_decimal(my_decimal *val) override
|
||||
{ return &decimal_value; }
|
||||
const my_decimal *const_ptr_my_decimal() const override
|
||||
{ return &decimal_value; }
|
||||
int save_in_field(Field *field, bool no_conversions) override;
|
||||
@ -4519,12 +4514,10 @@ public:
|
||||
uint decimal_par, uint length):
|
||||
Item_float(thd, NullS, val_arg, decimal_par, length), func_name(str)
|
||||
{}
|
||||
|
||||
void print(String *str, enum_query_type) override
|
||||
{
|
||||
str->append(func_name, strlen(func_name));
|
||||
}
|
||||
|
||||
Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs) override
|
||||
{
|
||||
return const_charset_converter(thd, tocs, true, func_name);
|
||||
@ -4665,8 +4658,7 @@ public:
|
||||
{ return Item::check_well_formed_result(&str_value, send_error); }
|
||||
|
||||
Item_basic_constant *make_string_literal_concat(THD *thd,
|
||||
const LEX_CSTRING *)
|
||||
override;
|
||||
const LEX_CSTRING *) override;
|
||||
Item *make_odbc_literal(THD *thd, const LEX_CSTRING *typestr) override;
|
||||
|
||||
Item *get_copy(THD *thd) override
|
||||
@ -4804,7 +4796,7 @@ public:
|
||||
{
|
||||
unsigned_flag=1;
|
||||
}
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
const Type_handler *h=
|
||||
Type_handler::get_handler_by_field_type(int_field_type);
|
||||
@ -4830,14 +4822,15 @@ public:
|
||||
{
|
||||
hex_string_init(thd, str, str_length);
|
||||
}
|
||||
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
||||
virtual Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_varchar; }
|
||||
Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs) override
|
||||
{
|
||||
return const_charset_converter(thd, tocs, true);
|
||||
}
|
||||
const String *const_ptr_string() const { return &str_value; }
|
||||
String *val_str(String*) { return &str_value; }
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
const String *const_ptr_string() const override { return &str_value; }
|
||||
String *val_str(String*) override { return &str_value; }
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return type_handler()->Item_get_date_with_warn(thd, this, ltime, fuzzydate);
|
||||
}
|
||||
@ -4859,7 +4852,7 @@ public:
|
||||
{ return &type_handler_hex_hybrid; }
|
||||
decimal_digits_t decimal_precision() const override;
|
||||
double val_real() override
|
||||
{
|
||||
{
|
||||
return (double) (ulonglong) Item_hex_hybrid::val_int();
|
||||
}
|
||||
longlong val_int() override
|
||||
@ -5071,7 +5064,7 @@ public:
|
||||
/**
|
||||
TIME'10:10:10'
|
||||
*/
|
||||
class Item_time_literal: public Item_temporal_literal
|
||||
class Item_time_literal final: public Item_temporal_literal
|
||||
{
|
||||
protected:
|
||||
Time cached_time;
|
||||
@ -5114,6 +5107,7 @@ public:
|
||||
/**
|
||||
TIMESTAMP'2001-01-01 10:20:30'
|
||||
*/
|
||||
|
||||
class Item_datetime_literal: public Item_temporal_literal
|
||||
{
|
||||
protected:
|
||||
@ -5180,7 +5174,7 @@ class Item_date_literal_for_invalid_dates: public Item_date_literal
|
||||
WHERE date_column='2001-01-01' ... ->
|
||||
WHERE date_column=DATE'2001-01-01' ...
|
||||
|
||||
This is done to make the eqial field propagation code handle mixtures of
|
||||
This is done to make the equal field propagation code handle mixtures of
|
||||
different temporal types in the same expressions easier (MDEV-8706), e.g.
|
||||
WHERE LENGTH(date_column)=10 AND date_column=TIME'00:00:00'
|
||||
|
||||
@ -5215,7 +5209,7 @@ public:
|
||||
An error-safe counterpart for Item_datetime_literal
|
||||
(see Item_date_literal_for_invalid_dates for comments)
|
||||
*/
|
||||
class Item_datetime_literal_for_invalid_dates: public Item_datetime_literal
|
||||
class Item_datetime_literal_for_invalid_dates final: public Item_datetime_literal
|
||||
{
|
||||
public:
|
||||
Item_datetime_literal_for_invalid_dates(THD *thd,
|
||||
@ -5501,7 +5495,7 @@ public:
|
||||
enum Type type() const override { return REF_ITEM; }
|
||||
enum Type real_type() const override
|
||||
{ return ref ? (*ref)->type() : REF_ITEM; }
|
||||
bool eq(const Item *item, bool binary_cmp) const
|
||||
bool eq(const Item *item, bool binary_cmp) const override
|
||||
{
|
||||
Item *it= ((Item *) item)->real_item();
|
||||
return ref && (*ref)->eq(it, binary_cmp);
|
||||
@ -5563,7 +5557,10 @@ public:
|
||||
return Item_ident::build_equal_items(thd, inherited, link_item_fields,
|
||||
cond_equal_ref);
|
||||
}
|
||||
bool const_item() const override { return (*ref)->const_item(); }
|
||||
bool const_item() const override
|
||||
{
|
||||
return (*ref)->const_item();
|
||||
}
|
||||
table_map not_null_tables() const override
|
||||
{
|
||||
return depended_from ? 0 : (*ref)->not_null_tables();
|
||||
@ -5576,7 +5573,10 @@ public:
|
||||
{
|
||||
(*ref)->save_in_field(result_field, no_conversions);
|
||||
}
|
||||
Item *real_item() override { return ref ? (*ref)->real_item() : this; }
|
||||
Item *real_item() override
|
||||
{
|
||||
return ref ? (*ref)->real_item() : this;
|
||||
}
|
||||
const TYPELIB *get_typelib() const override
|
||||
{
|
||||
return ref ? (*ref)->get_typelib() : NULL;
|
||||
@ -5611,7 +5611,7 @@ public:
|
||||
}
|
||||
void cleanup() override;
|
||||
Item_field *field_for_view_update() override
|
||||
{ return (*ref)->field_for_view_update(); }
|
||||
{ return (*ref)->field_for_view_update(); }
|
||||
Load_data_outvar *get_load_data_outvar() override
|
||||
{
|
||||
return (*ref)->get_load_data_outvar();
|
||||
@ -5821,13 +5821,10 @@ public:
|
||||
|
||||
Type type() const override { return EXPR_CACHE_ITEM; }
|
||||
Type real_type() const override { return orig_item->type(); }
|
||||
|
||||
bool set_cache(THD *thd);
|
||||
Expression_cache_tracker* init_tracker(MEM_ROOT *mem_root);
|
||||
|
||||
bool fix_fields(THD *thd, Item **it) override;
|
||||
void cleanup() override;
|
||||
|
||||
Item *get_orig_item() const { return orig_item; }
|
||||
|
||||
/* Methods of getting value which should be cached in the cache */
|
||||
@ -5868,8 +5865,12 @@ public:
|
||||
int save_in_field(Field *to, bool no_conversions) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return orig_item->type_handler(); }
|
||||
table_map used_tables() const override { return orig_item->used_tables(); }
|
||||
void update_used_tables() override { orig_item->update_used_tables(); }
|
||||
table_map used_tables() const override
|
||||
{ return orig_item->used_tables(); }
|
||||
void update_used_tables() override
|
||||
{
|
||||
orig_item->update_used_tables();
|
||||
}
|
||||
bool const_item() const override { return orig_item->const_item(); }
|
||||
table_map not_null_tables() const override
|
||||
{ return orig_item->not_null_tables(); }
|
||||
@ -5979,7 +5980,7 @@ public:
|
||||
table_map used_tables() const override;
|
||||
void update_used_tables() override;
|
||||
table_map not_null_tables() const override;
|
||||
bool const_item() const override { return used_tables() == 0; }
|
||||
bool const_item() const override{ return used_tables() == 0; }
|
||||
TABLE *get_null_ref_table() const { return null_ref_table; }
|
||||
bool walk(Item_processor processor, bool walk_subquery, void *arg) override
|
||||
{
|
||||
@ -6344,7 +6345,6 @@ public:
|
||||
Override the methods below as pure virtual to make sure all the
|
||||
sub-classes implement them.
|
||||
*/
|
||||
|
||||
String *val_str(String*) override = 0;
|
||||
my_decimal *val_decimal(my_decimal *) override = 0;
|
||||
double val_real() override = 0;
|
||||
@ -6610,13 +6610,11 @@ public:
|
||||
Item_field *field_for_view_update() override { return nullptr; }
|
||||
bool update_vcol_processor(void *) override { return false; }
|
||||
bool check_func_default_processor(void *) override { return true; }
|
||||
|
||||
bool walk(Item_processor processor, bool walk_subquery, void *args) override
|
||||
{
|
||||
return (arg && arg->walk(processor, walk_subquery, args)) ||
|
||||
(this->*processor)(args);
|
||||
}
|
||||
|
||||
Item *transform(THD *thd, Item_transformer transformer, uchar *args)
|
||||
override;
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
@ -6970,7 +6968,7 @@ public:
|
||||
virtual void keep_array() {}
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
bool eq_def(const Field *field)
|
||||
{
|
||||
{
|
||||
return cached_field ? cached_field->eq_def (field) : FALSE;
|
||||
}
|
||||
bool eq(const Item *item, bool binary_cmp) const override
|
||||
@ -6981,7 +6979,8 @@ public:
|
||||
{
|
||||
if (example)
|
||||
{
|
||||
Item::vcol_func_processor_result *res= (Item::vcol_func_processor_result*)arg;
|
||||
Item::vcol_func_processor_result *res=
|
||||
(Item::vcol_func_processor_result*) arg;
|
||||
example->check_vcol_func_processor(arg);
|
||||
/*
|
||||
Item_cache of a non-deterministic function requires re-fixing
|
||||
@ -7293,8 +7292,8 @@ public:
|
||||
Item_cache_double(THD *thd)
|
||||
:Item_cache_real(thd, &type_handler_double)
|
||||
{ }
|
||||
String* val_str(String *str);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *str) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_cache_double>(thd, this); }
|
||||
};
|
||||
|
||||
@ -7305,8 +7304,8 @@ public:
|
||||
Item_cache_float(THD *thd)
|
||||
:Item_cache_real(thd, &type_handler_float)
|
||||
{ }
|
||||
String* val_str(String *str);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *str) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_cache_float>(thd, this); }
|
||||
};
|
||||
|
||||
@ -7370,7 +7369,7 @@ public:
|
||||
Item_cache_str_for_nullif(THD *thd, const Item *item)
|
||||
:Item_cache_str(thd, item)
|
||||
{ }
|
||||
Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs)
|
||||
Item *safe_charset_converter(THD *thd, CHARSET_INFO *tocs) override
|
||||
{
|
||||
/**
|
||||
Item_cache_str::safe_charset_converter() returns a new Item_cache
|
||||
@ -7384,7 +7383,7 @@ public:
|
||||
*/
|
||||
return Item::safe_charset_converter(thd, tocs);
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_cache_str_for_nullif>(thd, this); }
|
||||
};
|
||||
|
||||
@ -7537,7 +7536,6 @@ public:
|
||||
*this, table);
|
||||
}
|
||||
Item* get_copy(THD *) override { return nullptr; }
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
1145
sql/item_func.h
1145
sql/item_func.h
File diff suppressed because it is too large
Load Diff
@ -42,8 +42,9 @@ public:
|
||||
Item_geometry_func(THD *thd, Item *a, Item *b, Item *c):
|
||||
Item_str_func(thd, a, b, c) {}
|
||||
Item_geometry_func(THD *thd, List<Item> &list): Item_str_func(thd, list) {}
|
||||
bool fix_length_and_dec();
|
||||
const Type_handler *type_handler() const { return &type_handler_geometry; }
|
||||
bool fix_length_and_dec() override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_geometry; }
|
||||
};
|
||||
|
||||
|
||||
@ -54,7 +55,7 @@ class Item_real_func_args_geometry: public Item_real_func
|
||||
{
|
||||
protected:
|
||||
String value;
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count == 1);
|
||||
return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(),
|
||||
@ -71,7 +72,7 @@ public:
|
||||
*/
|
||||
class Item_long_func_args_geometry: public Item_long_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count == 1);
|
||||
return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(),
|
||||
@ -92,7 +93,7 @@ class Item_bool_func_args_geometry: public Item_bool_func
|
||||
{
|
||||
protected:
|
||||
String value;
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count == 1);
|
||||
return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(),
|
||||
@ -110,7 +111,7 @@ public:
|
||||
class Item_str_ascii_func_args_geometry: public Item_str_ascii_func
|
||||
{
|
||||
protected:
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 1);
|
||||
return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(),
|
||||
@ -132,7 +133,7 @@ public:
|
||||
class Item_binary_func_args_geometry: public Item_str_func
|
||||
{
|
||||
protected:
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 1);
|
||||
return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(),
|
||||
@ -150,7 +151,7 @@ public:
|
||||
class Item_geometry_func_args_geometry: public Item_geometry_func
|
||||
{
|
||||
protected:
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 1);
|
||||
return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(),
|
||||
@ -170,7 +171,7 @@ public:
|
||||
class Item_real_func_args_geometry_geometry: public Item_real_func
|
||||
{
|
||||
protected:
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 2);
|
||||
return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(),
|
||||
@ -189,7 +190,7 @@ class Item_bool_func_args_geometry_geometry: public Item_bool_func
|
||||
{
|
||||
protected:
|
||||
String value;
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 2);
|
||||
return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(),
|
||||
@ -203,7 +204,7 @@ public:
|
||||
|
||||
class Item_func_geometry_from_text: public Item_geometry_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return args[0]->check_type_general_purpose_string(func_name_cstring()) ||
|
||||
check_argument_types_can_return_int(1, MY_MIN(2, arg_count));
|
||||
@ -217,14 +218,14 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_geometryfromtext") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_geometry_from_text>(thd, this); }
|
||||
};
|
||||
|
||||
class Item_func_geometry_from_wkb: public Item_geometry_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return
|
||||
Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]) ||
|
||||
@ -239,8 +240,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_geometryfromwkb") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_geometry_from_wkb>(thd, this); }
|
||||
};
|
||||
|
||||
@ -248,7 +249,7 @@ public:
|
||||
class Item_func_geometry_from_json: public Item_geometry_func
|
||||
{
|
||||
String tmp_js;
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
// TODO: check with Alexey, for better args[1] and args[2] type control
|
||||
return args[0]->check_type_general_purpose_string(func_name_cstring()) ||
|
||||
@ -265,8 +266,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_geomfromgeojson") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_geometry_from_json>(thd, this); }
|
||||
};
|
||||
|
||||
@ -281,9 +282,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_astext") };
|
||||
return name;
|
||||
}
|
||||
String *val_str_ascii(String *);
|
||||
bool fix_length_and_dec();
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str_ascii(String *) override;
|
||||
bool fix_length_and_dec() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_as_wkt>(thd, this); }
|
||||
};
|
||||
|
||||
@ -297,9 +298,10 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_aswkb") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
const Type_handler *type_handler() const { return &type_handler_long_blob; }
|
||||
bool fix_length_and_dec()
|
||||
String *val_str(String *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_long_blob; }
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
collation.set(&my_charset_bin);
|
||||
decimals=0;
|
||||
@ -307,14 +309,14 @@ public:
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_as_wkb>(thd, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_func_as_geojson: public Item_str_ascii_func_args_geometry
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
// TODO: check with Alexey, for better args[1] and args[2] type control
|
||||
return Item_str_ascii_func_args_geometry::check_arguments() ||
|
||||
@ -332,9 +334,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_asgeojson") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str_ascii(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str_ascii(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_as_geojson>(thd, this); }
|
||||
};
|
||||
|
||||
@ -344,20 +346,20 @@ class Item_func_geometry_type: public Item_str_ascii_func_args_geometry
|
||||
public:
|
||||
Item_func_geometry_type(THD *thd, Item *a)
|
||||
:Item_str_ascii_func_args_geometry(thd, a) {}
|
||||
String *val_str_ascii(String *);
|
||||
String *val_str_ascii(String *) override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_geometrytype") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
// "GeometryCollection" is the longest
|
||||
fix_length_and_charset(20, default_charset());
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
};
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_geometry_type>(thd, this); }
|
||||
};
|
||||
|
||||
@ -395,8 +397,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_convexhull") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_convexhull>(thd, this); }
|
||||
};
|
||||
|
||||
@ -411,12 +413,12 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_centroid") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
const Type_handler *type_handler() const
|
||||
String *val_str(String *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_point;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_centroid>(thd, this); }
|
||||
};
|
||||
|
||||
@ -430,12 +432,12 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_envelope") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
const Type_handler *type_handler() const
|
||||
String *val_str(String *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_polygon;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_envelope>(thd, this); }
|
||||
};
|
||||
|
||||
@ -472,15 +474,15 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_boundary") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_boundary>(thd, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_func_point: public Item_geometry_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{ return check_argument_types_can_return_real(0, 2); }
|
||||
public:
|
||||
Item_func_point(THD *thd, Item *a, Item *b): Item_geometry_func(thd, a, b) {}
|
||||
@ -491,12 +493,12 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("point") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
const Type_handler *type_handler() const
|
||||
String *val_str(String *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_point;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_point>(thd, this); }
|
||||
};
|
||||
|
||||
@ -524,15 +526,15 @@ public:
|
||||
return unknown;
|
||||
}
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_spatial_decomp>(thd, this); }
|
||||
};
|
||||
|
||||
class Item_func_spatial_decomp_n: public Item_geometry_func_args_geometry
|
||||
{
|
||||
enum Functype decomp_func_n;
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return Item_geometry_func_args_geometry::check_arguments() ||
|
||||
args[1]->check_type_can_return_int(func_name_cstring());
|
||||
@ -561,14 +563,14 @@ public:
|
||||
return unknown;
|
||||
}
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_spatial_decomp_n>(thd, this); }
|
||||
};
|
||||
|
||||
class Item_func_spatial_collection: public Item_geometry_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(), args,
|
||||
0, arg_count);
|
||||
@ -583,8 +585,8 @@ public:
|
||||
coll_type=ct;
|
||||
item_type=it;
|
||||
}
|
||||
String *val_str(String *);
|
||||
bool fix_length_and_dec()
|
||||
String *val_str(String *) override;
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (Item_geometry_func::fix_length_and_dec())
|
||||
return TRUE;
|
||||
@ -613,7 +615,7 @@ public:
|
||||
Geometry::wkb_geometrycollection,
|
||||
Geometry::wkb_point)
|
||||
{ }
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_geometrycollection;
|
||||
}
|
||||
@ -622,7 +624,7 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("geometrycollection") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_geometrycollection>(thd, this); }
|
||||
};
|
||||
|
||||
@ -635,13 +637,14 @@ public:
|
||||
Geometry::wkb_linestring,
|
||||
Geometry::wkb_point)
|
||||
{ }
|
||||
const Type_handler *type_handler() const { return &type_handler_linestring; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_linestring; }
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("linestring") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_linestring>(thd, this); }
|
||||
};
|
||||
|
||||
@ -654,13 +657,14 @@ public:
|
||||
Geometry::wkb_polygon,
|
||||
Geometry::wkb_linestring)
|
||||
{ }
|
||||
const Type_handler *type_handler() const { return &type_handler_polygon; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_polygon; }
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("polygon") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_polygon>(thd, this); }
|
||||
};
|
||||
|
||||
@ -673,7 +677,7 @@ public:
|
||||
Geometry::wkb_multilinestring,
|
||||
Geometry::wkb_linestring)
|
||||
{ }
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_multilinestring;
|
||||
}
|
||||
@ -682,7 +686,7 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("multilinestring") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_multilinestring>(thd, this); }
|
||||
};
|
||||
|
||||
@ -695,7 +699,7 @@ public:
|
||||
Geometry::wkb_multipoint,
|
||||
Geometry::wkb_point)
|
||||
{ }
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_multipoint;
|
||||
}
|
||||
@ -704,7 +708,7 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("multipoint") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_multipoint>(thd, this); }
|
||||
};
|
||||
|
||||
@ -717,7 +721,7 @@ public:
|
||||
Geometry::wkb_multipolygon,
|
||||
Geometry::wkb_polygon)
|
||||
{ }
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_multipolygon;
|
||||
}
|
||||
@ -726,7 +730,7 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("multipolygon") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_multipolygon>(thd, this); }
|
||||
};
|
||||
|
||||
@ -743,8 +747,8 @@ protected:
|
||||
String tmp_value1, tmp_value2;
|
||||
SEL_ARG *get_mm_leaf(RANGE_OPT_PARAM *param, Field *field,
|
||||
KEY_PART *key_part,
|
||||
Item_func::Functype type, Item *value);
|
||||
bool check_arguments() const
|
||||
Item_func::Functype type, Item *value) override;
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 2);
|
||||
return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(),
|
||||
@ -756,8 +760,8 @@ public:
|
||||
{
|
||||
set_maybe_null();
|
||||
}
|
||||
enum Functype functype() const { return spatial_rel; }
|
||||
enum Functype rev_functype() const
|
||||
enum Functype functype() const override { return spatial_rel; }
|
||||
enum Functype rev_functype() const override
|
||||
{
|
||||
switch (spatial_rel)
|
||||
{
|
||||
@ -769,16 +773,16 @@ public:
|
||||
return spatial_rel;
|
||||
}
|
||||
}
|
||||
bool is_null() { (void) val_int(); return null_value; }
|
||||
bool is_null() override { (void) val_int(); return null_value; }
|
||||
void add_key_fields(JOIN *join, KEY_FIELD **key_fields,
|
||||
uint *and_level, table_map usable_tables,
|
||||
SARGABLE_PARAM **sargables)
|
||||
SARGABLE_PARAM **sargables) override
|
||||
{
|
||||
return add_key_fields_optimize_op(join, key_fields, and_level,
|
||||
usable_tables, sargables, false);
|
||||
}
|
||||
bool need_parentheses_in_default() { return false; }
|
||||
Item *build_clone(THD *thd) { return 0; }
|
||||
bool need_parentheses_in_default() override { return false; }
|
||||
Item *build_clone(THD *thd) override { return 0; }
|
||||
};
|
||||
|
||||
|
||||
@ -788,9 +792,9 @@ public:
|
||||
Item_func_spatial_mbr_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel):
|
||||
Item_func_spatial_rel(thd, a, b, sp_rel)
|
||||
{ }
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override;
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_spatial_mbr_rel>(thd, this); }
|
||||
};
|
||||
|
||||
@ -804,9 +808,9 @@ public:
|
||||
Item_func_spatial_precise_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel):
|
||||
Item_func_spatial_rel(thd, a, b, sp_rel), collector()
|
||||
{ }
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override;
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_spatial_precise_rel>(thd, this); }
|
||||
};
|
||||
|
||||
@ -817,7 +821,7 @@ class Item_func_spatial_relate: public Item_bool_func_args_geometry_geometry
|
||||
Gcalc_scan_iterator scan_it;
|
||||
Gcalc_function func;
|
||||
String tmp_value1, tmp_value2, tmp_matrix;
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return Item_bool_func_args_geometry_geometry::check_arguments() ||
|
||||
args[2]->check_type_general_purpose_string(func_name_cstring());
|
||||
@ -826,14 +830,14 @@ public:
|
||||
Item_func_spatial_relate(THD *thd, Item *a, Item *b, Item *matrix):
|
||||
Item_bool_func_args_geometry_geometry(thd, a, b, matrix)
|
||||
{ }
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_relate") };
|
||||
return name;
|
||||
}
|
||||
bool need_parentheses_in_default() { return false; }
|
||||
Item *get_copy(THD *thd)
|
||||
bool need_parentheses_in_default() override { return false; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_spatial_relate>(thd, this); }
|
||||
};
|
||||
|
||||
@ -842,9 +846,9 @@ public:
|
||||
Spatial operations
|
||||
*/
|
||||
|
||||
class Item_func_spatial_operation: public Item_geometry_func
|
||||
class Item_func_spatial_operation final: public Item_geometry_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
DBUG_ASSERT(arg_count >= 2);
|
||||
return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(),
|
||||
@ -864,20 +868,20 @@ public:
|
||||
Item_geometry_func(thd, a, b), spatial_op(sp_op)
|
||||
{}
|
||||
virtual ~Item_func_spatial_operation();
|
||||
String *val_str(String *);
|
||||
String *val_str(String *) override;
|
||||
LEX_CSTRING func_name_cstring() const override;
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
void print(String *str, enum_query_type query_type) override
|
||||
{
|
||||
Item_func::print(str, query_type);
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_spatial_operation>(thd, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_func_buffer: public Item_geometry_func_args_geometry
|
||||
class Item_func_buffer final : public Item_geometry_func_args_geometry
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return Item_geometry_func_args_geometry::check_arguments() ||
|
||||
args[1]->check_type_can_return_real(func_name_cstring());
|
||||
@ -930,8 +934,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_buffer") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_buffer>(thd, this); }
|
||||
};
|
||||
|
||||
@ -963,15 +967,15 @@ class Item_func_issimple: public Item_long_func_args_geometry
|
||||
public:
|
||||
Item_func_issimple(THD *thd, Item *a)
|
||||
:Item_long_func_args_geometry(thd, a) {}
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_issimple") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec() { decimals=0; max_length=2; return FALSE; }
|
||||
bool fix_length_and_dec() override { decimals=0; max_length=2; return FALSE; }
|
||||
decimal_digits_t decimal_precision() const override { return 1; }
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_issimple>(thd, this); }
|
||||
};
|
||||
|
||||
@ -980,15 +984,15 @@ class Item_func_isclosed: public Item_long_func_args_geometry
|
||||
public:
|
||||
Item_func_isclosed(THD *thd, Item *a)
|
||||
:Item_long_func_args_geometry(thd, a) {}
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_isclosed") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec() { decimals=0; max_length=2; return FALSE; }
|
||||
bool fix_length_and_dec() override { decimals=0; max_length=2; return FALSE; }
|
||||
decimal_digits_t decimal_precision() const override { return 1; }
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_isclosed>(thd, this); }
|
||||
};
|
||||
|
||||
@ -996,13 +1000,13 @@ class Item_func_isring: public Item_func_issimple
|
||||
{
|
||||
public:
|
||||
Item_func_isring(THD *thd, Item *a): Item_func_issimple(thd, a) {}
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_isring") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_isring>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1028,20 +1032,20 @@ class Item_func_x: public Item_real_func_args_geometry
|
||||
{
|
||||
public:
|
||||
Item_func_x(THD *thd, Item *a): Item_real_func_args_geometry(thd, a) {}
|
||||
double val_real();
|
||||
double val_real() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_x") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (Item_real_func::fix_length_and_dec())
|
||||
return TRUE;
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_x>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1050,20 +1054,20 @@ class Item_func_y: public Item_real_func_args_geometry
|
||||
{
|
||||
public:
|
||||
Item_func_y(THD *thd, Item *a): Item_real_func_args_geometry(thd, a) {}
|
||||
double val_real();
|
||||
double val_real() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_y") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (Item_real_func::fix_length_and_dec())
|
||||
return TRUE;
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_y>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1126,20 +1130,20 @@ class Item_func_area: public Item_real_func_args_geometry
|
||||
{
|
||||
public:
|
||||
Item_func_area(THD *thd, Item *a): Item_real_func_args_geometry(thd, a) {}
|
||||
double val_real();
|
||||
double val_real() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_area") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (Item_real_func::fix_length_and_dec())
|
||||
return TRUE;
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_area>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1150,20 +1154,20 @@ class Item_func_glength: public Item_real_func_args_geometry
|
||||
public:
|
||||
Item_func_glength(THD *thd, Item *a)
|
||||
:Item_real_func_args_geometry(thd, a) {}
|
||||
double val_real();
|
||||
double val_real() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_length") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (Item_real_func::fix_length_and_dec())
|
||||
return TRUE;
|
||||
set_maybe_null();
|
||||
return FALSE;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_glength>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1196,13 +1200,13 @@ class Item_func_distance: public Item_real_func_args_geometry_geometry
|
||||
public:
|
||||
Item_func_distance(THD *thd, Item *a, Item *b)
|
||||
:Item_real_func_args_geometry_geometry(thd, a, b) {}
|
||||
double val_real();
|
||||
double val_real() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_distance") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_distance>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1214,13 +1218,13 @@ class Item_func_sphere_distance: public Item_real_func
|
||||
public:
|
||||
Item_func_sphere_distance(THD *thd, List<Item> &list):
|
||||
Item_real_func(thd, list) {}
|
||||
double val_real();
|
||||
double val_real() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_distance_sphere") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_sphere_distance>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1239,12 +1243,12 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_pointonsurface") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
const Type_handler *type_handler() const
|
||||
String *val_str(String *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_point;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_pointonsurface>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1255,18 +1259,18 @@ class Item_func_gis_debug: public Item_long_func
|
||||
public:
|
||||
Item_func_gis_debug(THD *thd, Item *a): Item_long_func(thd, a)
|
||||
{ null_value= false; }
|
||||
bool fix_length_and_dec() { fix_char_length(10); return FALSE; }
|
||||
bool fix_length_and_dec() override { fix_char_length(10); return FALSE; }
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_gis_debug") };
|
||||
return name;
|
||||
}
|
||||
longlong val_int();
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
longlong val_int() override;
|
||||
bool check_vcol_func_processor(void *arg) override
|
||||
{
|
||||
return mark_unsupported_function(func_name(), "()", arg, VCOL_IMPOSSIBLE);
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_gis_debug>(thd, this); }
|
||||
};
|
||||
#endif
|
||||
|
@ -82,13 +82,13 @@ protected:
|
||||
|
||||
public:
|
||||
Item_func_json_valid(THD *thd, Item *json) : Item_bool_func(thd, json) {}
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_valid") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (Item_bool_func::fix_length_and_dec())
|
||||
return TRUE;
|
||||
@ -96,13 +96,14 @@ public:
|
||||
return FALSE;
|
||||
}
|
||||
bool set_format_by_check_constraint(Send_field_extended_metadata *to) const
|
||||
override
|
||||
{
|
||||
static const Lex_cstring fmt(STRING_WITH_LEN("json"));
|
||||
return to->set_format_name(fmt);
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_valid>(thd, this); }
|
||||
enum Functype functype() const { return JSON_VALID_FUNC; }
|
||||
enum Functype functype() const override { return JSON_VALID_FUNC; }
|
||||
};
|
||||
|
||||
|
||||
@ -120,10 +121,10 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_exists") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_exists>(thd, this); }
|
||||
longlong val_int();
|
||||
longlong val_int() override;
|
||||
};
|
||||
|
||||
|
||||
@ -217,9 +218,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_quote") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_quote>(thd, this); }
|
||||
};
|
||||
|
||||
@ -236,9 +237,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_unquote") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_unquote>(thd, this); }
|
||||
};
|
||||
|
||||
@ -271,14 +272,14 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_extract") };
|
||||
return name;
|
||||
}
|
||||
enum Functype functype() const { return JSON_EXTRACT_FUNC; }
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
longlong val_int();
|
||||
double val_real();
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
uint get_n_paths() const { return arg_count - 1; }
|
||||
Item *get_copy(THD *thd)
|
||||
enum Functype functype() const override { return JSON_EXTRACT_FUNC; }
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
longlong val_int() override;
|
||||
double val_real() override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
uint get_n_paths() const override { return arg_count - 1; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_extract>(thd, this); }
|
||||
};
|
||||
|
||||
@ -299,9 +300,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_contains") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
longlong val_int();
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
longlong val_int() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_contains>(thd, this); }
|
||||
};
|
||||
|
||||
@ -324,11 +325,11 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_contains_path") };
|
||||
return name;
|
||||
}
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_length_and_dec();
|
||||
void cleanup();
|
||||
longlong val_int();
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
bool fix_length_and_dec() override;
|
||||
void cleanup() override;
|
||||
longlong val_int() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_contains_path>(thd, this); }
|
||||
};
|
||||
|
||||
@ -343,14 +344,14 @@ public:
|
||||
Item_json_func(thd) {}
|
||||
Item_func_json_array(THD *thd, List<Item> &list):
|
||||
Item_json_func(thd, list) {}
|
||||
String *val_str(String *);
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *) override;
|
||||
bool fix_length_and_dec() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_array") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_array>(thd, this); }
|
||||
};
|
||||
|
||||
@ -363,15 +364,15 @@ protected:
|
||||
public:
|
||||
Item_func_json_array_append(THD *thd, List<Item> &list):
|
||||
Item_json_str_multipath(thd, list) {}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
uint get_n_paths() const { return arg_count/2; }
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
uint get_n_paths() const override { return arg_count/2; }
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_array_append") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_array_append>(thd, this); }
|
||||
};
|
||||
|
||||
@ -381,13 +382,13 @@ class Item_func_json_array_insert: public Item_func_json_array_append
|
||||
public:
|
||||
Item_func_json_array_insert(THD *thd, List<Item> &list):
|
||||
Item_func_json_array_append(thd, list) {}
|
||||
String *val_str(String *);
|
||||
String *val_str(String *) override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_array_insert") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_array_insert>(thd, this); }
|
||||
};
|
||||
|
||||
@ -399,13 +400,13 @@ public:
|
||||
Item_func_json_array(thd) {}
|
||||
Item_func_json_object(THD *thd, List<Item> &list):
|
||||
Item_func_json_array(thd, list) {}
|
||||
String *val_str(String *);
|
||||
String *val_str(String *) override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_object") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_object>(thd, this); }
|
||||
};
|
||||
|
||||
@ -417,13 +418,13 @@ protected:
|
||||
public:
|
||||
Item_func_json_merge(THD *thd, List<Item> &list):
|
||||
Item_func_json_array(thd, list) {}
|
||||
String *val_str(String *);
|
||||
String *val_str(String *) override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_merge_preserve") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_merge>(thd, this); }
|
||||
};
|
||||
|
||||
@ -437,14 +438,14 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_merge_patch") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_merge_patch>(thd, this); }
|
||||
};
|
||||
|
||||
class Item_func_json_length: public Item_long_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{
|
||||
return args[0]->check_type_can_return_text(func_name_cstring()) ||
|
||||
(arg_count > 1 &&
|
||||
@ -462,16 +463,16 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_length") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
longlong val_int();
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
longlong val_int() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_length>(thd, this); }
|
||||
};
|
||||
|
||||
|
||||
class Item_func_json_depth: public Item_long_func
|
||||
{
|
||||
bool check_arguments() const
|
||||
bool check_arguments() const override
|
||||
{ return args[0]->check_type_can_return_text(func_name_cstring()); }
|
||||
protected:
|
||||
String tmp_js;
|
||||
@ -482,9 +483,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_depth") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec() { max_length= 10; return FALSE; }
|
||||
longlong val_int();
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override { max_length= 10; return FALSE; }
|
||||
longlong val_int() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_depth>(thd, this); }
|
||||
};
|
||||
|
||||
@ -500,9 +501,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_type") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_type>(thd, this); }
|
||||
};
|
||||
|
||||
@ -517,9 +518,9 @@ public:
|
||||
Item_func_json_insert(bool i_mode, bool r_mode, THD *thd, List<Item> &list):
|
||||
Item_json_str_multipath(thd, list),
|
||||
mode_insert(i_mode), mode_replace(r_mode) {}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
uint get_n_paths() const { return arg_count/2; }
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
uint get_n_paths() const override { return arg_count/2; }
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING json_set= {STRING_WITH_LEN("json_set") };
|
||||
@ -528,7 +529,7 @@ public:
|
||||
return (mode_insert ?
|
||||
(mode_replace ? json_set : json_insert) : json_update);
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_insert>(thd, this); }
|
||||
};
|
||||
|
||||
@ -540,15 +541,15 @@ protected:
|
||||
public:
|
||||
Item_func_json_remove(THD *thd, List<Item> &list):
|
||||
Item_json_str_multipath(thd, list) {}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
uint get_n_paths() const { return arg_count - 1; }
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
uint get_n_paths() const override { return arg_count - 1; }
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_remove") };
|
||||
return name;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_remove>(thd, this); }
|
||||
};
|
||||
|
||||
@ -567,9 +568,9 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_keys") };
|
||||
return name;
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_keys>(thd, this); }
|
||||
};
|
||||
|
||||
@ -594,11 +595,11 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_search") };
|
||||
return name;
|
||||
}
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *);
|
||||
uint get_n_paths() const { return arg_count > 4 ? arg_count - 4 : 0; }
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *) override;
|
||||
uint get_n_paths() const override { return arg_count > 4 ? arg_count - 4 : 0; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_search>(thd, this); }
|
||||
};
|
||||
|
||||
@ -623,10 +624,10 @@ public:
|
||||
Item_json_func(thd, list), fmt(DETAILED) {}
|
||||
|
||||
LEX_CSTRING func_name_cstring() const override;
|
||||
bool fix_length_and_dec();
|
||||
String *val_str(String *str);
|
||||
String *val_json(String *str);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override;
|
||||
String *val_str(String *str) override;
|
||||
String *val_json(String *str) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_format>(thd, this); }
|
||||
};
|
||||
|
||||
@ -638,12 +639,12 @@ protected:
|
||||
Overrides Item_func_group_concat::skip_nulls()
|
||||
NULL-s should be added to the result as JSON null value.
|
||||
*/
|
||||
bool skip_nulls() const { return false; }
|
||||
String *get_str_from_item(Item *i, String *tmp);
|
||||
bool skip_nulls() const override { return false; }
|
||||
String *get_str_from_item(Item *i, String *tmp) override;
|
||||
String *get_str_from_field(Item *i, Field *f, String *tmp,
|
||||
const uchar *key, size_t offset);
|
||||
const uchar *key, size_t offset) override;
|
||||
void cut_max_length(String *result,
|
||||
uint old_length, uint max_length) const;
|
||||
uint old_length, uint max_length) const override;
|
||||
public:
|
||||
String m_tmp_json; /* Used in get_str_from_*.. */
|
||||
Item_func_json_arrayagg(THD *thd, Name_resolution_context *context_arg,
|
||||
@ -655,18 +656,18 @@ public:
|
||||
{
|
||||
}
|
||||
Item_func_json_arrayagg(THD *thd, Item_func_json_arrayagg *item);
|
||||
bool is_json_type() { return true; }
|
||||
bool is_json_type() override { return true; }
|
||||
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_arrayagg(") };
|
||||
return name;
|
||||
}
|
||||
enum Sumfunctype sum_func() const {return JSON_ARRAYAGG_FUNC;}
|
||||
enum Sumfunctype sum_func() const override {return JSON_ARRAYAGG_FUNC;}
|
||||
|
||||
String* val_str(String *str);
|
||||
String* val_str(String *str) override;
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_arrayagg>(thd, this); }
|
||||
};
|
||||
|
||||
@ -683,44 +684,44 @@ public:
|
||||
}
|
||||
|
||||
Item_func_json_objectagg(THD *thd, Item_func_json_objectagg *item);
|
||||
bool is_json_type() { return true; }
|
||||
void cleanup();
|
||||
bool is_json_type() override { return true; }
|
||||
void cleanup() override;
|
||||
|
||||
enum Sumfunctype sum_func () const {return JSON_OBJECTAGG_FUNC;}
|
||||
enum Sumfunctype sum_func () const override { return JSON_OBJECTAGG_FUNC;}
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("json_objectagg") };
|
||||
return name;
|
||||
}
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
if (too_big_for_varchar())
|
||||
return &type_handler_blob;
|
||||
return &type_handler_varchar;
|
||||
}
|
||||
void clear();
|
||||
bool add();
|
||||
void reset_field() { DBUG_ASSERT(0); } // not used
|
||||
void update_field() { DBUG_ASSERT(0); } // not used
|
||||
bool fix_fields(THD *,Item **);
|
||||
void clear() override;
|
||||
bool add() override;
|
||||
void reset_field() override { DBUG_ASSERT(0); } // not used
|
||||
void update_field() override { DBUG_ASSERT(0); } // not used
|
||||
bool fix_fields(THD *,Item **) override;
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{ return 0.0; }
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{ return 0; }
|
||||
my_decimal *val_decimal(my_decimal *decimal_value)
|
||||
my_decimal *val_decimal(my_decimal *decimal_value) override
|
||||
{
|
||||
my_decimal_set_zero(decimal_value);
|
||||
return decimal_value;
|
||||
}
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return get_date_from_string(thd, ltime, fuzzydate);
|
||||
}
|
||||
String* val_str(String* str);
|
||||
Item *copy_or_same(THD* thd);
|
||||
void no_rows_in_result() {}
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String* str) override;
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
void no_rows_in_result() override {}
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_json_objectagg>(thd, this); }
|
||||
};
|
||||
|
||||
|
@ -54,101 +54,103 @@ public:
|
||||
not_null_tables_cache(0), with_null(0)
|
||||
{ }
|
||||
|
||||
enum Type type() const { return ROW_ITEM; };
|
||||
const Type_handler *type_handler() const { return &type_handler_row; }
|
||||
enum Type type() const override { return ROW_ITEM; };
|
||||
const Type_handler *type_handler() const override { return &type_handler_row; }
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param)
|
||||
const Tmp_field_param *param) override
|
||||
{
|
||||
return NULL; // Check with Vicentiu why it's called for Item_row
|
||||
}
|
||||
void illegal_method_call(const char *);
|
||||
bool is_null() { return null_value; }
|
||||
void make_send_field(THD *thd, Send_field *)
|
||||
bool is_null() override { return null_value; }
|
||||
void make_send_field(THD *thd, Send_field *) override
|
||||
{
|
||||
illegal_method_call((const char*)"make_send_field");
|
||||
};
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
illegal_method_call((const char*)"val");
|
||||
return 0;
|
||||
};
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
illegal_method_call((const char*)"val_int");
|
||||
return 0;
|
||||
};
|
||||
String *val_str(String *)
|
||||
String *val_str(String *) override
|
||||
{
|
||||
illegal_method_call((const char*)"val_str");
|
||||
return 0;
|
||||
};
|
||||
my_decimal *val_decimal(my_decimal *)
|
||||
my_decimal *val_decimal(my_decimal *) override
|
||||
{
|
||||
illegal_method_call((const char*)"val_decimal");
|
||||
return 0;
|
||||
};
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
illegal_method_call((const char*)"get_date");
|
||||
return true;
|
||||
}
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge);
|
||||
void cleanup();
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge)
|
||||
override;
|
||||
void cleanup() override;
|
||||
void split_sum_func(THD *thd, Ref_ptr_array ref_pointer_array,
|
||||
List<Item> &fields, uint flags);
|
||||
table_map used_tables() const { return used_tables_cache; };
|
||||
bool const_item() const { return const_item_cache; };
|
||||
void update_used_tables()
|
||||
List<Item> &fields, uint flags) override;
|
||||
table_map used_tables() const override { return used_tables_cache; };
|
||||
bool const_item() const override { return const_item_cache; };
|
||||
void update_used_tables() override
|
||||
{
|
||||
used_tables_and_const_cache_init();
|
||||
used_tables_and_const_cache_update_and_join(arg_count, args);
|
||||
}
|
||||
table_map not_null_tables() const { return not_null_tables_cache; }
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
table_map not_null_tables() const override { return not_null_tables_cache; }
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
|
||||
bool walk(Item_processor processor, bool walk_subquery, void *arg)
|
||||
bool walk(Item_processor processor, bool walk_subquery, void *arg) override
|
||||
{
|
||||
if (walk_args(processor, walk_subquery, arg))
|
||||
return true;
|
||||
return (this->*processor)(arg);
|
||||
}
|
||||
Item *transform(THD *thd, Item_transformer transformer, uchar *arg);
|
||||
bool eval_not_null_tables(void *opt_arg);
|
||||
bool find_not_null_fields(table_map allowed);
|
||||
Item *transform(THD *thd, Item_transformer transformer, uchar *arg) override;
|
||||
bool eval_not_null_tables(void *opt_arg) override;
|
||||
bool find_not_null_fields(table_map allowed) override;
|
||||
|
||||
uint cols() const { return arg_count; }
|
||||
Item* element_index(uint i) { return args[i]; }
|
||||
Item** addr(uint i) { return args + i; }
|
||||
bool check_cols(uint c);
|
||||
bool null_inside() { return with_null; };
|
||||
void bring_value();
|
||||
uint cols() const override { return arg_count; }
|
||||
Item* element_index(uint i) override { return args[i]; }
|
||||
Item** addr(uint i) override { return args + i; }
|
||||
bool check_cols(uint c) override;
|
||||
bool null_inside() override { return with_null; };
|
||||
void bring_value() override;
|
||||
|
||||
Item* propagate_equal_fields(THD *thd, const Context &ctx, COND_EQUAL *cond)
|
||||
override
|
||||
{
|
||||
Item_args::propagate_equal_fields(thd, Context_identity(), cond);
|
||||
return this;
|
||||
}
|
||||
|
||||
bool excl_dep_on_table(table_map tab_map)
|
||||
bool excl_dep_on_table(table_map tab_map) override
|
||||
{
|
||||
return Item_args::excl_dep_on_table(tab_map);
|
||||
}
|
||||
|
||||
bool excl_dep_on_grouping_fields(st_select_lex *sel)
|
||||
bool excl_dep_on_grouping_fields(st_select_lex *sel) override
|
||||
{
|
||||
return Item_args::excl_dep_on_grouping_fields(sel);
|
||||
}
|
||||
|
||||
bool excl_dep_on_in_subq_left_part(Item_in_subselect *subq_pred)
|
||||
bool excl_dep_on_in_subq_left_part(Item_in_subselect *subq_pred) override
|
||||
{
|
||||
return Item_args::excl_dep_on_in_subq_left_part(subq_pred);
|
||||
}
|
||||
|
||||
bool check_vcol_func_processor(void *arg) {return FALSE; }
|
||||
Item *get_copy(THD *thd)
|
||||
bool check_vcol_func_processor(void *arg) override {return FALSE; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_row>(thd, this); }
|
||||
Item *build_clone(THD *thd);
|
||||
Item *build_clone(THD *thd) override;
|
||||
};
|
||||
|
||||
#endif /* ITEM_ROW_INCLUDED */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -304,29 +304,30 @@ public:
|
||||
Item_singlerow_subselect(THD *thd_arg): Item_subselect(thd_arg), value(0), row (0)
|
||||
{}
|
||||
|
||||
void cleanup();
|
||||
subs_type substype() { return SINGLEROW_SUBS; }
|
||||
void cleanup() override;
|
||||
subs_type substype() override { return SINGLEROW_SUBS; }
|
||||
|
||||
void reset();
|
||||
void no_rows_in_result();
|
||||
bool select_transformer(JOIN *join);
|
||||
void reset() override;
|
||||
void no_rows_in_result() override;
|
||||
bool select_transformer(JOIN *join) override;
|
||||
void store(uint i, Item* item);
|
||||
double val_real();
|
||||
longlong val_int ();
|
||||
String *val_str (String *);
|
||||
bool val_native(THD *thd, Native *);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool val_bool();
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate);
|
||||
const Type_handler *type_handler() const;
|
||||
bool fix_length_and_dec();
|
||||
double val_real() override;
|
||||
longlong val_int() override;
|
||||
String *val_str(String *) override;
|
||||
bool val_native(THD *thd, Native *) override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
bool val_bool() override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override;
|
||||
const Type_handler *type_handler() const override;
|
||||
bool fix_length_and_dec() override;
|
||||
|
||||
uint cols() const;
|
||||
Item* element_index(uint i) { return reinterpret_cast<Item*>(row[i]); }
|
||||
Item** addr(uint i) { return (Item**)row + i; }
|
||||
bool check_cols(uint c);
|
||||
bool null_inside();
|
||||
void bring_value();
|
||||
uint cols() const override;
|
||||
Item* element_index(uint i) override
|
||||
{ return reinterpret_cast<Item*>(row[i]); }
|
||||
Item** addr(uint i) override { return (Item**)row + i; }
|
||||
bool check_cols(uint c) override;
|
||||
bool null_inside() override;
|
||||
void bring_value() override;
|
||||
|
||||
/**
|
||||
This method is used to implement a special case of semantic tree
|
||||
@ -342,7 +343,7 @@ public:
|
||||
*/
|
||||
st_select_lex* invalidate_and_restore_select_lex();
|
||||
|
||||
Item* expr_cache_insert_transformer(THD *thd, uchar *unused);
|
||||
Item* expr_cache_insert_transformer(THD *thd, uchar *unused) override;
|
||||
|
||||
friend class select_singlerow_subselect;
|
||||
};
|
||||
@ -357,12 +358,12 @@ protected:
|
||||
public:
|
||||
Item_maxmin_subselect(THD *thd, Item_subselect *parent,
|
||||
st_select_lex *select_lex, bool max);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void cleanup();
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
void cleanup() override;
|
||||
bool any_value() { return was_values; }
|
||||
void register_value() { was_values= TRUE; }
|
||||
void reset_value_registration() { was_values= FALSE; }
|
||||
void no_rows_in_result();
|
||||
void reset_value_registration() override { was_values= FALSE; }
|
||||
void no_rows_in_result() override;
|
||||
};
|
||||
|
||||
/* exists subselect */
|
||||
|
481
sql/item_sum.h
481
sql/item_sum.h
@ -411,7 +411,7 @@ public:
|
||||
Item_sum(THD *thd, List<Item> &list);
|
||||
//Copy constructor, need to perform subselects with temporary tables
|
||||
Item_sum(THD *thd, Item_sum *item);
|
||||
enum Type type() const { return SUM_FUNC_ITEM; }
|
||||
enum Type type() const override { return SUM_FUNC_ITEM; }
|
||||
virtual enum Sumfunctype sum_func () const=0;
|
||||
bool is_aggr_sum_func()
|
||||
{
|
||||
@ -461,7 +461,7 @@ public:
|
||||
Updated value is then saved in the field.
|
||||
*/
|
||||
virtual void update_field()=0;
|
||||
virtual bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
set_maybe_null();
|
||||
null_value=1;
|
||||
@ -469,10 +469,10 @@ public:
|
||||
}
|
||||
virtual Item *result_item(THD *thd, Field *field);
|
||||
|
||||
void update_used_tables ();
|
||||
void update_used_tables() override;
|
||||
COND *build_equal_items(THD *thd, COND_EQUAL *inherited,
|
||||
bool link_item_fields,
|
||||
COND_EQUAL **cond_equal_ref)
|
||||
COND_EQUAL **cond_equal_ref) override
|
||||
{
|
||||
/*
|
||||
Item_sum (and derivants) of the original WHERE/HAVING clauses
|
||||
@ -483,7 +483,7 @@ public:
|
||||
return Item::build_equal_items(thd, inherited, link_item_fields,
|
||||
cond_equal_ref);
|
||||
}
|
||||
bool is_null() { return null_value; }
|
||||
bool is_null() override { return null_value; }
|
||||
/**
|
||||
make_const()
|
||||
Called if we've managed to calculate the value of this Item in
|
||||
@ -496,8 +496,8 @@ public:
|
||||
const_item_cache= true;
|
||||
}
|
||||
void reset_forced_const() { const_item_cache= false; }
|
||||
virtual bool const_during_execution() const { return false; }
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool const_during_execution() const override { return false; }
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
void fix_num_length_and_dec();
|
||||
|
||||
/**
|
||||
@ -510,7 +510,7 @@ public:
|
||||
may be initialized to 0 by clear() and to NULL by
|
||||
no_rows_in_result().
|
||||
*/
|
||||
virtual void no_rows_in_result()
|
||||
void no_rows_in_result() override
|
||||
{
|
||||
set_aggregator(current_thd, with_distinct ?
|
||||
Aggregator::DISTINCT_AGGREGATOR :
|
||||
@ -518,14 +518,14 @@ public:
|
||||
aggregator_clear();
|
||||
}
|
||||
virtual void make_unique() { force_copy_fields= TRUE; }
|
||||
Item *get_tmp_table_item(THD *thd);
|
||||
Item *get_tmp_table_item(THD *thd) override;
|
||||
virtual Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table);
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param)
|
||||
const Tmp_field_param *param) override
|
||||
{
|
||||
return create_tmp_field(root, param->group(), table);
|
||||
}
|
||||
virtual bool collect_outer_ref_processor(void *param);
|
||||
bool collect_outer_ref_processor(void *param) override;
|
||||
bool init_sum_func_check(THD *thd);
|
||||
bool check_sum_func(THD *thd, Item **ref);
|
||||
bool register_sum_func(THD *thd, Item **ref);
|
||||
@ -585,8 +585,8 @@ public:
|
||||
virtual bool supports_removal() const { return false; }
|
||||
virtual void remove() { DBUG_ASSERT(0); }
|
||||
|
||||
virtual void cleanup();
|
||||
bool check_vcol_func_processor(void *arg);
|
||||
void cleanup() override;
|
||||
bool check_vcol_func_processor(void *arg) override;
|
||||
virtual void setup_window_func(THD *thd, Window_spec *window_spec) {}
|
||||
void mark_as_window_func_sum_expr() { window_func_sum_expr_flag= true; }
|
||||
bool is_window_func_sum_expr() { return window_func_sum_expr_flag; }
|
||||
@ -748,23 +748,24 @@ public:
|
||||
Item_sum_double(THD *thd, Item *item_par): Item_sum_num(thd, item_par) {}
|
||||
Item_sum_double(THD *thd, List<Item> &list): Item_sum_num(thd, list) {}
|
||||
Item_sum_double(THD *thd, Item_sum_double *item) :Item_sum_num(thd, item) {}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
return val_int_from_real();
|
||||
}
|
||||
String *val_str(String*str)
|
||||
String *val_str(String*str) override
|
||||
{
|
||||
return val_string_from_real(str);
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *to)
|
||||
my_decimal *val_decimal(my_decimal *to) override
|
||||
{
|
||||
return val_decimal_from_real(to);
|
||||
}
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return get_date_from_real(thd, ltime, fuzzydate);
|
||||
}
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
};
|
||||
|
||||
|
||||
@ -775,14 +776,14 @@ public:
|
||||
Item_sum_int(THD *thd, Item *item_par): Item_sum_num(thd, item_par) {}
|
||||
Item_sum_int(THD *thd, List<Item> &list): Item_sum_num(thd, list) {}
|
||||
Item_sum_int(THD *thd, Item_sum_int *item) :Item_sum_num(thd, item) {}
|
||||
double val_real() { DBUG_ASSERT(fixed()); return (double) val_int(); }
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
double val_real() override { DBUG_ASSERT(fixed()); return (double) val_int(); }
|
||||
String *val_str(String*str) override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return get_date_from_int(thd, ltime, fuzzydate);
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals=0;
|
||||
max_length=21;
|
||||
@ -804,7 +805,7 @@ protected:
|
||||
my_decimal direct_sum_decimal;
|
||||
my_decimal dec_buffs[2];
|
||||
uint curr_dec_buff;
|
||||
bool fix_length_and_dec();
|
||||
bool fix_length_and_dec() override;
|
||||
|
||||
public:
|
||||
Item_sum_sum(THD *thd, Item *item_par, bool distinct):
|
||||
@ -814,42 +815,42 @@ public:
|
||||
set_distinct(distinct);
|
||||
}
|
||||
Item_sum_sum(THD *thd, Item_sum_sum *item);
|
||||
enum Sumfunctype sum_func () const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return has_with_distinct() ? SUM_DISTINCT_FUNC : SUM_FUNC;
|
||||
}
|
||||
void cleanup();
|
||||
void cleanup() override;
|
||||
void direct_add(my_decimal *add_sum_decimal);
|
||||
void direct_add(double add_sum_real, bool add_sum_is_null);
|
||||
void clear();
|
||||
bool add();
|
||||
double val_real();
|
||||
longlong val_int();
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
void clear() override;
|
||||
bool add() override;
|
||||
double val_real() override;
|
||||
longlong val_int() override;
|
||||
String *val_str(String*str) override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return type_handler()->Item_get_date_with_warn(thd, this, ltime, fuzzydate);
|
||||
}
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||
void fix_length_and_dec_double();
|
||||
void fix_length_and_dec_decimal();
|
||||
void reset_field();
|
||||
void update_field();
|
||||
void no_rows_in_result() {}
|
||||
void reset_field() override;
|
||||
void update_field() override;
|
||||
void no_rows_in_result() override {}
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name_distinct= { STRING_WITH_LEN("sum(distinct ")};
|
||||
static LEX_CSTRING name_normal= { STRING_WITH_LEN("sum(") };
|
||||
return has_with_distinct() ? name_distinct : name_normal;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
void remove();
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
void remove() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_sum>(thd, this); }
|
||||
|
||||
bool supports_removal() const
|
||||
bool supports_removal() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -869,10 +870,10 @@ class Item_sum_count :public Item_sum_int
|
||||
|
||||
friend class Aggregator_distinct;
|
||||
|
||||
void clear();
|
||||
bool add();
|
||||
void cleanup();
|
||||
void remove();
|
||||
void clear() override;
|
||||
bool add() override;
|
||||
void cleanup() override;
|
||||
void remove() override;
|
||||
|
||||
public:
|
||||
Item_sum_count(THD *thd, Item *item_par):
|
||||
@ -898,20 +899,21 @@ public:
|
||||
Item_sum_int(thd, item), direct_counted(FALSE),
|
||||
direct_reseted_field(FALSE), count(item->count)
|
||||
{}
|
||||
enum Sumfunctype sum_func () const
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return has_with_distinct() ? COUNT_DISTINCT_FUNC : COUNT_FUNC;
|
||||
}
|
||||
void no_rows_in_result() { count=0; }
|
||||
void no_rows_in_result() override { count=0; }
|
||||
void make_const(longlong count_arg)
|
||||
{
|
||||
count=count_arg;
|
||||
Item_sum::make_const();
|
||||
}
|
||||
const Type_handler *type_handler() const { return &type_handler_slonglong; }
|
||||
longlong val_int();
|
||||
void reset_field();
|
||||
void update_field();
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_slonglong; }
|
||||
longlong val_int() override;
|
||||
void reset_field() override;
|
||||
void update_field() override;
|
||||
void direct_add(longlong add_count);
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
@ -919,11 +921,11 @@ public:
|
||||
static LEX_CSTRING name_normal= { STRING_WITH_LEN("count(") };
|
||||
return has_with_distinct() ? name_distinct : name_normal;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_count>(thd, this); }
|
||||
|
||||
bool supports_removal() const
|
||||
bool supports_removal() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -948,40 +950,40 @@ public:
|
||||
|
||||
void fix_length_and_dec_double();
|
||||
void fix_length_and_dec_decimal();
|
||||
bool fix_length_and_dec();
|
||||
enum Sumfunctype sum_func () const
|
||||
bool fix_length_and_dec() override;
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return has_with_distinct() ? AVG_DISTINCT_FUNC : AVG_FUNC;
|
||||
}
|
||||
void clear();
|
||||
bool add();
|
||||
void remove();
|
||||
double val_real();
|
||||
void clear() override;
|
||||
bool add() override;
|
||||
void remove() override;
|
||||
double val_real() override;
|
||||
// In SPs we might force the "wrong" type with select into a declare variable
|
||||
longlong val_int() { return val_int_from_real(); }
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
String *val_str(String *str);
|
||||
void reset_field();
|
||||
void update_field();
|
||||
Item *result_item(THD *thd, Field *field);
|
||||
void no_rows_in_result() {}
|
||||
longlong val_int() override { return val_int_from_real(); }
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
String *val_str(String *str) override;
|
||||
void reset_field() override;
|
||||
void update_field() override;
|
||||
Item *result_item(THD *thd, Field *field) override;
|
||||
void no_rows_in_result() override {}
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name_distinct= { STRING_WITH_LEN("avg(distinct ")};
|
||||
static LEX_CSTRING name_normal= { STRING_WITH_LEN("avg(") };
|
||||
return has_with_distinct() ? name_distinct : name_normal;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table);
|
||||
void cleanup()
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table) override;
|
||||
void cleanup() override
|
||||
{
|
||||
count= 0;
|
||||
Item_sum_sum::cleanup();
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_avg>(thd, this); }
|
||||
|
||||
bool supports_removal() const
|
||||
bool supports_removal() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -1113,7 +1115,7 @@ public:
|
||||
:Item_sum(thd, item),
|
||||
Type_handler_hybrid_field_type(item)
|
||||
{ }
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||
bool fix_length_and_dec_generic();
|
||||
bool fix_length_and_dec_numeric(const Type_handler *h);
|
||||
@ -1146,35 +1148,36 @@ public:
|
||||
direct_added(FALSE), value(item->value), arg_cache(0),
|
||||
cmp_sign(item->cmp_sign), was_values(item->was_values)
|
||||
{ }
|
||||
bool fix_fields(THD *, Item **);
|
||||
bool fix_length_and_dec();
|
||||
bool fix_fields(THD *, Item **) override;
|
||||
bool fix_length_and_dec() override;
|
||||
void setup_hybrid(THD *thd, Item *item, Item *value_arg);
|
||||
void clear();
|
||||
void clear() override;
|
||||
void direct_add(Item *item);
|
||||
double val_real();
|
||||
longlong val_int();
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate);
|
||||
void reset_field();
|
||||
String *val_str(String *);
|
||||
bool val_native(THD *thd, Native *);
|
||||
const Type_handler *real_type_handler() const
|
||||
double val_real() override;
|
||||
longlong val_int() override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override;
|
||||
void reset_field() override;
|
||||
String *val_str(String *) override;
|
||||
bool val_native(THD *thd, Native *) override;
|
||||
const Type_handler *real_type_handler() const override
|
||||
{
|
||||
return get_arg(0)->real_type_handler();
|
||||
}
|
||||
const TYPELIB *get_typelib() const { return args[0]->get_typelib(); }
|
||||
void update_field();
|
||||
const TYPELIB *get_typelib() const override { return args[0]->get_typelib(); }
|
||||
void update_field() override;
|
||||
void min_max_update_str_field();
|
||||
void min_max_update_real_field();
|
||||
void min_max_update_int_field();
|
||||
void min_max_update_decimal_field();
|
||||
void min_max_update_native_field();
|
||||
void cleanup();
|
||||
void cleanup() override;
|
||||
bool any_value() { return was_values; }
|
||||
void no_rows_in_result();
|
||||
void restore_to_before_no_rows_in_result();
|
||||
Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table);
|
||||
void setup_caches(THD *thd) { setup_hybrid(thd, arguments()[0], NULL); }
|
||||
void no_rows_in_result() override;
|
||||
void restore_to_before_no_rows_in_result() override;
|
||||
Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table) override;
|
||||
void setup_caches(THD *thd) override
|
||||
{ setup_hybrid(thd, arguments()[0], NULL); }
|
||||
};
|
||||
|
||||
|
||||
@ -1183,16 +1186,16 @@ class Item_sum_min final :public Item_sum_min_max
|
||||
public:
|
||||
Item_sum_min(THD *thd, Item *item_par): Item_sum_min_max(thd, item_par, 1) {}
|
||||
Item_sum_min(THD *thd, Item_sum_min *item) :Item_sum_min_max(thd, item) {}
|
||||
enum Sumfunctype sum_func () const {return MIN_FUNC;}
|
||||
enum Sumfunctype sum_func () const override {return MIN_FUNC;}
|
||||
|
||||
bool add();
|
||||
bool add() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING sum_name= {STRING_WITH_LEN("min(") };
|
||||
return sum_name;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_min>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1202,16 +1205,16 @@ class Item_sum_max final :public Item_sum_min_max
|
||||
public:
|
||||
Item_sum_max(THD *thd, Item *item_par): Item_sum_min_max(thd, item_par, -1) {}
|
||||
Item_sum_max(THD *thd, Item_sum_max *item) :Item_sum_min_max(thd, item) {}
|
||||
enum Sumfunctype sum_func () const {return MAX_FUNC;}
|
||||
enum Sumfunctype sum_func () const override {return MAX_FUNC;}
|
||||
|
||||
bool add();
|
||||
bool add() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING sum_name= {STRING_WITH_LEN("max(") };
|
||||
return sum_name;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_max>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1230,13 +1233,14 @@ public:
|
||||
if (as_window_function)
|
||||
memcpy(bit_counters, item->bit_counters, sizeof(bit_counters));
|
||||
}
|
||||
enum Sumfunctype sum_func () const {return SUM_BIT_FUNC;}
|
||||
void clear();
|
||||
longlong val_int();
|
||||
void reset_field();
|
||||
void update_field();
|
||||
const Type_handler *type_handler() const { return &type_handler_ulonglong; }
|
||||
bool fix_length_and_dec()
|
||||
enum Sumfunctype sum_func () const override { return SUM_BIT_FUNC;}
|
||||
void clear() override;
|
||||
longlong val_int() override;
|
||||
void reset_field() override;
|
||||
void update_field() override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_ulonglong; }
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
if (args[0]->check_type_can_return_int(func_name_cstring()))
|
||||
return true;
|
||||
@ -1245,7 +1249,7 @@ public:
|
||||
null_value= 0;
|
||||
return FALSE;
|
||||
}
|
||||
void cleanup()
|
||||
void cleanup() override
|
||||
{
|
||||
bits= reset_bits;
|
||||
if (as_window_function)
|
||||
@ -1254,11 +1258,12 @@ public:
|
||||
}
|
||||
void setup_window_func(THD *thd __attribute__((unused)),
|
||||
Window_spec *window_spec __attribute__((unused)))
|
||||
override
|
||||
{
|
||||
as_window_function= TRUE;
|
||||
clear_as_window();
|
||||
}
|
||||
void remove()
|
||||
void remove() override
|
||||
{
|
||||
if (as_window_function)
|
||||
{
|
||||
@ -1269,7 +1274,7 @@ public:
|
||||
DBUG_ASSERT(0);
|
||||
}
|
||||
|
||||
bool supports_removal() const
|
||||
bool supports_removal() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -1297,18 +1302,18 @@ class Item_sum_or final :public Item_sum_bit
|
||||
public:
|
||||
Item_sum_or(THD *thd, Item *item_par): Item_sum_bit(thd, item_par, 0) {}
|
||||
Item_sum_or(THD *thd, Item_sum_or *item) :Item_sum_bit(thd, item) {}
|
||||
bool add();
|
||||
bool add() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING sum_name= {STRING_WITH_LEN("bit_or(") };
|
||||
return sum_name;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_or>(thd, this); }
|
||||
|
||||
private:
|
||||
void set_bits_from_counters();
|
||||
void set_bits_from_counters() override;
|
||||
};
|
||||
|
||||
|
||||
@ -1318,18 +1323,18 @@ public:
|
||||
Item_sum_and(THD *thd, Item *item_par):
|
||||
Item_sum_bit(thd, item_par, ULONGLONG_MAX) {}
|
||||
Item_sum_and(THD *thd, Item_sum_and *item) :Item_sum_bit(thd, item) {}
|
||||
bool add();
|
||||
bool add() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING sum_min_name= {STRING_WITH_LEN("bit_and(") };
|
||||
return sum_min_name;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_and>(thd, this); }
|
||||
|
||||
private:
|
||||
void set_bits_from_counters();
|
||||
void set_bits_from_counters() override;
|
||||
};
|
||||
|
||||
class Item_sum_xor final :public Item_sum_bit
|
||||
@ -1337,18 +1342,18 @@ class Item_sum_xor final :public Item_sum_bit
|
||||
public:
|
||||
Item_sum_xor(THD *thd, Item *item_par): Item_sum_bit(thd, item_par, 0) {}
|
||||
Item_sum_xor(THD *thd, Item_sum_xor *item) :Item_sum_bit(thd, item) {}
|
||||
bool add();
|
||||
bool add() override;
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING sum_min_name= {STRING_WITH_LEN("bit_xor(") };
|
||||
return sum_min_name;
|
||||
}
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_xor>(thd, this); }
|
||||
|
||||
private:
|
||||
void set_bits_from_counters();
|
||||
void set_bits_from_counters() override;
|
||||
};
|
||||
|
||||
class sp_head;
|
||||
@ -1403,7 +1408,7 @@ struct st_sp_security_context;
|
||||
Example:
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN ret_val;
|
||||
*/
|
||||
class Item_sum_sp final :public Item_sum,
|
||||
class Item_sum_sp :public Item_sum,
|
||||
public Item_sp
|
||||
{
|
||||
private:
|
||||
@ -1417,48 +1422,48 @@ public:
|
||||
sp_head *sp, List<Item> &list);
|
||||
Item_sum_sp(THD *thd, Item_sum_sp *item);
|
||||
|
||||
enum Sumfunctype sum_func () const
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return SP_AGGREGATE_FUNC;
|
||||
}
|
||||
Field *create_field_for_create_select(MEM_ROOT *root, TABLE *table)
|
||||
Field *create_field_for_create_select(MEM_ROOT *root, TABLE *table) override
|
||||
{
|
||||
return create_table_field_from_handler(root, table);
|
||||
}
|
||||
bool fix_length_and_dec();
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_length_and_dec() override;
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
LEX_CSTRING func_name_cstring() const override;
|
||||
const Type_handler *type_handler() const;
|
||||
bool add();
|
||||
const Type_handler *type_handler() const override;
|
||||
bool add() override;
|
||||
|
||||
/* val_xx functions */
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
if(execute())
|
||||
return 0;
|
||||
return sp_result_field->val_int();
|
||||
}
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
if(execute())
|
||||
return 0.0;
|
||||
return sp_result_field->val_real();
|
||||
}
|
||||
|
||||
my_decimal *val_decimal(my_decimal *dec_buf)
|
||||
my_decimal *val_decimal(my_decimal *dec_buf) override
|
||||
{
|
||||
if(execute())
|
||||
return NULL;
|
||||
return sp_result_field->val_decimal(dec_buf);
|
||||
}
|
||||
|
||||
bool val_native(THD *thd, Native *to)
|
||||
bool val_native(THD *thd, Native *to) override
|
||||
{
|
||||
return (null_value= execute()) || sp_result_field->val_native(to);
|
||||
}
|
||||
|
||||
String *val_str(String *str)
|
||||
String *val_str(String *str) override
|
||||
{
|
||||
String buf;
|
||||
char buff[20];
|
||||
@ -1476,11 +1481,11 @@ public:
|
||||
str->copy(buf);
|
||||
return str;
|
||||
}
|
||||
void reset_field(){DBUG_ASSERT(0);}
|
||||
void update_field(){DBUG_ASSERT(0);}
|
||||
void clear();
|
||||
void cleanup();
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
void reset_field() override{DBUG_ASSERT(0);}
|
||||
void update_field() override{DBUG_ASSERT(0);}
|
||||
void clear() override;
|
||||
void cleanup() override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return execute() || sp_result_field->get_date(ltime, fuzzydate);
|
||||
}
|
||||
@ -1488,9 +1493,9 @@ public:
|
||||
{
|
||||
return sp_result_field;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_sp>(thd, this); }
|
||||
Item *copy_or_same(THD *thd);
|
||||
Item *copy_or_same(THD *thd) override;
|
||||
};
|
||||
|
||||
/* Items to get the value of a stored sum function */
|
||||
@ -1509,18 +1514,18 @@ public:
|
||||
max_length= item->max_length;
|
||||
unsigned_flag= item->unsigned_flag;
|
||||
}
|
||||
table_map used_tables() const { return (table_map) 1L; }
|
||||
table_map used_tables() const override { return (table_map) 1L; }
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param)
|
||||
const Tmp_field_param *param) override
|
||||
{
|
||||
return create_tmp_field_ex_simple(root, table, src, param);
|
||||
}
|
||||
void save_in_result_field(bool no_conversions) { DBUG_ASSERT(0); }
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
void save_in_result_field(bool no_conversions) override { DBUG_ASSERT(0); }
|
||||
bool check_vcol_func_processor(void *arg) override
|
||||
{
|
||||
return mark_unsupported_function(name.str, arg, VCOL_IMPOSSIBLE);
|
||||
}
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return type_handler()->Item_get_date_with_warn(thd, this, ltime, fuzzydate);
|
||||
}
|
||||
@ -1535,8 +1540,8 @@ public:
|
||||
Item_avg_field(THD *thd, Item_sum_avg *item)
|
||||
:Item_sum_field(thd, item), prec_increment(item->prec_increment)
|
||||
{ }
|
||||
enum Type type() const { return FIELD_AVG_ITEM; }
|
||||
bool is_null() { update_null_value(); return null_value; }
|
||||
enum Type type() const override { return FIELD_AVG_ITEM; }
|
||||
bool is_null() override { update_null_value(); return null_value; }
|
||||
};
|
||||
|
||||
|
||||
@ -1546,12 +1551,15 @@ public:
|
||||
Item_avg_field_double(THD *thd, Item_sum_avg *item)
|
||||
:Item_avg_field(thd, item)
|
||||
{ }
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
longlong val_int() { return val_int_from_real(); }
|
||||
my_decimal *val_decimal(my_decimal *dec) { return val_decimal_from_real(dec); }
|
||||
String *val_str(String *str) { return val_string_from_real(str); }
|
||||
double val_real();
|
||||
Item *get_copy(THD *thd)
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
longlong val_int() override { return val_int_from_real(); }
|
||||
my_decimal *val_decimal(my_decimal *dec) override
|
||||
{ return val_decimal_from_real(dec); }
|
||||
String *val_str(String *str) override
|
||||
{ return val_string_from_real(str); }
|
||||
double val_real() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_avg_field_double>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1566,21 +1574,22 @@ public:
|
||||
f_scale(item->f_scale),
|
||||
dec_bin_size(item->dec_bin_size)
|
||||
{ }
|
||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||
double val_real()
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_newdecimal; }
|
||||
double val_real() override
|
||||
{
|
||||
return VDec(this).to_double();
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
return VDec(this).to_longlong(unsigned_flag);
|
||||
}
|
||||
String *val_str(String *str)
|
||||
String *val_str(String *str) override
|
||||
{
|
||||
return VDec(this).to_string_round(str, decimals);
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
Item *get_copy(THD *thd)
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_avg_field_decimal>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1592,16 +1601,17 @@ public:
|
||||
Item_variance_field(THD *thd, Item_sum_variance *item)
|
||||
:Item_sum_field(thd, item), sample(item->sample)
|
||||
{ }
|
||||
enum Type type() const {return FIELD_VARIANCE_ITEM; }
|
||||
double val_real();
|
||||
longlong val_int() { return val_int_from_real(); }
|
||||
String *val_str(String *str)
|
||||
enum Type type() const override {return FIELD_VARIANCE_ITEM; }
|
||||
double val_real() override;
|
||||
longlong val_int() override { return val_int_from_real(); }
|
||||
String *val_str(String *str) override
|
||||
{ return val_string_from_real(str); }
|
||||
my_decimal *val_decimal(my_decimal *dec_buf)
|
||||
my_decimal *val_decimal(my_decimal *dec_buf) override
|
||||
{ return val_decimal_from_real(dec_buf); }
|
||||
bool is_null() { update_null_value(); return null_value; }
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
Item *get_copy(THD *thd)
|
||||
bool is_null() override { update_null_value(); return null_value; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_variance_field>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1612,9 +1622,9 @@ public:
|
||||
Item_std_field(THD *thd, Item_sum_std *item)
|
||||
:Item_variance_field(thd, item)
|
||||
{ }
|
||||
enum Type type() const { return FIELD_STD_ITEM; }
|
||||
double val_real();
|
||||
Item *get_copy(THD *thd)
|
||||
enum Type type() const override { return FIELD_STD_ITEM; }
|
||||
double val_real() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_std_field>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1645,7 +1655,7 @@ public:
|
||||
const char *tmp= udf.name();
|
||||
return {tmp, strlen(tmp) };
|
||||
}
|
||||
bool fix_fields(THD *thd, Item **ref)
|
||||
bool fix_fields(THD *thd, Item **ref) override
|
||||
{
|
||||
DBUG_ASSERT(fixed() == 0);
|
||||
|
||||
@ -1677,18 +1687,18 @@ public:
|
||||
memcpy (orig_args, args, sizeof (Item *) * arg_count);
|
||||
return check_sum_func(thd, ref);
|
||||
}
|
||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||
enum Sumfunctype sum_func () const override { return UDF_SUM_FUNC; }
|
||||
virtual bool have_field_update(void) const { return 0; }
|
||||
|
||||
void clear();
|
||||
bool add();
|
||||
bool supports_removal() const;
|
||||
void remove();
|
||||
void reset_field() {};
|
||||
void update_field() {};
|
||||
void cleanup();
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
void clear() override;
|
||||
bool add() override;
|
||||
bool supports_removal() const override;
|
||||
void remove() override;
|
||||
void reset_field() override {};
|
||||
void update_field() override {}
|
||||
void cleanup() override;
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return type_handler()->Item_get_date_with_warn(thd, this, ltime, fuzzydate);
|
||||
}
|
||||
@ -1704,14 +1714,16 @@ class Item_sum_udf_float :public Item_udf_sum
|
||||
Item_udf_sum(thd, udf_arg, list) {}
|
||||
Item_sum_udf_float(THD *thd, Item_sum_udf_float *item)
|
||||
:Item_udf_sum(thd, item) {}
|
||||
longlong val_int() { return val_int_from_real(); }
|
||||
double val_real();
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
bool fix_length_and_dec() { fix_num_length_and_dec(); return FALSE; }
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
longlong val_int() override { return val_int_from_real(); }
|
||||
double val_real() override;
|
||||
String *val_str(String*str) override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
bool fix_length_and_dec() override
|
||||
{ fix_num_length_and_dec(); return FALSE; }
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_udf_float>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1725,20 +1737,20 @@ public:
|
||||
Item_udf_sum(thd, udf_arg, list) {}
|
||||
Item_sum_udf_int(THD *thd, Item_sum_udf_int *item)
|
||||
:Item_udf_sum(thd, item) {}
|
||||
longlong val_int();
|
||||
double val_real()
|
||||
longlong val_int() override;
|
||||
double val_real() override
|
||||
{ DBUG_ASSERT(fixed()); return (double) Item_sum_udf_int::val_int(); }
|
||||
String *val_str(String*str);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
const Type_handler *type_handler() const
|
||||
String *val_str(String*str) override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
if (unsigned_flag)
|
||||
return &type_handler_ulonglong;
|
||||
return &type_handler_slonglong;
|
||||
}
|
||||
bool fix_length_and_dec() { decimals=0; max_length=21; return FALSE; }
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override { decimals=0; max_length=21; return FALSE; }
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_udf_int>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1752,8 +1764,8 @@ public:
|
||||
Item_udf_sum(thd, udf_arg, list) {}
|
||||
Item_sum_udf_str(THD *thd, Item_sum_udf_str *item)
|
||||
:Item_udf_sum(thd, item) {}
|
||||
String *val_str(String *);
|
||||
double val_real()
|
||||
String *val_str(String *) override;
|
||||
double val_real() override
|
||||
{
|
||||
int err_not_used;
|
||||
char *end_not_used;
|
||||
@ -1762,7 +1774,7 @@ public:
|
||||
return res ? res->charset()->strntod((char*) res->ptr(),res->length(),
|
||||
&end_not_used, &err_not_used) : 0.0;
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
int err_not_used;
|
||||
char *end;
|
||||
@ -1775,11 +1787,12 @@ public:
|
||||
end= (char*) res->ptr()+res->length();
|
||||
return cs->strtoll10(res->ptr(), &end, &err_not_used);
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *dec);
|
||||
const Type_handler *type_handler() const { return string_type_handler(); }
|
||||
bool fix_length_and_dec();
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
my_decimal *val_decimal(my_decimal *dec) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return string_type_handler(); }
|
||||
bool fix_length_and_dec() override;
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_udf_str>(thd, this); }
|
||||
};
|
||||
|
||||
@ -1793,23 +1806,25 @@ public:
|
||||
Item_udf_sum(thd, udf_arg, list) {}
|
||||
Item_sum_udf_decimal(THD *thd, Item_sum_udf_decimal *item)
|
||||
:Item_udf_sum(thd, item) {}
|
||||
String *val_str(String *str)
|
||||
String *val_str(String *str) override
|
||||
{
|
||||
return VDec(this).to_string_round(str, decimals);
|
||||
}
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
return VDec(this).to_double();
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
return VDec(this).to_longlong(unsigned_flag);
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
const Type_handler *type_handler() const { return &type_handler_newdecimal; }
|
||||
bool fix_length_and_dec() { fix_num_length_and_dec(); return FALSE; }
|
||||
Item *copy_or_same(THD* thd);
|
||||
Item *get_copy(THD *thd)
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_newdecimal; }
|
||||
bool fix_length_and_dec() override
|
||||
{ fix_num_length_and_dec(); return FALSE; }
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_udf_decimal>(thd, this); }
|
||||
};
|
||||
|
||||
@ -2008,31 +2023,31 @@ public:
|
||||
|
||||
Item_func_group_concat(THD *thd, Item_func_group_concat *item);
|
||||
~Item_func_group_concat();
|
||||
void cleanup();
|
||||
void cleanup() override;
|
||||
|
||||
enum Sumfunctype sum_func () const {return GROUP_CONCAT_FUNC;}
|
||||
enum Sumfunctype sum_func () const override {return GROUP_CONCAT_FUNC;}
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING sum_name= {STRING_WITH_LEN("group_concat(") };
|
||||
return sum_name;
|
||||
}
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
if (too_big_for_varchar())
|
||||
return &type_handler_blob;
|
||||
return &type_handler_varchar;
|
||||
}
|
||||
void clear();
|
||||
bool add()
|
||||
void clear() override;
|
||||
bool add() override
|
||||
{
|
||||
return add(skip_nulls());
|
||||
}
|
||||
void reset_field() { DBUG_ASSERT(0); } // not used
|
||||
void update_field() { DBUG_ASSERT(0); } // not used
|
||||
bool fix_fields(THD *,Item **);
|
||||
bool setup(THD *thd);
|
||||
void make_unique();
|
||||
double val_real()
|
||||
void reset_field() override { DBUG_ASSERT(0); } // not used
|
||||
void update_field() override { DBUG_ASSERT(0); } // not used
|
||||
bool fix_fields(THD *,Item **) override;
|
||||
bool setup(THD *thd) override;
|
||||
void make_unique() override;
|
||||
double val_real() override
|
||||
{
|
||||
int error;
|
||||
const char *end;
|
||||
@ -2042,7 +2057,7 @@ public:
|
||||
end= res->ptr() + res->length();
|
||||
return (my_strtod(res->ptr(), (char**) &end, &error));
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
String *res;
|
||||
char *end_ptr;
|
||||
@ -2052,21 +2067,21 @@ public:
|
||||
end_ptr= (char*) res->ptr()+ res->length();
|
||||
return my_strtoll10(res->ptr(), &end_ptr, &error);
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *decimal_value)
|
||||
my_decimal *val_decimal(my_decimal *decimal_value) override
|
||||
{
|
||||
return val_decimal_from_string(decimal_value);
|
||||
}
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return get_date_from_string(thd, ltime, fuzzydate);
|
||||
}
|
||||
String* val_str(String* str);
|
||||
Item *copy_or_same(THD* thd);
|
||||
void no_rows_in_result() {}
|
||||
void print(String *str, enum_query_type query_type);
|
||||
bool change_context_processor(void *cntx)
|
||||
String *val_str(String *str) override;
|
||||
Item *copy_or_same(THD* thd) override;
|
||||
void no_rows_in_result() override {}
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
bool change_context_processor(void *cntx) override
|
||||
{ context= (Name_resolution_context *)cntx; return FALSE; }
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_group_concat>(thd, this); }
|
||||
qsort_cmp2 get_comparator_function_for_distinct();
|
||||
qsort_cmp2 get_comparator_function_for_order_by();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -33,12 +33,9 @@ public:
|
||||
DBUG_ASSERT(a->type() == Item::FIELD_ITEM);
|
||||
}
|
||||
|
||||
virtual bool val_bool();
|
||||
virtual longlong val_int()
|
||||
{
|
||||
return (val_bool() ? 1 : 0);
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool val_bool() override;
|
||||
longlong val_int() override { return val_bool(); }
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
set_maybe_null();
|
||||
null_value= 0;
|
||||
@ -46,13 +43,13 @@ public:
|
||||
max_length= 1;
|
||||
return FALSE;
|
||||
}
|
||||
virtual LEX_CSTRING func_name_cstring() const override
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("is_history") };
|
||||
return name;
|
||||
}
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item *get_copy(THD *thd)
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_history>(thd, this); }
|
||||
};
|
||||
|
||||
@ -67,10 +64,10 @@ public:
|
||||
static LEX_CSTRING commit_name= {STRING_WITH_LEN("trt_commit_ts") };
|
||||
return (trt_field == TR_table::FLD_BEGIN_TS) ? begin_name : commit_name;
|
||||
}
|
||||
bool get_date(THD *thd, MYSQL_TIME *res, date_mode_t fuzzydate);
|
||||
Item *get_copy(THD *thd)
|
||||
bool get_date(THD *thd, MYSQL_TIME *res, date_mode_t fuzzydate) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_trt_ts>(thd, this); }
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{ fix_attributes_datetime(decimals); return FALSE; }
|
||||
};
|
||||
|
||||
@ -105,15 +102,15 @@ public:
|
||||
return NULL_clex_str;
|
||||
}
|
||||
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
bool res= Item_int_func::fix_length_and_dec();
|
||||
max_length= 20;
|
||||
return res;
|
||||
}
|
||||
|
||||
longlong val_int();
|
||||
Item *get_copy(THD *thd)
|
||||
longlong val_int() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_trt_id>(thd, this); }
|
||||
};
|
||||
|
||||
@ -129,8 +126,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("trt_trx_sees") };
|
||||
return name;
|
||||
}
|
||||
longlong val_int();
|
||||
Item *get_copy(THD *thd)
|
||||
longlong val_int() override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_trt_trx_sees>(thd, this); }
|
||||
};
|
||||
|
||||
|
@ -118,28 +118,29 @@ public:
|
||||
Item_sum_row_number(THD *thd)
|
||||
: Item_sum_int(thd), count(0) {}
|
||||
|
||||
const Type_handler *type_handler() const { return &type_handler_slonglong; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_slonglong; }
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
count= 0;
|
||||
}
|
||||
|
||||
bool add()
|
||||
bool add() override
|
||||
{
|
||||
count++;
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void update_field() {}
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
void update_field() override {}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return ROW_NUMBER_FUNC;
|
||||
}
|
||||
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
return count;
|
||||
}
|
||||
@ -149,7 +150,7 @@ public:
|
||||
return name;
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_row_number>(thd, this); }
|
||||
};
|
||||
|
||||
@ -182,26 +183,27 @@ public:
|
||||
|
||||
Item_sum_rank(THD *thd) : Item_sum_int(thd), peer_tracker(NULL) {}
|
||||
|
||||
const Type_handler *type_handler() const { return &type_handler_slonglong; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_slonglong; }
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
/* This is called on partition start */
|
||||
cur_rank= 1;
|
||||
row_number= 0;
|
||||
}
|
||||
|
||||
bool add();
|
||||
bool add() override;
|
||||
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
return cur_rank;
|
||||
}
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void update_field() {}
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
void update_field() override {}
|
||||
|
||||
enum Sumfunctype sum_func () const
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return RANK_FUNC;
|
||||
}
|
||||
@ -212,9 +214,9 @@ public:
|
||||
return name;
|
||||
}
|
||||
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec);
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec) override;
|
||||
|
||||
void cleanup()
|
||||
void cleanup() override
|
||||
{
|
||||
if (peer_tracker)
|
||||
{
|
||||
@ -223,7 +225,7 @@ public:
|
||||
}
|
||||
Item_sum_int::cleanup();
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_rank>(thd, this); }
|
||||
};
|
||||
|
||||
@ -257,23 +259,24 @@ class Item_sum_dense_rank: public Item_sum_int
|
||||
XXX(cvicentiu) This class could potentially be implemented in the rank
|
||||
class, with a switch for the DENSE case.
|
||||
*/
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
dense_rank= 0;
|
||||
first_add= true;
|
||||
}
|
||||
bool add();
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void update_field() {}
|
||||
longlong val_int()
|
||||
bool add() override;
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
void update_field() override {}
|
||||
longlong val_int() override
|
||||
{
|
||||
return dense_rank;
|
||||
}
|
||||
|
||||
Item_sum_dense_rank(THD *thd)
|
||||
: Item_sum_int(thd), dense_rank(0), first_add(true), peer_tracker(NULL) {}
|
||||
const Type_handler *type_handler() const { return &type_handler_slonglong; }
|
||||
enum Sumfunctype sum_func () const
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_slonglong; }
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return DENSE_RANK_FUNC;
|
||||
}
|
||||
@ -284,9 +287,9 @@ class Item_sum_dense_rank: public Item_sum_int
|
||||
return name;
|
||||
}
|
||||
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec);
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec) override;
|
||||
|
||||
void cleanup()
|
||||
void cleanup() override
|
||||
{
|
||||
if (peer_tracker)
|
||||
{
|
||||
@ -295,7 +298,7 @@ class Item_sum_dense_rank: public Item_sum_int
|
||||
}
|
||||
Item_sum_int::cleanup();
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_dense_rank>(thd, this); }
|
||||
};
|
||||
|
||||
@ -312,22 +315,22 @@ class Item_sum_hybrid_simple : public Item_sum_hybrid
|
||||
value(NULL)
|
||||
{ }
|
||||
|
||||
bool add();
|
||||
bool fix_fields(THD *, Item **);
|
||||
bool fix_length_and_dec();
|
||||
bool add() override;
|
||||
bool fix_fields(THD *, Item **) override;
|
||||
bool fix_length_and_dec() override;
|
||||
void setup_hybrid(THD *thd, Item *item);
|
||||
double val_real();
|
||||
longlong val_int();
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
void reset_field();
|
||||
String *val_str(String *);
|
||||
bool val_native(THD *thd, Native *to);
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate);
|
||||
const Type_handler *type_handler() const
|
||||
double val_real() override;
|
||||
longlong val_int() override;
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
void reset_field() override;
|
||||
String *val_str(String *) override;
|
||||
bool val_native(THD *thd, Native *to) override;
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return Type_handler_hybrid_field_type::type_handler(); }
|
||||
void update_field();
|
||||
Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table);
|
||||
void clear()
|
||||
void update_field() override;
|
||||
Field *create_tmp_field(MEM_ROOT *root, bool group, TABLE *table) override;
|
||||
void clear() override
|
||||
{
|
||||
value->clear();
|
||||
null_value= 1;
|
||||
@ -348,7 +351,7 @@ class Item_sum_first_value : public Item_sum_hybrid_simple
|
||||
Item_sum_hybrid_simple(thd, arg_expr) {}
|
||||
|
||||
|
||||
enum Sumfunctype sum_func () const
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return FIRST_VALUE_FUNC;
|
||||
}
|
||||
@ -359,7 +362,7 @@ class Item_sum_first_value : public Item_sum_hybrid_simple
|
||||
return name;
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_first_value>(thd, this); }
|
||||
};
|
||||
|
||||
@ -375,7 +378,7 @@ class Item_sum_last_value : public Item_sum_hybrid_simple
|
||||
Item_sum_last_value(THD* thd, Item* arg_expr) :
|
||||
Item_sum_hybrid_simple(thd, arg_expr) {}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return LAST_VALUE_FUNC;
|
||||
}
|
||||
@ -386,7 +389,7 @@ class Item_sum_last_value : public Item_sum_hybrid_simple
|
||||
return name;
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_last_value>(thd, this); }
|
||||
};
|
||||
|
||||
@ -397,7 +400,7 @@ class Item_sum_nth_value : public Item_sum_hybrid_simple
|
||||
Item_sum_nth_value(THD *thd, Item *arg_expr, Item* offset_expr) :
|
||||
Item_sum_hybrid_simple(thd, arg_expr, offset_expr) {}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return NTH_VALUE_FUNC;
|
||||
}
|
||||
@ -408,7 +411,7 @@ class Item_sum_nth_value : public Item_sum_hybrid_simple
|
||||
return name;
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_nth_value>(thd, this); }
|
||||
};
|
||||
|
||||
@ -419,7 +422,7 @@ class Item_sum_lead : public Item_sum_hybrid_simple
|
||||
Item_sum_lead(THD *thd, Item *arg_expr, Item* offset_expr) :
|
||||
Item_sum_hybrid_simple(thd, arg_expr, offset_expr) {}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return LEAD_FUNC;
|
||||
}
|
||||
@ -430,7 +433,7 @@ class Item_sum_lead : public Item_sum_hybrid_simple
|
||||
return name;
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_lead>(thd, this); }
|
||||
};
|
||||
|
||||
@ -441,7 +444,7 @@ class Item_sum_lag : public Item_sum_hybrid_simple
|
||||
Item_sum_lag(THD *thd, Item *arg_expr, Item* offset_expr) :
|
||||
Item_sum_hybrid_simple(thd, arg_expr, offset_expr) {}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return LAG_FUNC;
|
||||
}
|
||||
@ -452,7 +455,7 @@ class Item_sum_lag : public Item_sum_hybrid_simple
|
||||
return name;
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_lag>(thd, this); }
|
||||
};
|
||||
|
||||
@ -506,7 +509,7 @@ class Item_sum_percent_rank: public Item_sum_double,
|
||||
Item_sum_percent_rank(THD *thd)
|
||||
: Item_sum_double(thd), cur_rank(1), peer_tracker(NULL) {}
|
||||
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
/*
|
||||
Percent rank is a real value so calling the integer value should never
|
||||
@ -516,7 +519,7 @@ class Item_sum_percent_rank: public Item_sum_double,
|
||||
return 0;
|
||||
}
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
/*
|
||||
We can not get the real value without knowing the number of rows
|
||||
@ -529,7 +532,7 @@ class Item_sum_percent_rank: public Item_sum_double,
|
||||
static_cast<double>(cur_rank - 1) / (partition_rows - 1) : 0;
|
||||
}
|
||||
|
||||
enum Sumfunctype sum_func () const
|
||||
enum Sumfunctype sum_func () const override
|
||||
{
|
||||
return PERCENT_RANK_FUNC;
|
||||
}
|
||||
@ -540,33 +543,34 @@ class Item_sum_percent_rank: public Item_sum_double,
|
||||
return name;
|
||||
}
|
||||
|
||||
void update_field() {}
|
||||
void update_field() override {}
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
cur_rank= 1;
|
||||
row_number= 0;
|
||||
}
|
||||
bool add();
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
bool add() override;
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
|
||||
// requires.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec);
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec) override;
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
|
||||
void set_partition_row_count(ulonglong count)
|
||||
void set_partition_row_count(ulonglong count) override
|
||||
{
|
||||
Partition_row_count::set_partition_row_count(count);
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_percent_rank>(thd, this); }
|
||||
|
||||
private:
|
||||
@ -575,7 +579,7 @@ class Item_sum_percent_rank: public Item_sum_double,
|
||||
|
||||
Group_bound_tracker *peer_tracker;
|
||||
|
||||
void cleanup()
|
||||
void cleanup() override
|
||||
{
|
||||
if (peer_tracker)
|
||||
{
|
||||
@ -608,23 +612,23 @@ class Item_sum_cume_dist: public Item_sum_double,
|
||||
Item_sum_cume_dist(THD *thd) :Item_sum_double(thd) { }
|
||||
Item_sum_cume_dist(THD *thd, Item *arg) :Item_sum_double(thd, arg) { }
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
return calc_val_real(&null_value, current_row_count_);
|
||||
}
|
||||
|
||||
bool add()
|
||||
bool add() override
|
||||
{
|
||||
current_row_count_++;
|
||||
return false;
|
||||
}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return CUME_DIST_FUNC;
|
||||
}
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
current_row_count_= 0;
|
||||
partition_row_count_= 0;
|
||||
@ -636,24 +640,25 @@ class Item_sum_cume_dist: public Item_sum_double,
|
||||
return name;
|
||||
}
|
||||
|
||||
void update_field() {}
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
void update_field() override {}
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
|
||||
// requires.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
|
||||
void set_partition_row_count(ulonglong count)
|
||||
void set_partition_row_count(ulonglong count) override
|
||||
{
|
||||
Partition_row_count::set_partition_row_count(count);
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_cume_dist>(thd, this); }
|
||||
|
||||
};
|
||||
@ -667,7 +672,7 @@ class Item_sum_ntile : public Item_sum_int,
|
||||
Item_sum_int(thd, num_quantiles_expr), n_old_val_(0)
|
||||
{ }
|
||||
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
if (get_row_count() == 0)
|
||||
{
|
||||
@ -694,18 +699,18 @@ class Item_sum_ntile : public Item_sum_int,
|
||||
return (current_row_count_ - 1 - extra_rows) / quantile_size + 1;
|
||||
}
|
||||
|
||||
bool add()
|
||||
bool add() override
|
||||
{
|
||||
current_row_count_++;
|
||||
return false;
|
||||
}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return NTILE_FUNC;
|
||||
}
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
current_row_count_= 0;
|
||||
partition_row_count_= 0;
|
||||
@ -718,18 +723,19 @@ class Item_sum_ntile : public Item_sum_int,
|
||||
return name;
|
||||
}
|
||||
|
||||
void update_field() {}
|
||||
void update_field() override {}
|
||||
|
||||
const Type_handler *type_handler() const { return &type_handler_slonglong; }
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_slonglong; }
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
|
||||
void set_partition_row_count(ulonglong count)
|
||||
void set_partition_row_count(ulonglong count) override
|
||||
{
|
||||
Partition_row_count::set_partition_row_count(count);
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_ntile>(thd, this); }
|
||||
|
||||
private:
|
||||
@ -748,7 +754,7 @@ public:
|
||||
value(NULL), val_calculated(FALSE), first_call(TRUE),
|
||||
prev_value(0), order_item(NULL){}
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -759,7 +765,7 @@ public:
|
||||
return value->val_real();
|
||||
}
|
||||
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -770,7 +776,7 @@ public:
|
||||
return value->val_int();
|
||||
}
|
||||
|
||||
my_decimal* val_decimal(my_decimal* dec)
|
||||
my_decimal* val_decimal(my_decimal* dec) override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -781,7 +787,7 @@ public:
|
||||
return value->val_decimal(dec);
|
||||
}
|
||||
|
||||
String* val_str(String *str)
|
||||
String* val_str(String *str) override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -792,7 +798,7 @@ public:
|
||||
return value->val_str(str);
|
||||
}
|
||||
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -803,7 +809,7 @@ public:
|
||||
return value->get_date(thd, ltime, fuzzydate);
|
||||
}
|
||||
|
||||
bool val_native(THD *thd, Native *to)
|
||||
bool val_native(THD *thd, Native *to) override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -814,7 +820,7 @@ public:
|
||||
return value->val_native(thd, to);
|
||||
}
|
||||
|
||||
bool add()
|
||||
bool add() override
|
||||
{
|
||||
Item *arg= get_arg(0);
|
||||
if (arg->is_null())
|
||||
@ -855,12 +861,12 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return PERCENTILE_DISC_FUNC;
|
||||
}
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
val_calculated= false;
|
||||
first_call= true;
|
||||
@ -875,29 +881,29 @@ public:
|
||||
return name;
|
||||
}
|
||||
|
||||
void update_field() {}
|
||||
const Type_handler *type_handler() const
|
||||
void update_field() override {}
|
||||
const Type_handler *type_handler() const override
|
||||
{return Type_handler_hybrid_field_type::type_handler();}
|
||||
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
|
||||
// requires.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
|
||||
void set_partition_row_count(ulonglong count)
|
||||
void set_partition_row_count(ulonglong count) override
|
||||
{
|
||||
Partition_row_count::set_partition_row_count(count);
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_percentile_disc>(thd, this); }
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec);
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec) override;
|
||||
void setup_hybrid(THD *thd, Item *item);
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
|
||||
private:
|
||||
Item_cache *value;
|
||||
@ -916,7 +922,7 @@ public:
|
||||
floor_value(NULL), ceil_value(NULL), first_call(TRUE),prev_value(0),
|
||||
ceil_val_calculated(FALSE), floor_val_calculated(FALSE), order_item(NULL){}
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
if (get_row_count() == 0 || get_arg(0)->is_null())
|
||||
{
|
||||
@ -943,7 +949,7 @@ public:
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
bool add()
|
||||
bool add() override
|
||||
{
|
||||
Item *arg= get_arg(0);
|
||||
if (arg->is_null())
|
||||
@ -993,12 +999,12 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
enum Sumfunctype sum_func() const
|
||||
enum Sumfunctype sum_func() const override
|
||||
{
|
||||
return PERCENTILE_CONT_FUNC;
|
||||
}
|
||||
|
||||
void clear()
|
||||
void clear() override
|
||||
{
|
||||
first_call= true;
|
||||
floor_value->clear();
|
||||
@ -1014,27 +1020,27 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("percentile_cont") };
|
||||
return name;
|
||||
}
|
||||
void update_field() {}
|
||||
void update_field() override {}
|
||||
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
|
||||
// requires.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void reset_field() { DBUG_ASSERT(0); }
|
||||
void reset_field() override { DBUG_ASSERT(0); }
|
||||
|
||||
void set_partition_row_count(ulonglong count)
|
||||
void set_partition_row_count(ulonglong count) override
|
||||
{
|
||||
Partition_row_count::set_partition_row_count(count);
|
||||
}
|
||||
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_sum_percentile_cont>(thd, this); }
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec);
|
||||
void setup_window_func(THD *thd, Window_spec *window_spec) override;
|
||||
void setup_hybrid(THD *thd, Item *item);
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
|
||||
private:
|
||||
Item_cache *floor_value;
|
||||
@ -1072,7 +1078,7 @@ public:
|
||||
|
||||
Item_sum *window_func() const { return (Item_sum *) args[0]; }
|
||||
|
||||
void update_used_tables();
|
||||
void update_used_tables() override;
|
||||
|
||||
/*
|
||||
This is used by filesort to mark the columns it needs to read (because they
|
||||
@ -1083,7 +1089,7 @@ public:
|
||||
have been computed. In that case, window function will need to read its
|
||||
temp.table field. In order to allow that, mark that field in the read_set.
|
||||
*/
|
||||
bool register_field_in_read_map(void *arg)
|
||||
bool register_field_in_read_map(void *arg) override
|
||||
{
|
||||
TABLE *table= (TABLE*) arg;
|
||||
if (result_field && (result_field->table == table || !table))
|
||||
@ -1186,11 +1192,11 @@ public:
|
||||
*/
|
||||
void setup_partition_border_check(THD *thd);
|
||||
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return ((Item_sum *) args[0])->type_handler();
|
||||
}
|
||||
enum Item::Type type() const { return Item::WINDOW_FUNC_ITEM; }
|
||||
enum Item::Type type() const override { return Item::WINDOW_FUNC_ITEM; }
|
||||
|
||||
private:
|
||||
/*
|
||||
@ -1233,7 +1239,7 @@ public:
|
||||
read_value_from_result_field= true;
|
||||
}
|
||||
|
||||
bool is_null()
|
||||
bool is_null() override
|
||||
{
|
||||
if (force_return_blank)
|
||||
return true;
|
||||
@ -1244,7 +1250,7 @@ public:
|
||||
return window_func()->is_null();
|
||||
}
|
||||
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
double res;
|
||||
if (force_return_blank)
|
||||
@ -1265,7 +1271,7 @@ public:
|
||||
return res;
|
||||
}
|
||||
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
longlong res;
|
||||
if (force_return_blank)
|
||||
@ -1286,7 +1292,7 @@ public:
|
||||
return res;
|
||||
}
|
||||
|
||||
String* val_str(String* str)
|
||||
String* val_str(String* str) override
|
||||
{
|
||||
String *res;
|
||||
if (force_return_blank)
|
||||
@ -1309,7 +1315,7 @@ public:
|
||||
return res;
|
||||
}
|
||||
|
||||
bool val_native(THD *thd, Native *to)
|
||||
bool val_native(THD *thd, Native *to) override
|
||||
{
|
||||
if (force_return_blank)
|
||||
return null_value= true;
|
||||
@ -1318,7 +1324,7 @@ public:
|
||||
return val_native_from_item(thd, window_func(), to);
|
||||
}
|
||||
|
||||
my_decimal* val_decimal(my_decimal* dec)
|
||||
my_decimal* val_decimal(my_decimal* dec) override
|
||||
{
|
||||
my_decimal *res;
|
||||
if (force_return_blank)
|
||||
@ -1341,7 +1347,7 @@ public:
|
||||
return res;
|
||||
}
|
||||
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
bool res;
|
||||
if (force_return_blank)
|
||||
@ -1365,9 +1371,9 @@ public:
|
||||
}
|
||||
|
||||
void split_sum_func(THD *thd, Ref_ptr_array ref_pointer_array,
|
||||
List<Item> &fields, uint flags);
|
||||
List<Item> &fields, uint flags) override;
|
||||
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
Type_std_attributes::set(window_func());
|
||||
return FALSE;
|
||||
@ -1379,13 +1385,13 @@ public:
|
||||
return name;
|
||||
}
|
||||
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
|
||||
bool resolve_window_name(THD *thd);
|
||||
|
||||
void print(String *str, enum_query_type query_type);
|
||||
void print(String *str, enum_query_type query_type) override;
|
||||
|
||||
Item *get_copy(THD *thd) { return 0; }
|
||||
Item *get_copy(THD *thd) override { return 0; }
|
||||
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2005, 2019, Oracle and/or its affiliates.
|
||||
Copyright (c) 2009, 2020, MariaDB
|
||||
Copyright (c) 2009, 2021, MariaDB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -141,21 +141,21 @@ public:
|
||||
fltend= (MY_XPATH_FLT*) tmp_native_value.end();
|
||||
nodeset->length(0);
|
||||
}
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_xpath_nodeset;
|
||||
}
|
||||
const Type_handler *fixed_type_handler() const
|
||||
const Type_handler *fixed_type_handler() const override
|
||||
{
|
||||
return &type_handler_xpath_nodeset;
|
||||
}
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param)
|
||||
const Tmp_field_param *param) override
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
return NULL;
|
||||
}
|
||||
String *val_str(String *str)
|
||||
String *val_str(String *str) override
|
||||
{
|
||||
prepare_nodes();
|
||||
val_native(current_thd, &tmp2_native_value);
|
||||
@ -189,7 +189,7 @@ public:
|
||||
}
|
||||
return str;
|
||||
}
|
||||
bool fix_length_and_dec()
|
||||
bool fix_length_and_dec() override
|
||||
{
|
||||
max_length= MAX_BLOB_WIDTH;
|
||||
collation.collation= pxml->charset();
|
||||
@ -202,7 +202,7 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("nodeset") };
|
||||
}
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
bool check_vcol_func_processor(void *arg) override
|
||||
{
|
||||
return mark_unsupported_function(func_name(), arg, VCOL_IMPOSSIBLE);
|
||||
}
|
||||
@ -220,8 +220,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_rootelement") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_rootelement>(thd, this); }
|
||||
};
|
||||
|
||||
@ -236,8 +236,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_union") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_union>(thd, this); }
|
||||
};
|
||||
|
||||
@ -276,8 +276,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_selfbyname") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_selfbyname>(thd, this); }
|
||||
};
|
||||
|
||||
@ -293,8 +293,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_childbyname") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_childbyname>(thd, this); }
|
||||
};
|
||||
|
||||
@ -312,8 +312,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_descendantbyname") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_descendantbyname>(thd, this); }
|
||||
};
|
||||
|
||||
@ -331,8 +331,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_ancestorbyname") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_ancestorbyname>(thd, this); }
|
||||
};
|
||||
|
||||
@ -349,8 +349,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_parentbyname") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_parentbyname>(thd, this); }
|
||||
};
|
||||
|
||||
@ -366,8 +366,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_attributebyname") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_attributebyname>(thd, this); }
|
||||
};
|
||||
|
||||
@ -386,8 +386,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_predicate") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_predicate>(thd, this); }
|
||||
};
|
||||
|
||||
@ -402,8 +402,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_elementbyindex") };
|
||||
}
|
||||
bool val_native(THD *thd, Native *nodeset);
|
||||
Item *get_copy(THD *thd)
|
||||
bool val_native(THD *thd, Native *nodeset) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_func_elementbyindex>(thd, this); }
|
||||
};
|
||||
|
||||
@ -425,7 +425,7 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_cast_bool") };
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
if (args[0]->fixed_type_handler() == &type_handler_xpath_nodeset)
|
||||
{
|
||||
@ -434,7 +434,7 @@ public:
|
||||
}
|
||||
return args[0]->val_real() ? 1 : 0;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_xpath_cast_bool>(thd, this); }
|
||||
};
|
||||
|
||||
@ -450,8 +450,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_cast_number") };
|
||||
}
|
||||
virtual double val_real() { return args[0]->val_real(); }
|
||||
Item *get_copy(THD *thd)
|
||||
double val_real() override { return args[0]->val_real(); }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_xpath_cast_number>(thd, this); }
|
||||
};
|
||||
|
||||
@ -465,12 +465,13 @@ public:
|
||||
Native *native_cache;
|
||||
Item_nodeset_context_cache(THD *thd, Native *native_arg, String *pxml):
|
||||
Item_nodeset_func(thd, pxml), native_cache(native_arg) { }
|
||||
bool val_native(THD *thd, Native *nodeset)
|
||||
bool val_native(THD *, Native *nodeset) override
|
||||
{
|
||||
return nodeset->copy(*native_cache);
|
||||
}
|
||||
bool fix_length_and_dec() { max_length= MAX_BLOB_WIDTH;; return FALSE; }
|
||||
Item *get_copy(THD *thd)
|
||||
bool fix_length_and_dec() override
|
||||
{ max_length= MAX_BLOB_WIDTH; return FALSE; }
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_context_cache>(thd, this); }
|
||||
};
|
||||
|
||||
@ -486,15 +487,15 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_position") };
|
||||
}
|
||||
bool fix_length_and_dec() { max_length=10; return FALSE; }
|
||||
longlong val_int()
|
||||
bool fix_length_and_dec() override { max_length=10; return FALSE; }
|
||||
longlong val_int() override
|
||||
{
|
||||
args[0]->val_native(current_thd, &tmp_native_value);
|
||||
if (tmp_native_value.elements() == 1)
|
||||
return tmp_native_value.element(0).pos + 1;
|
||||
return 0;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_xpath_position>(thd, this); }
|
||||
};
|
||||
|
||||
@ -510,8 +511,8 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_count") };
|
||||
}
|
||||
bool fix_length_and_dec() { max_length=10; return FALSE; }
|
||||
longlong val_int()
|
||||
bool fix_length_and_dec() override { max_length=10; return FALSE; }
|
||||
longlong val_int() override
|
||||
{
|
||||
uint predicate_supplied_context_size;
|
||||
args[0]->val_native(current_thd, &tmp_native_value);
|
||||
@ -520,7 +521,7 @@ public:
|
||||
return predicate_supplied_context_size;
|
||||
return tmp_native_value.elements();
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_xpath_count>(thd, this); }
|
||||
};
|
||||
|
||||
@ -537,7 +538,7 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_sum") };
|
||||
}
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
double sum= 0;
|
||||
args[0]->val_native(current_thd, &tmp_native_value);
|
||||
@ -568,7 +569,7 @@ public:
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_xpath_sum>(thd, this); }
|
||||
};
|
||||
|
||||
@ -612,17 +613,17 @@ public:
|
||||
{
|
||||
return { STRING_WITH_LEN("xpath_nodeset_to_const_comparator") };
|
||||
}
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
bool check_vcol_func_processor(void *arg) override
|
||||
{
|
||||
return mark_unsupported_function(func_name(), arg, VCOL_IMPOSSIBLE);
|
||||
}
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param)
|
||||
const Tmp_field_param *param) override
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
return NULL;
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
Item_func *comp= (Item_func*)args[1];
|
||||
Item_string_xml_non_const *fake=
|
||||
@ -653,7 +654,7 @@ public:
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Item *get_copy(THD *thd)
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_nodeset_to_const_comparator>(thd, this); }
|
||||
};
|
||||
|
||||
|
@ -117,9 +117,9 @@ public:
|
||||
{
|
||||
set_maybe_null();
|
||||
}
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool fix_length_and_dec();
|
||||
bool const_item() const
|
||||
bool fix_fields(THD *thd, Item **ref) override;
|
||||
bool fix_length_and_dec() override;
|
||||
bool const_item() const override
|
||||
{
|
||||
return const_item_cache && (!nodeset_func || nodeset_func->const_item());
|
||||
}
|
||||
@ -136,8 +136,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("extractvalue") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_xml_extractvalue>(thd, this); }
|
||||
};
|
||||
|
||||
@ -157,8 +157,8 @@ public:
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("updatexml") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *);
|
||||
Item *get_copy(THD *thd)
|
||||
String *val_str(String *) override;
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_xml_update>(thd, this); }
|
||||
};
|
||||
|
||||
|
@ -44,9 +44,9 @@ public:
|
||||
this->name.str= name_par;
|
||||
this->name.length= strlen(name_par);
|
||||
}
|
||||
enum Type type() const { return Item::PROC_ITEM; }
|
||||
enum Type type() const override { return Item::PROC_ITEM; }
|
||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||
const Tmp_field_param *param)
|
||||
const Tmp_field_param *param) override
|
||||
{
|
||||
/*
|
||||
We can get to here when using a CURSOR for a query with PROCEDURE:
|
||||
@ -58,19 +58,19 @@ public:
|
||||
virtual void set(double nr)=0;
|
||||
virtual void set(const char *str,uint length,CHARSET_INFO *cs)=0;
|
||||
virtual void set(longlong nr)=0;
|
||||
const Type_handler *type_handler() const=0;
|
||||
const Type_handler *type_handler() const override=0;
|
||||
void set(const char *str) { set(str,(uint) strlen(str), default_charset()); }
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
bool check_vcol_func_processor(void *arg) override
|
||||
{
|
||||
DBUG_ASSERT(0); // impossible
|
||||
return mark_unsupported_function("proc", arg, VCOL_IMPOSSIBLE);
|
||||
}
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate)
|
||||
bool get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzydate) override
|
||||
{
|
||||
return type_handler()->Item_get_date_with_warn(thd, this, ltime, fuzzydate);
|
||||
}
|
||||
Item* get_copy(THD *thd) { return 0; }
|
||||
Item* get_copy(THD *thd) override { return 0; }
|
||||
};
|
||||
|
||||
class Item_proc_real :public Item_proc
|
||||
@ -82,23 +82,24 @@ public:
|
||||
{
|
||||
decimals=dec; max_length=float_length(dec);
|
||||
}
|
||||
const Type_handler *type_handler() const { return &type_handler_double; }
|
||||
void set(double nr) { value=nr; }
|
||||
void set(longlong nr) { value=(double) nr; }
|
||||
void set(const char *str,uint length,CHARSET_INFO *cs)
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_double; }
|
||||
void set(double nr) override { value=nr; }
|
||||
void set(longlong nr) override { value=(double) nr; }
|
||||
void set(const char *str,uint length,CHARSET_INFO *cs) override
|
||||
{
|
||||
int err_not_used;
|
||||
char *end_not_used;
|
||||
value= cs->strntod((char*) str,length, &end_not_used, &err_not_used);
|
||||
}
|
||||
double val_real() { return value; }
|
||||
longlong val_int() { return (longlong) value; }
|
||||
String *val_str(String *s)
|
||||
double val_real() override { return value; }
|
||||
longlong val_int() override { return (longlong) value; }
|
||||
String *val_str(String *s) override
|
||||
{
|
||||
s->set_real(value,decimals,default_charset());
|
||||
return s;
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
@ -108,20 +109,21 @@ class Item_proc_int :public Item_proc
|
||||
public:
|
||||
Item_proc_int(THD *thd, const char *name_par): Item_proc(thd, name_par)
|
||||
{ max_length=11; }
|
||||
const Type_handler *type_handler() const
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
if (unsigned_flag)
|
||||
return &type_handler_ulonglong;
|
||||
return &type_handler_slonglong;
|
||||
}
|
||||
void set(double nr) { value=(longlong) nr; }
|
||||
void set(longlong nr) { value=nr; }
|
||||
void set(const char *str,uint length, CHARSET_INFO *cs)
|
||||
void set(double nr) override { value=(longlong) nr; }
|
||||
void set(longlong nr) override { value=nr; }
|
||||
void set(const char *str,uint length, CHARSET_INFO *cs) override
|
||||
{ int err; value= cs->strntoll(str,length,10,NULL,&err); }
|
||||
double val_real() { return (double) value; }
|
||||
longlong val_int() { return value; }
|
||||
String *val_str(String *s) { s->set(value, default_charset()); return s; }
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
double val_real() override { return (double) value; }
|
||||
longlong val_int() override { return value; }
|
||||
String *val_str(String *s) override
|
||||
{ s->set(value, default_charset()); return s; }
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
@ -131,12 +133,13 @@ class Item_proc_string :public Item_proc
|
||||
public:
|
||||
Item_proc_string(THD *thd, const char *name_par, uint length):
|
||||
Item_proc(thd, name_par) { this->max_length=length; }
|
||||
const Type_handler *type_handler() const { return &type_handler_varchar; }
|
||||
void set(double nr) { str_value.set_real(nr, 2, default_charset()); }
|
||||
void set(longlong nr) { str_value.set(nr, default_charset()); }
|
||||
void set(const char *str, uint length, CHARSET_INFO *cs)
|
||||
const Type_handler *type_handler() const override
|
||||
{ return &type_handler_varchar; }
|
||||
void set(double nr) override { str_value.set_real(nr, 2, default_charset()); }
|
||||
void set(longlong nr) override { str_value.set(nr, default_charset()); }
|
||||
void set(const char *str, uint length, CHARSET_INFO *cs) override
|
||||
{ str_value.copy(str,length,cs); }
|
||||
double val_real()
|
||||
double val_real() override
|
||||
{
|
||||
int err_not_used;
|
||||
char *end_not_used;
|
||||
@ -144,17 +147,17 @@ public:
|
||||
return cs->strntod((char*) str_value.ptr(), str_value.length(),
|
||||
&end_not_used, &err_not_used);
|
||||
}
|
||||
longlong val_int()
|
||||
longlong val_int() override
|
||||
{
|
||||
int err;
|
||||
CHARSET_INFO *cs=str_value.charset();
|
||||
return cs->strntoll(str_value.ptr(),str_value.length(),10,NULL,&err);
|
||||
}
|
||||
String *val_str(String*)
|
||||
String *val_str(String*) override
|
||||
{
|
||||
return null_value ? (String*) 0 : (String*) &str_value;
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
my_decimal *val_decimal(my_decimal *) override;
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
|
@ -60,7 +60,8 @@ public:
|
||||
Spvar_definition field_def;
|
||||
|
||||
/// Field-type of the SP-variable.
|
||||
const Type_handler *type_handler() const { return field_def.type_handler(); }
|
||||
const Type_handler *type_handler() const
|
||||
{ return field_def.type_handler(); }
|
||||
|
||||
public:
|
||||
sp_variable(const LEX_CSTRING *name_arg, uint offset_arg)
|
||||
|
@ -6985,7 +6985,8 @@ public:
|
||||
~my_var_sp() { }
|
||||
bool set(THD *thd, Item *val);
|
||||
my_var_sp *get_my_var_sp() { return this; }
|
||||
const Type_handler *type_handler() const { return m_type_handler; }
|
||||
const Type_handler *type_handler() const
|
||||
{ return m_type_handler; }
|
||||
sp_rcontext *get_rcontext(sp_rcontext *local_ctx) const;
|
||||
};
|
||||
|
||||
|
@ -1960,8 +1960,8 @@ class store_key_field: public store_key
|
||||
}
|
||||
}
|
||||
|
||||
enum Type type() const { return FIELD_STORE_KEY; }
|
||||
const char *name() const { return field_name; }
|
||||
enum Type type() const override { return FIELD_STORE_KEY; }
|
||||
const char *name() const override { return field_name; }
|
||||
|
||||
void change_source_field(Item_field *fld_item)
|
||||
{
|
||||
@ -1970,7 +1970,7 @@ class store_key_field: public store_key
|
||||
}
|
||||
|
||||
protected:
|
||||
enum store_key_result copy_inner()
|
||||
enum store_key_result copy_inner() override
|
||||
{
|
||||
TABLE *table= copy_field.to_field->table;
|
||||
MY_BITMAP *old_map= dbug_tmp_use_all_columns(table,
|
||||
@ -2013,11 +2013,11 @@ public:
|
||||
{}
|
||||
|
||||
|
||||
enum Type type() const { return ITEM_STORE_KEY; }
|
||||
const char *name() const { return "func"; }
|
||||
enum Type type() const override { return ITEM_STORE_KEY; }
|
||||
const char *name() const override { return "func"; }
|
||||
|
||||
protected:
|
||||
enum store_key_result copy_inner()
|
||||
enum store_key_result copy_inner() override
|
||||
{
|
||||
TABLE *table= to_field->table;
|
||||
MY_BITMAP *old_map= dbug_tmp_use_all_columns(table,
|
||||
@ -2066,12 +2066,12 @@ public:
|
||||
:store_key_item(arg, new_item, FALSE), inited(0)
|
||||
{}
|
||||
|
||||
enum Type type() const { return CONST_ITEM_STORE_KEY; }
|
||||
const char *name() const { return "const"; }
|
||||
bool store_key_is_const() { return true; }
|
||||
enum Type type() const override { return CONST_ITEM_STORE_KEY; }
|
||||
const char *name() const override { return "const"; }
|
||||
bool store_key_is_const() override { return true; }
|
||||
|
||||
protected:
|
||||
enum store_key_result copy_inner()
|
||||
enum store_key_result copy_inner() override
|
||||
{
|
||||
int res;
|
||||
if (!inited)
|
||||
|
@ -54,12 +54,12 @@ public:
|
||||
DBUG_ENTER("analyze");
|
||||
DBUG_RETURN(HA_ERR_TABLE_READONLY);
|
||||
}
|
||||
int repair(THD *, HA_CHECK_OPT *) override
|
||||
int repair(THD * thd, HA_CHECK_OPT * check_opt) override
|
||||
{
|
||||
DBUG_ENTER("repair");
|
||||
DBUG_RETURN(HA_ERR_TABLE_READONLY);
|
||||
}
|
||||
int preload_keys(THD *, HA_CHECK_OPT *) override
|
||||
int preload_keys(THD * thd, HA_CHECK_OPT * check_opt) override
|
||||
{
|
||||
DBUG_ENTER("preload_keys");
|
||||
DBUG_RETURN(HA_ERR_TABLE_READONLY);
|
||||
|
Loading…
x
Reference in New Issue
Block a user