1#ifndef ITEM_CMPFUNC_INCLUDED
2#define ITEM_CMPFUNC_INCLUDED
249 if ((*left)->is_temporal()) (*left)->cmp_context =
INT_RESULT;
250 if ((*right)->is_temporal()) (*right)->cmp_context =
INT_RESULT;
402 const char *
func_name()
const override {
return "true"; }
418 const char *
func_name()
const override {
return "false"; }
422 str->append(
"false");
541 const char *
func_name()
const override {
return "<in_optimizer>"; }
553 virtual const char *
symbol(
bool invert)
const = 0;
566 bool eqne_op()
const override {
return true; }
567 bool l_op()
const override {
return false; }
585 const char *
symbol(
bool invert)
const override {
return invert ?
"<>" :
"="; }
589 Item *b)
const override;
596 const char *
symbol(
bool invert [[maybe_unused]])
const override {
604 Item *b)
const override;
611 const char *
symbol(
bool invert)
const override {
return invert ?
"=" :
"<>"; }
615 Item *b)
const override;
623 const char *
symbol(
bool invert)
const override {
return invert ?
"<=" :
">"; }
624 bool eqne_op()
const override {
return false; }
625 bool l_op()
const override {
return false; }
631 const char *
symbol(
bool invert)
const override {
return invert ?
">=" :
"<"; }
632 bool eqne_op()
const override {
return false; }
633 bool l_op()
const override {
return true; }
639 const char *
symbol(
bool invert)
const override {
return invert ?
"<" :
">="; }
640 bool eqne_op()
const override {
return false; }
641 bool l_op()
const override {
return false; }
647 const char *
symbol(
bool invert)
const override {
return invert ?
">" :
"<="; }
648 bool eqne_op()
const override {
return false; }
649 bool l_op()
const override {
return true; }
721 Item *
const subst)
override {
760 double rows_in_table)
override;
778 const char *
func_name()
const override {
return "xor"; }
787 double rows_in_table)
override;
797 const char *
func_name()
const override {
return "not"; }
805 double rows_in_table)
override;
826 const char *
func_name()
const override {
return "match"; }
835 double rows_in_table)
override {
837 fields_to_ignore, rows_in_table);
931 const char *
func_name()
const override {
return "<if>"; }
943 assert(
m_join !=
nullptr);
993 const char *
func_name()
const override {
return "<not>"; }
1072 bool is_multi_column_key,
1073 String *join_key_buffer) const;
1129 double rows_in_table)
override;
1206 double rows_in_table)
override;
1268 const char *
func_name()
const override {
return "reject_if"; }
1276 double rows_in_table)
override;
1312 static constexpr double kMinSelectivityForUnknownValue = 0.2;
1329 double rows_in_table)
override;
1348 :
Item_int_func(pos, a, b, c), negated(false), pred_level(false) {
1349 if (is_negation) negate();
1353 if (is_negation) negate();
1366 Item *
const subst)
override {
1379 obj->
add_alias(
"negated", create_dom_ptr<Json_boolean>(negated));
1390 bool compare_as_datetimes_with_strings{
false};
1391 bool compare_as_dates{
false};
1392 bool compare_as_times{
false};
1393 bool compare_as_datetimes{
false};
1402 const char *
func_name()
const override {
return "between"; }
1420 double rows_in_table)
override;
1425 if (pred_level && !negated)
return;
1473 :
super(pos, alloc_row(pos,
mem_root, expr1, expr2, opt_expr_list)),
1482 const char *
func_name()
const override {
return "interval"; }
1517 double real_op()
override;
1526 bool time_op(
Time_val *time)
override;
1533 const char *
func_name()
const override {
return "coalesce"; }
1541 double real_op()
override;
1546 bool time_op(
Time_val *time)
override;
1562 const char *
func_name()
const override {
return "any_value"; }
1569 bool m_phase_post{
false};
1686 uint m_used_size{0};
1741 bool fill(
Item **items, uint item_count);
1773 down_cast<Item_basic_constant *>(item)->set_str_value(base_pointers[pos]);
1775 bool find_item(
Item *item)
override;
1776 bool compare_elems(uint pos1, uint pos2)
const override;
1780 bool set(uint pos,
Item *item)
override;
1781 void sort_array()
override;
1805 down_cast<Item_int *>(item)->value = base[pos].val;
1808 bool find_item(
Item *item)
override;
1809 bool compare_elems(uint pos1, uint pos2)
const override;
1812 bool set(uint pos,
Item *item)
override {
return val_item(item, &base[pos]); }
1813 void sort_array()
override;
1814 virtual bool val_item(
Item *item, packed_longlong *
result);
1825 down_cast<Item_cache_time *>(item)->store_value(base[pos]);
1827 bool find_item(
Item *item)
override;
1828 bool compare_elems(uint pos1, uint pos2)
const override;
1833 bool set(uint pos,
Item *item)
override;
1834 void sort_array()
override;
1845 down_cast<Item_cache_date *>(item)->store_value(m_base[pos]);
1847 bool find_item(
Item *item)
override;
1848 bool compare_elems(uint pos1, uint pos2)
const override;
1853 bool set(uint pos,
Item *item)
override;
1854 void sort_array()
override;
1873 bool set(uint pos,
Item *item)
override;
1874 bool val_item(
Item *item, packed_longlong *
result)
override;
1887 down_cast<Item_float *>(item)->value = base[pos];
1889 bool find_item(
Item *item)
override;
1890 bool compare_elems(uint pos1, uint pos2)
const override;
1893 bool set(uint pos,
Item *item)
override;
1894 void sort_array()
override;
1907 down_cast<Item_decimal *>(item)->set_decimal_value(&base[pos]);
1909 bool find_item(
Item *item)
override;
1910 bool compare_elems(uint pos1, uint pos2)
const override;
1913 bool set(uint pos,
Item *item)
override;
1914 void sort_array()
override;
1982 const cmp_item_string *l_cmp = down_cast<const cmp_item_string *>(ci);
2021 void store_value(
Item *item)
override;
2039 const cmp_item_int *l_cmp = down_cast<const cmp_item_int *>(ci);
2040 return (value < l_cmp->
value) ? -1 : ((
value == l_cmp->
value) ? 0 : 1);
2060 void store_value(
Item *item)
override;
2079 const cmp_item_real *l_cmp = down_cast<const cmp_item_real *>(ci);
2080 return (value < l_cmp->
value) ? -1 : ((
value == l_cmp->
value) ? 0 : 1);
2089 void store_value(
Item *item)
override;
2130 create_dom_ptr<Json_boolean>(get_first_expr_num() != -1));
2135 Item *first_expr_arg,
Item *else_expr_arg)
2143 ncases =
list->size();
2144 if (first_expr_arg) {
2145 first_expr_num =
list->size();
2146 list->push_back(first_expr_arg);
2148 if (else_expr_arg) {
2149 else_expr_num =
list->size();
2150 list->push_back(else_expr_arg);
2153 memset(&cmp_items, 0,
sizeof(cmp_items));
2184 m_masking_expression_for = masked_item;
2209 bool have_null{
false};
2211 bool m_populated{
false};
2215 bool m_values_are_const{
true};
2217 bool m_need_populate{
false};
2223 bool dep_subq_in_list{
false};
2225 bool first_resolve_call{
true};
2234 memset(&cmp_items, 0,
sizeof(cmp_items));
2254 bool populate_bisection(
THD *thd);
2271 double rows_in_table)
override;
2275 if (pred_level && negated)
return;
2281 for (
Item **arg =
args + 1; arg != arg_end; arg++)
2287 void set_no_constant_propagation();
2295 bool list_contains_null();
2317 float get_single_col_filtering_effect(
Item_ident *fieldref,
2320 double rows_in_table);
2321 void cleanup_arrays();
2333 allocate_template_comparators(thd, item);
2338 : comparators(other.comparators),
n(other.
n) {
2339 other.comparators =
nullptr;
2344 Item *arg)
override;
2345 void store_value(
Item *item)
override;
2349 void store_value_by_template(
cmp_item *tmpl,
Item *)
override;
2351 for (uint i = 0; i <
n; i++) {
2352 comparators[i]->set_null_value(nv);
2366 bool allocate_template_comparators(
THD *thd,
Item *item);
2388 bool find_item(
Item *item)
override;
2389 bool compare_elems(uint pos1, uint pos2)
const override;
2398 bool set(uint pos,
Item *item)
override;
2399 void sort_array()
override;
2407 bool cache_used =
false;
2425 double rows_in_table)
override;
2452 const char *
func_name()
const override {
return "<is_not_null_test>"; }
2482 const char *
func_name()
const override {
return "isnotnull"; }
2497 double rows_in_table)
override;
2502 bool escape_is_const =
false;
2504 bool escape_evaluated =
false;
2505 bool eval_escape_clause(
THD *thd);
2513 assert(escape_arg !=
nullptr);
2517 assert(escape_arg !=
nullptr);
2545 assert(escape_is_evaluated());
2560 double rows_in_table)
override;
2572 bool check_covering_prefix_keys(
THD *thd);
2602 return list.push_back(item);
2606 return list.push_front(item);
2610 list.prepend(nlist);
2621 bool eq(
const Item *item)
const override;
2634 bool truth_transform_arguments(
THD *thd,
Bool_test test);
2638 bool remove_const_conds(
THD *thd,
Item *item,
Item **new_item);
2722 bool m_always_false{
false};
2724 bool compare_as_dates{
false};
2761 bool update_const(
THD *thd);
2764 const char *
func_name()
const override {
return "multiple equal"; }
2774 return const_arg() ==
nullptr;
2792 template <
typename Node_cmp_func>
2804 return m_fields->cbegin();
2808 return m_fields->cbegin();
2811 return m_fields->cend();
2820 : m_fields(&item->fields) {}
2822 return m_fields->cbegin();
2826 return m_fields->cbegin();
2829 return m_fields->cend();
2831 size_t size()
const {
return m_fields->size(); }
2848 return fields.
head()->collation.collation;
2858 double rows_in_table)
override;
2860 Item *m_const_folding[2]{
nullptr,
nullptr};
2903 double rows_in_table)
override;
2934 double rows_in_table)
override;
2943 if (item ==
nullptr)
return nullptr;
2988 down_cast<const Item_cond *>(item)->functype() ==
2998template <
class Func>
3000 if (condition ==
nullptr) {
3002 }
else if (
IsAnd(condition)) {
3003 for (
Item &item : *down_cast<Item_cond_and *>(condition)->argument_list()) {
3010 return func(condition);
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:247
Definition: item_cmpfunc.h:145
Arg_comparator(Arg_comparator &&)=default
bool inject_cast_nodes()
Comparison function are expected to operate on arguments having the same data types.
Definition: item_cmpfunc.cc:1504
void cleanup()
Definition: item_cmpfunc.cc:879
uint get_child_comparator_count() const
Definition: item_cmpfunc.h:255
int compare_int_signed_unsigned()
Compare signed (*left) with unsigned (*B)
Definition: item_cmpfunc.cc:2174
int compare_time()
Compare TIME values.
Definition: item_cmpfunc.cc:2093
String value1
Definition: item_cmpfunc.h:173
bool set_compare_func(Item_func *owner, Item_result type)
Definition: item_cmpfunc.cc:897
Item * left_cache
Definition: item_cmpfunc.h:154
longlong(* get_value_a_func)(THD *thd, Item ***item_arg, Item **cache_arg, const Item *warn_item, bool *is_null)
A function pointer that is used for retrieving the value from argument "left".
Definition: item_cmpfunc.h:292
int compare_int_unsigned_signed()
Compare unsigned (*left) with signed (*B)
Definition: item_cmpfunc.cc:2195
Arg_comparator * comparators
Definition: item_cmpfunc.h:150
Item_result m_compare_type
Definition: item_cmpfunc.h:302
Arg_comparator * get_child_comparators() const
Definition: item_cmpfunc.h:257
static bool can_compare_as_dates(const Item *a, const Item *b)
Checks whether compare_datetime() can be used to compare items.
Definition: item_cmpfunc.cc:1183
double precision
Definition: item_cmpfunc.h:152
int compare_datetime()
Compare item values as dates.
Definition: item_cmpfunc.cc:1833
uint16 comparator_count
Definition: item_cmpfunc.h:151
Item ** right
Definition: item_cmpfunc.h:147
arg_cmp_func func
Definition: item_cmpfunc.h:148
String value2
Definition: item_cmpfunc.h:173
Item_func * owner
Definition: item_cmpfunc.h:149
Item ** left
Definition: item_cmpfunc.h:146
Item ** get_left_ptr() const
Definition: item_cmpfunc.h:274
Json_scalar_holder * json_scalar
Only used by compare_json() in the case where a JSON value is compared to an SQL value.
Definition: item_cmpfunc.h:168
void set_cmp_context_for_datetime()
Definition: item_cmpfunc.h:247
static arg_cmp_func comparator_matrix[5]
Definition: item_cmpfunc.h:242
bool use_custom_value_extractors() const
Definition: item_cmpfunc.h:263
int compare()
Definition: item_cmpfunc.h:221
Item_result get_compare_type() const
Definition: item_cmpfunc.h:253
int compare_int_signed()
Definition: item_cmpfunc.cc:2067
int compare_binary_string()
Compare strings byte by byte.
Definition: item_cmpfunc.cc:1992
bool set_cmp_func(Item_func *owner_arg, Item **left, Item **right, Item_result type)
Sets compare functions for various datatypes.
Definition: item_cmpfunc.cc:1260
Arg_comparator & operator=(const Arg_comparator &)=delete
bool compare_as_json() const
Definition: item_cmpfunc.h:259
Item * get_right() const
Definition: item_cmpfunc.h:275
int compare_json()
Compare two Item objects as JSON.
Definition: item_cmpfunc.cc:1925
int compare_real()
Definition: item_cmpfunc.cc:2010
void set_datetime_cmp_func(Item_func *owner_arg, Item **a1, Item **b1)
Definition: item_cmpfunc.cc:1662
bool set_null
Definition: item_cmpfunc.h:156
Arg_comparator & operator=(Arg_comparator &&)=default
static bool get_date_from_const(Item *date_arg, Item *str_arg, ulonglong *const_value)
Check if str_arg is a constant and convert it to datetime packed value.
Definition: item_cmpfunc.cc:1109
bool try_year_cmp_func(Item_result type)
Definition: item_cmpfunc.cc:1605
Item * right_cache
Definition: item_cmpfunc.h:155
Arg_comparator(const Arg_comparator &)=delete
longlong(* get_value_b_func)(THD *thd, Item ***item_arg, Item **cache_arg, const Item *warn_item, bool *is_null)
Definition: item_cmpfunc.h:297
int compare_real_fixed()
Definition: item_cmpfunc.cc:2049
longlong extract_value_from_argument(THD *thd, Item *item, bool left_argument, bool *is_null) const
Definition: item_cmpfunc.cc:8560
int compare_string()
Definition: item_cmpfunc.cc:1960
int compare_decimal()
Definition: item_cmpfunc.cc:2028
int compare_row()
Definition: item_cmpfunc.cc:2213
bool compare_null_values()
Compare NULL values for two arguments.
Definition: item_cmpfunc.cc:2325
DTCollation cmp_collation
Definition: item_cmpfunc.h:171
Arg_comparator(Item **left, Item **right)
Definition: item_cmpfunc.h:182
int compare_date()
Compare DATE values.
Definition: item_cmpfunc.cc:2129
int compare_int_unsigned()
Compare values as BIGINT UNSIGNED.
Definition: item_cmpfunc.cc:2147
Abstract factory interface for creating comparison predicates.
Definition: item_cmpfunc.h:547
virtual ~Comp_creator()=default
virtual bool l_op() const =0
virtual bool eqne_op() const =0
virtual const char * symbol(bool invert) const =0
This interface is only used by Item_allany_subselect.
virtual Item_bool_func * create(const POS &pos, Item *a, Item *b) const =0
const CHARSET_INFO * collation
Definition: item.h:186
Date_val is a temporal type that represents dates within the range 0000-01-01 and 9999-12-31.
Definition: my_temporal.h:421
Definition: my_temporal.h:341
Definition: item_cmpfunc.h:583
Item_bool_func * combine(const POS &pos, List< Item > list) const override
Combines a list of conditions exp op exp.
Definition: item_cmpfunc.cc:415
Item_bool_func * create_scalar_predicate(const POS &pos, Item *a, Item *b) const override
Creates only an item tree node, without attempting to rewrite row constructors.
Definition: item_cmpfunc.cc:409
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:585
Definition: item_cmpfunc.h:594
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:596
Item_bool_func * combine(const POS &pos, List< Item > list) const override
Combines a list of conditions exp op exp.
Definition: item_cmpfunc.cc:425
Item_bool_func * create_scalar_predicate(const POS &pos, Item *a, Item *b) const override
Creates only an item tree node, without attempting to rewrite row constructors.
Definition: item_cmpfunc.cc:419
Definition: item_cmpfunc.h:636
Item_bool_func * create(const POS &pos, Item *a, Item *b) const override
Definition: item_cmpfunc.cc:447
bool l_op() const override
Definition: item_cmpfunc.h:641
bool eqne_op() const override
Definition: item_cmpfunc.h:640
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:639
Definition: item_cmpfunc.h:620
bool l_op() const override
Definition: item_cmpfunc.h:625
Item_bool_func * create(const POS &pos, Item *a, Item *b) const override
Definition: item_cmpfunc.cc:439
bool eqne_op() const override
Definition: item_cmpfunc.h:624
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:623
A class that represents a join condition in a hash join.
Definition: item_cmpfunc.h:92
const size_t m_max_character_length
Definition: item_cmpfunc.h:131
const table_map m_right_used_tables
Definition: item_cmpfunc.h:125
Item_eq_base * m_join_condition
Definition: item_cmpfunc.h:117
Item * right_extractor() const
Definition: item_cmpfunc.h:99
HashJoinCondition(Item_eq_base *join_condition, MEM_ROOT *mem_root)
Definition: item_cmpfunc.cc:8525
const table_map m_left_used_tables
Definition: item_cmpfunc.h:124
bool store_full_sort_key() const
Definition: item_cmpfunc.h:110
bool left_uses_any_table(table_map tables) const
Definition: item_cmpfunc.h:100
bool m_store_full_sort_key
Definition: item_cmpfunc.h:139
Item * left_extractor() const
Definition: item_cmpfunc.h:98
Item_eq_base * join_condition() const
Definition: item_cmpfunc.h:96
bool m_null_equals_null
Definition: item_cmpfunc.h:142
Item * m_right_extractor
Definition: item_cmpfunc.h:119
bool right_uses_any_table(table_map tables) const
Definition: item_cmpfunc.h:104
Item * m_left_extractor
Definition: item_cmpfunc.h:118
size_t max_character_length() const
Definition: item_cmpfunc.h:108
bool null_equals_null() const
Returns true if this join condition evaluates to TRUE if both operands are NULL.
Definition: item_cmpfunc.h:114
Definition: item_cmpfunc.h:1837
In_vector_date(MEM_ROOT *mem_root, uint elements)
Definition: item_cmpfunc.h:1839
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1841
void value_to_item(uint pos, Item *item) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:1844
Mem_root_array< Date_val > m_base
Definition: item_cmpfunc.h:1851
Definition: item_cmpfunc.h:1861
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1868
Item * warn_item
An item used to issue warnings.
Definition: item_cmpfunc.h:1863
In_vector_datetime(MEM_ROOT *mem_root, Item *warn_item_arg, uint elements)
Definition: item_cmpfunc.h:1866
Definition: item_cmpfunc.h:1897
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1903
Mem_root_array< my_decimal > base
Definition: item_cmpfunc.h:1898
void value_to_item(uint pos, Item *item) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:1906
In_vector_decimal(MEM_ROOT *mem_root, uint elements)
Definition: item_cmpfunc.h:1901
Definition: item_cmpfunc.h:1877
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1883
Mem_root_array< double > base
Definition: item_cmpfunc.h:1878
In_vector_double(MEM_ROOT *mem_root, uint elements)
Definition: item_cmpfunc.h:1881
void value_to_item(uint pos, Item *item) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:1886
Definition: item_cmpfunc.h:1784
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1797
Mem_root_array< packed_longlong > base
Definition: item_cmpfunc.h:1792
In_vector_int(MEM_ROOT *mem_root, uint elements)
Definition: item_cmpfunc.h:1795
void value_to_item(uint pos, Item *item) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:1804
bool set(uint pos, Item *item) override
Evaluate item and set value into element "pos" of the vector.
Definition: item_cmpfunc.h:1812
Definition: item_cmpfunc.h:1759
String tmp
Definition: item_cmpfunc.h:1761
const CHARSET_INFO * collation
Definition: item_cmpfunc.h:1765
Mem_root_array< String * > base_pointers
Definition: item_cmpfunc.h:1764
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1769
Mem_root_array< String > base_objects
Definition: item_cmpfunc.h:1762
void value_to_item(uint pos, Item *item) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:1772
Definition: item_cmpfunc.h:1817
Mem_root_array< Time_val > base
Definition: item_cmpfunc.h:1831
In_vector_time(MEM_ROOT *mem_root, uint elements)
Definition: item_cmpfunc.h:1819
void value_to_item(uint pos, Item *item) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:1824
Item * create_item(MEM_ROOT *mem_root) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:1821
Definition: item_cmpfunc.h:1682
virtual void sort_array()=0
Sort the IN-list array, so we can do efficient lookup with binary_search.
const uint m_size
Size of the vector.
Definition: item_cmpfunc.h:1684
virtual bool find_item(Item *item)=0
Calls item->val_int() or item->val_str() etc.
virtual bool is_row_result() const
Definition: item_cmpfunc.h:1728
virtual bool compare_elems(uint pos1, uint pos2) const =0
Compare values number pos1 and pos2 for equality.
virtual void value_to_item(uint pos, Item *item) const =0
Store the value at position pos into provided item object.
virtual bool set(uint pos, Item *item)=0
Evaluate item and set value into element "pos" of the vector.
virtual Item * create_item(MEM_ROOT *mem_root) const =0
Create an instance of Item_{type} (e.g.
virtual ~In_vector()=default
virtual void cleanup()
Definition: item_cmpfunc.h:1742
In_vector(uint elements)
See Item_func_in::resolve_type() for why we need both count and used_count.
Definition: item_cmpfunc.h:1692
Base class for functions that usually take two arguments, which are possibly strings,...
Definition: item_cmpfunc.h:658
bool allow_replacement(Item_field *const original, Item *const subst) override
Check whether a function allows replacement of a field with another item: In particular,...
Definition: item_cmpfunc.h:720
bool have_rev_func() const override
Definition: item_cmpfunc.h:698
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:694
bool abort_on_null
Definition: item_cmpfunc.h:665
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:710
bool convert_constant_arg(THD *thd, Item *field, Item **item, bool *converted)
Definition: item_cmpfunc.cc:727
Item_result compare_type() const
Definition: item_cmpfunc.h:709
Arg_comparator cmp
Definition: item_cmpfunc.h:664
Item_bool_func2(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:678
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.cc:745
Item_bool_func2(Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:670
Item_bool_func2(Item *a, Item *b)
Definition: item_cmpfunc.h:667
virtual bool set_cmp_func()
Sets up a comparator of the correct type based on the type of the function's arguments.
Definition: item_cmpfunc.h:691
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:706
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_cmpfunc.h:705
Item_bool_func2(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:673
virtual enum Functype rev_functype() const
Definition: item_cmpfunc.h:697
bool ignore_unknown() const
Treat UNKNOWN result like FALSE because callers see no difference.
Definition: item_cmpfunc.h:712
const Arg_comparator * get_comparator() const
Definition: item_cmpfunc.h:717
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:700
Item * replace_scalar_subquery(uchar *) override
When walking the item tree seeing an Item_singlerow_subselect matching a target, replace it with a su...
Definition: item_cmpfunc.cc:872
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_cmpfunc.h:713
Definition: item_cmpfunc.h:305
Item_bool_func(Item *a)
Definition: item_cmpfunc.h:312
Item_bool_func(Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:317
Item_bool_func(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:323
bool m_created_by_in2exists
True <=> this item was added by IN->EXISTS subquery transformation, and should thus be deleted if we ...
Definition: item_cmpfunc.h:368
void set_created_by_in2exists()
Definition: item_cmpfunc.h:345
bool created_by_in2exists() const override
Whether this Item was created by the IN->EXISTS subquery transformation.
Definition: item_cmpfunc.h:344
Item_bool_func(const POS &pos)
Definition: item_cmpfunc.h:308
Item_bool_func(THD *thd, Item_bool_func *item)
Definition: item_cmpfunc.h:331
Item_bool_func(Item *a, Item *b)
Definition: item_cmpfunc.h:320
static const Bool_test bool_simplify[10]
Array used to simplify a boolean test when value cannot be NULL.
Definition: item_cmpfunc.h:361
Item_bool_func(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:326
virtual Item_bool_func * negate_item()
Definition: item_cmpfunc.h:347
uint decimal_precision() const override
Definition: item_cmpfunc.h:343
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.h:339
Item_bool_func(const POS &pos, Item *a)
Definition: item_cmpfunc.h:313
bool is_bool_func() const override
Definition: item_cmpfunc.h:338
Item_bool_func()
Definition: item_cmpfunc.h:307
static const Bool_test bool_transform[10][8]
Array that transforms a boolean test according to another.
Definition: item_cmpfunc.h:357
static const char * bool_transform_names[10]
Definition: item_cmpfunc.h:352
IF function with result fixed as boolean value.
Definition: item_cmpfunc.h:1619
enum Functype functype() const override
Definition: item_cmpfunc.h:1635
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.h:1630
Item_bool_if(Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:1621
const char * func_name() const override
Definition: item_cmpfunc.h:1634
longlong val_int() override
Definition: item_cmpfunc.h:1624
Definition: item_cmpfunc.h:2873
Item_cond_and(const POS &pos, List< Item > &list_arg)
Definition: item_cmpfunc.h:2885
Item * copy_andor_structure(THD *thd) override
Definition: item_cmpfunc.h:2891
Item_cond_and(List< Item > &list_arg)
Definition: item_cmpfunc.h:2884
COND_EQUAL cond_equal
Contains list of Item_multi_eq objects for the current conjunction and references to multiple equalit...
Definition: item_cmpfunc.h:2877
const char * func_name() const override
Definition: item_cmpfunc.h:2890
enum Functype functype() const override
Definition: item_cmpfunc.h:2887
Item_cond_and()
Definition: item_cmpfunc.h:2878
Item_cond_and(const POS &pos, Item *i1, Item *i2)
Definition: item_cmpfunc.h:2881
Item_cond_and(Item *i1, Item *i2)
Definition: item_cmpfunc.h:2880
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:2898
uint64_t hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:2889
Item_cond_and(THD *thd, Item_cond_and *item)
Definition: item_cmpfunc.h:2883
Definition: item_cmpfunc.h:2908
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:2929
Item_cond_or(const POS &pos, List< Item > &list_arg)
Definition: item_cmpfunc.h:2917
enum Functype functype() const override
Definition: item_cmpfunc.h:2919
Item_cond_or(Item *i1, Item *i2)
Definition: item_cmpfunc.h:2912
Item * copy_andor_structure(THD *thd) override
Definition: item_cmpfunc.h:2922
Item_cond_or(List< Item > &list_arg)
Definition: item_cmpfunc.h:2916
Item_cond_or(const POS &pos, Item *i1, Item *i2)
Definition: item_cmpfunc.h:2913
Item_cond_or()
Definition: item_cmpfunc.h:2910
const char * func_name() const override
Definition: item_cmpfunc.h:2921
Item_cond_or(THD *thd, Item_cond_or *item)
Definition: item_cmpfunc.h:2915
Definition: item_cmpfunc.h:2575
void add_at_head(List< Item > *nlist)
Definition: item_cmpfunc.h:2608
bool add_at_head(Item *item)
Definition: item_cmpfunc.h:2604
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:2629
Item_cond(Item *i1, Item *i2)
Definition: item_cmpfunc.h:2585
Item_bool_func super
Definition: item_cmpfunc.h:2576
bool ignore_unknown() const
Treat UNKNOWN result like FALSE because callers see no difference.
Definition: item_cmpfunc.h:2640
void copy_andor_arguments(THD *thd, Item_cond *item)
Definition: item_cmpfunc.cc:6120
table_map used_tables() const override
Definition: item_cmpfunc.h:2622
Item_cond(const POS &pos, Item *i1, Item *i2)
Definition: item_cmpfunc.h:2589
Item_cond(List< Item > &nlist)
Definition: item_cmpfunc.h:2596
bool subst_argument_checker(uchar **) override
Definition: item_cmpfunc.h:2635
List< Item > * argument_list()
Definition: item_cmpfunc.h:2620
Type type() const override
Definition: item_cmpfunc.h:2619
Item_cond()
Definition: item_cmpfunc.h:2584
List< Item > list
Definition: item_cmpfunc.h:2579
bool equality_substitution_analyzer(uchar **) override
Definition: item_cmpfunc.h:2641
bool add(Item *item)
Definition: item_cmpfunc.h:2600
Item_cond(const POS &pos, List< Item > &nlist)
Definition: item_cmpfunc.h:2598
bool abort_on_null
Definition: item_cmpfunc.h:2580
Base class for the equality comparison operators = and <=>.
Definition: item_cmpfunc.h:1046
Item_multi_eq * source_multiple_equality
If this equality originally came from a multi-equality, this documents which one it came from (otherw...
Definition: item_cmpfunc.h:1105
Item_eq_base(Item *a, Item *b)
Definition: item_cmpfunc.h:1048
bool contains_only_equi_join_condition() const final
Whether this Item is an equi-join condition.
Definition: item_cmpfunc.cc:8112
Item_eq_base(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1049
Item * create_cast_if_needed(MEM_ROOT *mem_root, Item *argument) const
Wrap the argument in a typecast, if needed.
Definition: item_cmpfunc.cc:8497
bool append_join_key_for_hash_join(THD *thd, table_map tables, const HashJoinCondition &join_condition, bool is_multi_column_key, String *join_key_buffer) const
Read the value from the join condition, and append it to the output vector "join_key_buffer".
Definition: item_cmpfunc.cc:8471
ANY_VALUE(expr) is like expr except that it is not checked by aggregate_check logic.
Definition: item_cmpfunc.h:1558
const char * func_name() const override
Definition: item_cmpfunc.h:1562
Item_func_any_value(const POS &pos, Item *a)
Definition: item_cmpfunc.h:1560
Item_func_any_value(Item *a)
Definition: item_cmpfunc.h:1561
Definition: item_cmpfunc.h:1383
Arg_comparator ge_cmp
Definition: item_cmpfunc.h:1396
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:1400
bool is_bool_func() const override
Definition: item_cmpfunc.h:1410
Item_func_between(const POS &pos, Item *a, Item *b, Item *c, bool is_negation)
Definition: item_cmpfunc.h:1397
Item_result cmp_type
Definition: item_cmpfunc.h:1387
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:1411
String value0
Definition: item_cmpfunc.h:1388
const char * func_name() const override
Definition: item_cmpfunc.h:1402
void update_not_null_tables()
Definition: item_cmpfunc.h:1423
uint decimal_precision() const override
Definition: item_cmpfunc.h:1414
DTCollation cmp_collation
Definition: item_cmpfunc.h:1384
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:1415
enum Functype functype() const override
Definition: item_cmpfunc.h:1401
A predicate that is "always true" or "always false".
Definition: item_cmpfunc.h:377
Item_func_bool_const(const POS &pos)
Definition: item_cmpfunc.h:385
Item_func_bool_const()
Definition: item_cmpfunc.h:379
bool fix_fields(THD *, Item **) override
Definition: item_cmpfunc.h:391
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_cmpfunc.h:393
bool basic_const_item() const override
Returns true if this is a simple constant item like an integer, not a constant expression.
Definition: item_cmpfunc.h:392
CASE ... WHEN ... THEN ... END function implementation.
Definition: item_cmpfunc.h:2112
Item_result cmp_type
Definition: item_cmpfunc.h:2119
enum_field_types default_data_type() const override
Get the default data (output) type for the specific item.
Definition: item_cmpfunc.h:2167
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:2179
cmp_item * case_item
Definition: item_cmpfunc.h:2122
int else_expr_num
Definition: item_cmpfunc.h:2115
DTCollation cmp_collation
Definition: item_cmpfunc.h:2120
Item_func super
Definition: item_cmpfunc.h:2113
Item_func_case(const POS &pos, mem_root_deque< Item * > *list, Item *first_expr_arg, Item *else_expr_arg)
Definition: item_cmpfunc.h:2134
int get_first_expr_num() const
Definition: item_cmpfunc.h:2156
const char * func_name() const override
Definition: item_cmpfunc.h:2174
enum Item_result result_type() const override
Definition: item_cmpfunc.h:2173
enum Item_result cached_result_type left_result_type
Definition: item_cmpfunc.h:2116
uint ncases
Definition: item_cmpfunc.h:2118
void add_json_info(Json_object *obj) override
Add all the node-specific json fields.
Definition: item_cmpfunc.h:2128
void set_masking_expression_for(const Item_field *masked_item) final
Mark this expression as a masking expression for some other expression.
Definition: item_cmpfunc.h:2183
String tmp_value
Definition: item_cmpfunc.h:2117
enum Functype functype() const override
Definition: item_cmpfunc.h:2182
int get_else_expr_num() const
Definition: item_cmpfunc.h:2157
Definition: item_cmpfunc.h:1494
Item_func_coalesce(const POS &pos, Item *a)
Definition: item_cmpfunc.h:1500
Item_func_coalesce(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1496
enum Item_result result_type() const override
Definition: item_cmpfunc.h:1532
Item_func_coalesce(Item *a, Item *b)
Definition: item_cmpfunc.h:1513
const char * func_name() const override
Definition: item_cmpfunc.h:1533
enum_field_types default_data_type() const override
Get the default data (output) type for the specific item.
Definition: item_cmpfunc.h:1510
Item_func_coalesce(Item *a)
Definition: item_cmpfunc.h:1503
Item_func_coalesce(const POS &pos, PT_item_list *list)
Definition: item_cmpfunc.h:1506
enum Functype functype() const override
Definition: item_cmpfunc.h:1534
void set_numeric_type() override
Definition: item_cmpfunc.h:1531
Item_func_comparison is a class for comparison functions that take two arguments and return a boolean...
Definition: item_cmpfunc.h:736
bool subst_argument_checker(uchar **) override
Definition: item_cmpfunc.h:753
Item_func_comparison(Item *a, Item *b)
Definition: item_cmpfunc.h:738
Item_func_comparison(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:741
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_cmpfunc.cc:7333
float get_filtering_effect(THD *thd, table_map filter_for_table, table_map read_tables, const MY_BITMAP *fields_to_ignore, double rows_in_table) override
Calculate the filter contribution that is relevant for table 'filter_for_table' for this item.
Definition: item_cmpfunc.cc:2972
Item_bool_func * negate_item() override=0
Item * truth_transformer(THD *, Bool_test) override
Informs an item that it is wrapped in a truth test, in case it wants to transforms itself to implemen...
Definition: item_cmpfunc.cc:7238
bool cast_incompatible_args(uchar *) override
Wrap incompatible arguments in CAST nodes to the expected data types.
Definition: item_cmpfunc.cc:7348
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:761
Implements the comparison operator equals (=)
Definition: item_cmpfunc.h:1111
enum Functype functype() const override
Definition: item_cmpfunc.h:1116
uint64_t hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:1120
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1118
Item_func_eq(Item *a, Item *b)
Definition: item_cmpfunc.h:1113
Item_func_eq(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1114
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1117
const char * func_name() const override
Definition: item_cmpfunc.h:1119
bool equality_substitution_analyzer(uchar **) override
Definition: item_cmpfunc.h:1122
The <=> operator evaluates the same as.
Definition: item_cmpfunc.h:1175
Item * truth_transformer(THD *, Bool_test) override
Informs an item that it is wrapped in a truth test, in case it wants to transforms itself to implemen...
Definition: item_cmpfunc.h:1194
bool set_cmp_func() override
Sets up a comparator of the correct type based on the type of the function's arguments.
Definition: item_cmpfunc.h:1184
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1192
enum Functype functype() const override
Definition: item_cmpfunc.h:1190
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1191
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:1207
uint64_t hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:1188
const char * func_name() const override
Definition: item_cmpfunc.h:1193
Item_func_equal(Item *a, Item *b)
Definition: item_cmpfunc.h:1177
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_cmpfunc.h:1195
Item_func_comparison * negate_item() override
Definition: item_cmpfunc.h:1198
Item_func_equal(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1180
A predicate that is "always false".
Definition: item_cmpfunc.h:414
longlong val_int() override
Definition: item_cmpfunc.h:420
Item_func_false()
Definition: item_cmpfunc.h:416
uint64 hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:424
const char * func_name() const override
Definition: item_cmpfunc.h:418
Item_func_false(const POS &pos)
Definition: item_cmpfunc.h:417
enum Functype functype() const override
Definition: item_cmpfunc.h:425
bool val_bool() override
Definition: item_cmpfunc.h:419
void print(const THD *, String *str, enum_query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:421
Implements the comparison operator greater than or equals (>=)
Definition: item_cmpfunc.h:1213
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1220
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1221
Item_func_ge(Item *a, Item *b)
Definition: item_cmpfunc.h:1215
const char * func_name() const override
Definition: item_cmpfunc.h:1222
Item_func_ge(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1216
enum Functype functype() const override
Definition: item_cmpfunc.h:1219
Implements the comparison operator greater than (>)
Definition: item_cmpfunc.h:1229
Item_func_gt(Item *a, Item *b)
Definition: item_cmpfunc.h:1231
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1237
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1236
Item_func_gt(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1232
const char * func_name() const override
Definition: item_cmpfunc.h:1238
enum Functype functype() const override
Definition: item_cmpfunc.h:1235
Definition: item_cmpfunc.h:1572
Item_func_if(Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:1576
enum Functype functype() const override
Definition: item_cmpfunc.h:1604
enum Item_result result_type() const override
Definition: item_cmpfunc.h:1593
enum_field_types default_data_type() const override
Get the default data (output) type for the specific item.
Definition: item_cmpfunc.h:1595
const char * func_name() const override
Definition: item_cmpfunc.h:1603
void update_not_null_tables()
Definition: item_cmpfunc.h:1608
enum Item_result cached_result_type
Definition: item_cmpfunc.h:1573
Item_func_if(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_cmpfunc.h:1580
Definition: item_cmpfunc.h:1537
Item_func_ifnull(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1539
const char * func_name() const override
Definition: item_cmpfunc.h:1549
in_expr [NOT] IN (in_value_list).
Definition: item_cmpfunc.h:2199
DTCollation cmp_collation
Definition: item_cmpfunc.h:2229
Item_func_in(const POS &pos, PT_item_list *list, bool is_negation)
Definition: item_cmpfunc.h:2232
enum Functype functype() const override
Definition: item_cmpfunc.h:2260
const char * func_name() const override
Definition: item_cmpfunc.h:2261
Item_result left_result_type
Definition: item_cmpfunc.h:2227
bool is_bool_func() const override
Definition: item_cmpfunc.h:2262
uint decimal_precision() const override
Definition: item_cmpfunc.h:2244
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:2263
void update_not_null_tables()
Definition: item_cmpfunc.h:2273
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:2256
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:2266
Definition: item_cmpfunc.h:1463
Item_row * row
Definition: item_cmpfunc.h:1466
bool use_decimal_comparison
Definition: item_cmpfunc.h:1467
const char * func_name() const override
Definition: item_cmpfunc.h:1482
interval_range * intervals
Definition: item_cmpfunc.h:1468
uint decimal_precision() const override
Definition: item_cmpfunc.h:1483
Item_int_func super
Definition: item_cmpfunc.h:1464
Item_func_interval(const POS &pos, MEM_ROOT *mem_root, Item *expr1, Item *expr2, class PT_item_list *opt_expr_list=nullptr)
Definition: item_cmpfunc.h:1471
Definition: item_cmpfunc.h:2469
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:2488
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:2491
const char * func_name() const override
Definition: item_cmpfunc.h:2482
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:2483
Item_func_isnotnull(Item *a)
Definition: item_cmpfunc.h:2471
enum Functype functype() const override
Definition: item_cmpfunc.h:2477
Item_func_isnotnull(const POS &pos, Item *a)
Definition: item_cmpfunc.h:2472
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.h:2478
Definition: item_cmpfunc.h:2404
Item_func_isnull(Item *a)
Definition: item_cmpfunc.h:2411
Item_func_isnull(const POS &pos, Item *a)
Definition: item_cmpfunc.h:2412
const char * func_name() const override
Definition: item_cmpfunc.h:2418
Item_bool_func super
Definition: item_cmpfunc.h:2405
enum Functype functype() const override
Definition: item_cmpfunc.h:2416
bool cached_value
Definition: item_cmpfunc.h:2408
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:2431
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:2426
Implements the comparison operator less than or equals (<=)
Definition: item_cmpfunc.h:1245
Item_func_le(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1248
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1253
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1252
Item_func_le(Item *a, Item *b)
Definition: item_cmpfunc.h:1247
const char * func_name() const override
Definition: item_cmpfunc.h:1254
enum Functype functype() const override
Definition: item_cmpfunc.h:1251
Definition: item_cmpfunc.h:2500
Item_func_like(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:2519
int escape() const
Returns the escape character.
Definition: item_cmpfunc.h:2544
int m_escape
The escape character (0 if no escape character).
Definition: item_cmpfunc.h:2507
enum Functype functype() const override
Definition: item_cmpfunc.h:2523
bool escape_was_used_in_parsing() const
Definition: item_cmpfunc.h:2541
Item_func_like(Item *a, Item *b, Item *escape_arg)
Definition: item_cmpfunc.h:2511
Item_func_like(Item *a, Item *b)
Definition: item_cmpfunc.h:2510
cond_result eq_cmp_result() const override
Result may be not equal with equal inputs if ESCAPE character is present.
Definition: item_cmpfunc.h:2526
const char * func_name() const override
Definition: item_cmpfunc.h:2527
bool escape_is_evaluated() const
Has the escape clause been evaluated? It only needs to be evaluated once per execution,...
Definition: item_cmpfunc.h:2555
Item_func_like(const POS &pos, Item *a, Item *b, Item *escape_arg)
Definition: item_cmpfunc.h:2515
Implements the comparison operator less than (<)
Definition: item_cmpfunc.h:1293
Item_func_lt(Item *a, Item *b)
Definition: item_cmpfunc.h:1295
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1301
enum Functype functype() const override
Definition: item_cmpfunc.h:1299
Item_func_lt(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1296
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1300
const char * func_name() const override
Definition: item_cmpfunc.h:1302
Wrapper class when MATCH function is used in WHERE clause.
Definition: item_cmpfunc.h:820
float get_filtering_effect(THD *thd, table_map filter_for_table, table_map read_tables, const MY_BITMAP *fields_to_ignore, double rows_in_table) override
Calculate the filter contribution that is relevant for table 'filter_for_table' for this item.
Definition: item_cmpfunc.h:832
Item_func_match_predicate(Item *a)
Definition: item_cmpfunc.h:822
const char * func_name() const override
Definition: item_cmpfunc.h:826
longlong val_int() override
Definition: item_cmpfunc.cc:7754
enum Functype functype() const override
Definition: item_cmpfunc.h:825
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:827
Implements the comparison operator not equals (<>)
Definition: item_cmpfunc.h:1309
enum Functype rev_functype() const override
Definition: item_cmpfunc.h:1320
cond_result eq_cmp_result() const override
Definition: item_cmpfunc.h:1321
const char * func_name() const override
Definition: item_cmpfunc.h:1323
uint64_t hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:1318
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_cmpfunc.h:1330
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:1322
Item_func_ne(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1315
Item_func_ne(Item *a, Item *b)
Definition: item_cmpfunc.h:1314
enum Functype functype() const override
Definition: item_cmpfunc.h:1319
Definition: item_cmpfunc.h:1031
table_map not_null_tables() const override
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item_cmpfunc.h:1036
Item_func_nop_all(Item *a)
Definition: item_cmpfunc.h:1033
const char * func_name() const override
Definition: item_cmpfunc.h:1035
longlong val_int() override
Special NOP (No OPeration) for ALL subquery.
Definition: item_cmpfunc.cc:569
Definition: item_cmpfunc.h:971
bool empty_underlying_subquery()
Definition: item_cmpfunc.cc:531
bool abort_on_null
Definition: item_cmpfunc.h:976
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.cc:552
const char * func_name() const override
Definition: item_cmpfunc.h:993
Item_subselect * subselect
Definition: item_cmpfunc.h:975
Item * truth_transformer(THD *, Bool_test) override
Apply NOT transformation to the item and return a new one.
Definition: item_cmpfunc.h:1024
longlong val_int() override
special NOT for ALL subquery.
Definition: item_cmpfunc.cc:517
void set_subselect(Item_subselect *item)
Definition: item_cmpfunc.h:998
table_map not_null_tables() const override
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item_cmpfunc.h:999
void set_sum_test(Item_sum_hybrid *item)
Definition: item_cmpfunc.h:996
bool show
Definition: item_cmpfunc.h:979
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:988
enum Functype functype() const override
Definition: item_cmpfunc.h:992
void set_sub_test(Item_maxmin_subselect *item)
Definition: item_cmpfunc.h:997
bool ignore_unknown() const
Treat UNKNOWN result like FALSE because callers see no difference.
Definition: item_cmpfunc.h:990
Item_sum_hybrid * test_sum_item
Definition: item_cmpfunc.h:973
Item_func_not_all(Item *a)
Definition: item_cmpfunc.h:981
Item_maxmin_subselect * test_sub_item
Definition: item_cmpfunc.h:974
Definition: item_cmpfunc.h:790
uint64 hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.cc:509
Item * truth_transformer(THD *, Bool_test) override
Apply NOT transformation to the item and return a new one.
Definition: item_cmpfunc.cc:7232
enum Functype functype() const override
Definition: item_cmpfunc.h:796
const char * func_name() const override
Definition: item_cmpfunc.h:797
longlong val_int() override
Definition: item_cmpfunc.cc:481
Item_func_not(Item *a)
Definition: item_cmpfunc.h:792
float get_filtering_effect(THD *thd, table_map filter_for_table, table_map read_tables, const MY_BITMAP *fields_to_ignore, double rows_in_table) override
Calculate the filter contribution that is relevant for table 'filter_for_table' for this item.
Definition: item_cmpfunc.cc:455
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.cc:502
Item_func_not(const POS &pos, Item *a)
Definition: item_cmpfunc.h:793
Definition: item_cmpfunc.h:1638
enum_field_types default_data_type() const override
Get the default data (output) type for the specific item.
Definition: item_cmpfunc.h:1652
enum Functype functype() const override
Definition: item_cmpfunc.h:1659
Item_result result_type() const override
Definition: item_cmpfunc.h:1651
bool is_bool_func() const override
This is a workaround for the broken inheritance hierarchy: this should inherit from Item_func instead...
Definition: item_cmpfunc.h:1675
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:1664
enum Item_result cached_result_type
Definition: item_cmpfunc.h:1639
uint64 hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:1668
Item_func_nullif(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1642
const char * func_name() const override
Definition: item_cmpfunc.h:1658
uint decimal_precision() const override
Definition: item_cmpfunc.h:1662
Definition: item_func.h:885
Definition: item_cmpfunc.h:1342
void negate()
Definition: item_cmpfunc.h:1357
bool ignore_unknown() const
Definition: item_cmpfunc.h:1359
bool subst_argument_checker(uchar **) override
Definition: item_cmpfunc.h:1375
Item * truth_transformer(THD *, Bool_test test) override
Informs an item that it is wrapped in a truth test, in case it wants to transforms itself to implemen...
Definition: item_cmpfunc.h:1360
void add_json_info(Json_object *obj) override
Add all the node-specific json fields.
Definition: item_cmpfunc.h:1378
bool pred_level
Definition: item_cmpfunc.h:1345
Item_func_opt_neg(const POS &pos, Item *a, Item *b, Item *c, bool is_negation)
Definition: item_cmpfunc.h:1347
bool allow_replacement(Item_field *const original, Item *const subst) override
Check whether a function allows replacement of a field with another item: In particular,...
Definition: item_cmpfunc.h:1365
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:1358
Item_func_opt_neg(const POS &pos, PT_item_list *list, bool is_negation)
Definition: item_cmpfunc.h:1351
bool negated
Definition: item_cmpfunc.h:1344
Internal function used by subquery to derived transformation to check if a subquery is scalar.
Definition: item_cmpfunc.h:1264
table_map get_initial_pseudo_tables() const override
We add RAND_TABLE_BIT to prevent moving this item from the JOIN condition: it might raise an error to...
Definition: item_cmpfunc.h:1285
const char * func_name() const override
Definition: item_cmpfunc.h:1268
bool is_valid_for_pushdown(uchar *arg) override
Redefine to avoid pushing into derived table.
Definition: item_cmpfunc.h:1270
Item_func_reject_if(Item *a)
Definition: item_cmpfunc.h:1266
Definition: item_cmpfunc.h:1434
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:1443
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.h:1449
const char * func_name() const override
Definition: item_cmpfunc.h:1440
Item_func_strcmp(const POS &pos, Item *a, Item *b)
Definition: item_cmpfunc.h:1436
enum Functype functype() const override
Definition: item_cmpfunc.h:1441
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:1439
Definition: item_cmpfunc.h:872
bool fix_fields(THD *thd, Item **ref) override
Definition: item_cmpfunc.h:936
enum_trig_type
Definition: item_cmpfunc.h:874
@ FOUND_MATCH
This trigger type deactivates predicated from WHERE condition when no row satisfying the join conditi...
Definition: item_cmpfunc.h:889
@ IS_NOT_NULL_COMPL
This trigger type deactivates join conditions when a row has been NULL-complemented.
Definition: item_cmpfunc.h:880
@ OUTER_FIELD_IS_NOT_NULL
In IN->EXISTS subquery transformation, new predicates are added: WHERE inner_field=outer_field OR inn...
Definition: item_cmpfunc.h:898
const char * func_name() const override
'<if>', to distinguish from the if() SQL function
Definition: item_cmpfunc.h:931
void add_trig_func_tables()
Definition: item_cmpfunc.h:941
void update_used_tables() override
Updates used tables, not null tables information and accumulates properties up the item tree,...
Definition: item_cmpfunc.h:950
enum enum_trig_type get_trig_type() const
Definition: item_cmpfunc.h:960
bool contains_only_equi_join_condition() const override
Whether this Item is an equi-join condition.
Definition: item_cmpfunc.cc:8152
Item_func_trig_cond(Item *a, bool *f, const JOIN *join, plan_idx idx, enum_trig_type trig_type_arg)
Definition: item_cmpfunc.h:921
table_map get_inner_tables() const
Get table_map of inner tables spanned by associated outer join operation.
Definition: item_cmpfunc.cc:7800
const JOIN * get_join() const
Definition: item_cmpfunc.h:959
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.cc:7820
void get_table_range(Table_ref **first_table, Table_ref **last_table) const
Get range of inner tables spanned by associated outer join operation.
Definition: item_cmpfunc.cc:7779
uint64 hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.cc:7861
bool * get_trig_var()
Definition: item_cmpfunc.h:961
plan_idx idx() const
Definition: item_cmpfunc.h:966
plan_idx m_idx
Optional: if join!=NULL: index of table.
Definition: item_cmpfunc.h:907
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block) override
Fix after tables have been moved from one query_block level to the parent level, e....
Definition: item_cmpfunc.h:954
longlong val_int() override
Definition: item_cmpfunc.cc:7765
enum_trig_type trig_type
Type of trig_var; for printing.
Definition: item_cmpfunc.h:909
enum Functype functype() const override
Definition: item_cmpfunc.h:929
bool * trig_var
Pointer to trigger variable.
Definition: item_cmpfunc.h:903
enum_trig_type get_trig_type()
Definition: item_cmpfunc.h:962
const JOIN * m_join
Optional: JOIN of table which is the source of trig_var.
Definition: item_cmpfunc.h:905
A predicate that is "always true".
Definition: item_cmpfunc.h:398
bool val_bool() override
Definition: item_cmpfunc.h:403
enum Functype functype() const override
Definition: item_cmpfunc.h:409
Item_func_true()
Definition: item_cmpfunc.h:400
void print(const THD *, String *str, enum_query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:405
uint64 hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:408
Item_func_true(const POS &pos)
Definition: item_cmpfunc.h:401
const char * func_name() const override
Definition: item_cmpfunc.h:402
longlong val_int() override
Definition: item_cmpfunc.h:404
Item class, to represent X IS [NOT] (TRUE | FALSE) boolean predicates.
Definition: item_cmpfunc.h:432
Bool_test truth_test
The value we're testing for.
Definition: item_cmpfunc.h:491
Item_bool_func super
Definition: item_cmpfunc.h:433
longlong val_int() override
Definition: item_cmpfunc.cc:2386
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:475
enum Functype functype() const override
Definition: item_cmpfunc.h:447
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.cc:2376
Item_func_truth(const POS &pos, Item *a, Bool_test truth_test)
Definition: item_cmpfunc.h:449
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.cc:2370
Item * truth_transformer(THD *, Bool_test test) override
Informs an item that it is wrapped in a truth test, in case it wants to transforms itself to implemen...
Definition: item_cmpfunc.h:440
Item_func_truth(Item *a, Bool_test truth_test)
Definition: item_cmpfunc.h:462
const char * func_name() const override
Definition: item_cmpfunc.h:444
XOR inherits from Item_bool_func2 because it is not optimized yet.
Definition: item_cmpfunc.h:769
Item_bool_func2 super
Definition: item_cmpfunc.h:770
const char * func_name() const override
Definition: item_cmpfunc.h:778
longlong val_int() override
Make a logical XOR of the arguments.
Definition: item_cmpfunc.cc:7191
float get_filtering_effect(THD *thd, table_map filter_for_table, table_map read_tables, const MY_BITMAP *fields_to_ignore, double rows_in_table) override
Calculate the filter contribution that is relevant for table 'filter_for_table' for this item.
Definition: item_cmpfunc.cc:7153
enum Functype functype() const override
Definition: item_cmpfunc.h:777
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_cmpfunc.h:781
Item_func_xor(const POS &pos, Item *i1, Item *i2)
Definition: item_cmpfunc.h:774
Item_func_xor(Item *i1, Item *i2)
Definition: item_cmpfunc.h:773
uint64_t hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.h:783
Item * truth_transformer(THD *, Bool_test) override
XOR can be negated by negating one of the operands:
Definition: item_cmpfunc.cc:7250
bool do_itemize(Parse_context *pc, Item **res) override
The core function that does the actual itemization.
Definition: item_cmpfunc.cc:7138
Definition: item_func.h:101
my_decimal * val_decimal(my_decimal *) override
Definition: item_func.cc:871
Item ** args
Array of pointers to arguments.
Definition: item_func.h:108
void update_used_tables() override
Updates used tables, not null tables information and accumulates properties up the item tree,...
Definition: item_func.cc:736
bool split_sum_func(THD *thd, Ref_item_array ref_item_array, mem_root_deque< Item * > *fields) override
See comments in Item_cmp_func::split_sum_func()
Definition: item_func.cc:725
void traverse_cond(Cond_traverser traverser, void *arg, traverse_order order) override
Definition: item_func.cc:644
Item * compile(Item_analyzer analyzer, uchar **arg_p, Item_transformer transformer, uchar *arg_t) override
Compile Item_func object with a processor and a transformer callback functions.
Definition: item_func.cc:702
Functype
Definition: item_func.h:214
@ TRIG_COND_FUNC
Definition: item_func.h:258
@ NOT_ALL_FUNC
Definition: item_func.h:255
@ LIKE_FUNC
Definition: item_func.h:225
@ FALSE_FUNC
Definition: item_func.h:339
@ NULLIF_FUNC
Definition: item_func.h:300
@ NOT_FUNC
Definition: item_func.h:254
@ XOR_FUNC
Definition: item_func.h:231
@ COND_OR_FUNC
Definition: item_func.h:230
@ COND_AND_FUNC
Definition: item_func.h:229
@ EQ_FUNC
Definition: item_func.h:216
@ TRUE_FUNC
Definition: item_func.h:338
@ IN_FUNC
Definition: item_func.h:233
@ LE_FUNC
Definition: item_func.h:220
@ MATCH_FUNC
Definition: item_func.h:224
@ MULTI_EQ_FUNC
Definition: item_func.h:234
@ LT_FUNC
Definition: item_func.h:219
@ ISNULL_FUNC
Definition: item_func.h:226
@ ISNOTNULLTEST_FUNC
Definition: item_func.h:236
@ ISTRUTH_FUNC
Definition: item_func.h:228
@ BETWEEN
Definition: item_func.h:232
@ IF_FUNC
Definition: item_func.h:298
@ STRCMP_FUNC
Definition: item_func.h:337
@ NE_FUNC
Definition: item_func.h:218
@ BOOL_IF_FUNC
Definition: item_func.h:299
@ GE_FUNC
Definition: item_func.h:221
@ EQUAL_FUNC
Definition: item_func.h:217
@ GT_FUNC
Definition: item_func.h:222
@ UNKNOWN_FUNC
Definition: item_func.h:215
@ ISNOTNULL_FUNC
Definition: item_func.h:227
@ CASE_FUNC
Definition: item_func.h:301
@ COALESCE_FUNC
Definition: item_func.h:331
void print_op(const THD *thd, String *str, enum_query_type query_type) const
Definition: item_func.cc:800
virtual bool eq_specific(const Item *) const
Provide a more specific equality check for a function.
Definition: item_func.h:544
uint64_t hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_func.cc:798
table_map used_tables_cache
Value used in calculation of result of used_tables()
Definition: item_func.h:194
optimize_type
Definition: item_func.h:368
@ OPTIMIZE_NONE
Definition: item_func.h:369
@ OPTIMIZE_EQUAL
Definition: item_func.h:373
@ OPTIMIZE_NULL
Definition: item_func.h:372
@ OPTIMIZE_KEY
Definition: item_func.h:370
@ OPTIMIZE_OP
Definition: item_func.h:371
bool do_itemize(Parse_context *pc, Item **res) override
The core function that does the actual itemization.
Definition: item_func.cc:363
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_func.h:728
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_func.cc:765
bool fix_fields(THD *, Item **ref) override
Definition: item_func.cc:408
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block) override
Fix after tables have been moved from one query_block level to the parent level, e....
Definition: item_func.cc:462
bool set_arguments(mem_root_deque< Item * > *list, bool context_free)
Copy arguments from list to args array.
Definition: item_func.cc:331
uint arg_count
How many arguments in 'args'.
Definition: item_func.h:131
Field * tmp_table_field(TABLE *t_arg) override
Definition: item_func.cc:829
bool eq(const Item *item) const override
Compare this item with another item for equality.
Definition: item_func.cc:813
table_map not_null_tables_cache
Value used in calculation of result of not_null_tables()
Definition: item_func.h:196
bool null_on_null
Affects how to determine that NULL argument implies a NULL function return.
Definition: item_func.h:187
bool walk(Item_processor processor, enum_walk walk, uchar *arg) override
Traverses a tree of Items in prefix and/or postfix order.
Definition: item_func.cc:633
Item * transform(Item_transformer transformer, uchar *arg) override
Transform an Item_func object with a transformer callback function.
Definition: item_func.cc:677
virtual bool resolve_type_inner(THD *)
Resolve type of function after all arguments have had their data types resolved.
Definition: item_func.h:524
uint allowed_arg_cols
Definition: item_func.h:192
Definition: item_cmpfunc.h:513
bool split_sum_func(THD *thd, Ref_item_array ref_item_array, mem_root_deque< Item * > *fields) override
Definition: item_cmpfunc.cc:2504
uint64 hash() override
Generate hash unique to an item depending on its attributes.
Definition: item_cmpfunc.cc:2527
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_cmpfunc.cc:2708
bool fix_left(THD *thd)
Definition: item_cmpfunc.cc:2419
Item_cache * cache
Definition: item_cmpfunc.h:515
const char * func_name() const override
Definition: item_cmpfunc.h:541
longlong val_int() override
The implementation of optimized <outer expression> [NOT] IN <subquery> predicates.
Definition: item_cmpfunc.cc:2609
Item_in_optimizer(Item_in_subselect *item)
Definition: item_cmpfunc.h:525
int result_for_null_param
Stores the value of "NULL IN (SELECT ...)" for uncorrelated subqueries: UNKNOWN - "NULL in (SELECT ....
Definition: item_cmpfunc.h:522
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block) override
Fix after tables have been moved from one query_block level to the parent level, e....
Definition: item_cmpfunc.cc:2493
void update_used_tables() override
Updates used tables, not null tables information and accumulates properties up the item tree,...
Definition: item_cmpfunc.cc:2713
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_cmpfunc.cc:2695
Item_cache ** get_cache()
Definition: item_cmpfunc.h:542
bool fix_fields(THD *, Item **) override
Definition: item_cmpfunc.cc:2461
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.cc:2516
Representation of IN subquery predicates of the form "left_expr IN (SELECT ...)".
Definition: item_subselect.h:608
Definition: item_func.h:1048
String * val_str(String *str) override
Definition: item_func.cc:1511
bool val_datetime(Datetime_val *dt, my_time_flags_t flags) override
Evaluate the item and return result as a datetime value.
Definition: item_func.h:1100
double val_real() override
Definition: item_func.cc:1505
enum Item_result result_type() const override
Definition: item_func.h:1103
bool val_date(Date_val *date, my_time_flags_t flags) override
Evaluate the item and return result as a date value.
Definition: item_func.h:1096
bool val_time(Time_val *time) override
Evaluate the item and return result as a time value.
Definition: item_func.h:1099
Definition: item_cmpfunc.h:2444
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_cmpfunc.h:2463
Item_in_subselect * owner
Definition: item_cmpfunc.h:2445
const char * func_name() const override
Definition: item_cmpfunc.h:2452
Item_is_not_null_test(Item_in_subselect *ow, Item *a)
Definition: item_cmpfunc.h:2448
table_map get_initial_pseudo_tables() const override
We add RAND_TABLE_BIT to prevent moving this item from HAVING to WHERE.
Definition: item_cmpfunc.h:2460
enum Functype functype() const override
Definition: item_cmpfunc.h:2450
Definition: item_subselect.h:404
Definition: item_cmpfunc.h:2817
size_t size() const
Definition: item_cmpfunc.h:2831
const List< Item_field > * m_fields
Definition: item_cmpfunc.h:2834
List_STL_Iterator< const Item_field > cend() const
Definition: item_cmpfunc.h:2828
ConstFieldProxy(const Item_multi_eq *item)
Definition: item_cmpfunc.h:2819
List_STL_Iterator< const Item_field > end() const
Definition: item_cmpfunc.h:2824
List_STL_Iterator< const Item_field > begin() const
Definition: item_cmpfunc.h:2821
List_STL_Iterator< const Item_field > cbegin() const
Definition: item_cmpfunc.h:2825
Definition: item_cmpfunc.h:2798
FieldProxy(Item_multi_eq *item)
Definition: item_cmpfunc.h:2800
List_STL_Iterator< Item_field > begin()
Definition: item_cmpfunc.h:2801
List_STL_Iterator< const Item_field > cbegin() const
Definition: item_cmpfunc.h:2807
List_STL_Iterator< const Item_field > end() const
Definition: item_cmpfunc.h:2806
List< Item_field > * m_fields
Definition: item_cmpfunc.h:2815
List_STL_Iterator< const Item_field > cend() const
Definition: item_cmpfunc.h:2810
List_STL_Iterator< const Item_field > begin() const
Definition: item_cmpfunc.h:2803
List_STL_Iterator< Item_field > end()
Definition: item_cmpfunc.h:2802
The class Item_multi_eq is used to represent conjunctions of equality predicates of the form field1 =...
Definition: item_cmpfunc.h:2712
bool equality_substitution_analyzer(uchar **) override
Definition: item_cmpfunc.h:2851
Item_multi_eq operator=(const Item_multi_eq &)=delete
void sort(Node_cmp_func compare)
Order field items in multiple equality according to a sorting criteria.
Definition: item_cmpfunc.h:2793
const char * func_name() const override
Definition: item_cmpfunc.h:2764
ConstFieldProxy get_fields() const
Definition: item_cmpfunc.h:2837
FieldProxy get_fields()
Definition: item_cmpfunc.h:2836
Item_multi_eq(const Item_multi_eq &&)=delete
List< Item_field > fields
List of equal field items.
Definition: item_cmpfunc.h:2714
void set_const_arg(Item *const_item)
Definition: item_cmpfunc.h:2747
bool cast_incompatible_args(uchar *) override
Wrap incompatible arguments in CAST nodes to the expected data types.
Definition: item_cmpfunc.h:2766
const CHARSET_INFO * compare_collation() const override
Definition: item_cmpfunc.h:2847
enum Functype functype() const override
Definition: item_cmpfunc.h:2762
optimize_type select_optimize(const THD *) override
Definition: item_cmpfunc.h:2765
void check_covering_prefix_keys()
Item_multi_eq(const Item_multi_eq &)=delete
Item_multi_eq operator=(const Item_multi_eq &&)=delete
bool contains_only_equi_join_condition() const override
Whether this Item is an equi-join condition.
Definition: item_cmpfunc.h:2773
Item * const_arg() const
Returns the constant Item that this multi equality is equal to(if any).
Definition: item_cmpfunc.h:2746
Item_field * get_first()
Get the first field of multiple equality, use for semantic checking.
Definition: item_cmpfunc.h:2758
Arg_comparator cmp
Helper for comparing constants.
Definition: item_cmpfunc.h:2720
Field * result_field
Definition: item.h:6022
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item.cc:11580
Item which stores (x,y,...) and ROW(x,y,...).
Definition: item_row.h:54
Base class that is common to all subqueries and subquery predicates.
Definition: item_subselect.h:80
Abstract base class for the MIN and MAX aggregate functions.
Definition: item_sum.h:1570
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:929
virtual double val_real()=0
virtual float get_filtering_effect(THD *thd, table_map filter_for_table, table_map read_tables, const MY_BITMAP *fields_to_ignore, double rows_in_table)
Calculate the filter contribution that is relevant for table 'filter_for_table' for this item.
Definition: item.h:2153
void set_nullable(bool nullable)
Definition: item.h:3781
DTCollation collation
Character set and collation properties assigned for this Item.
Definition: item.h:3676
void set_data_type_bool()
Definition: item.h:1524
virtual bool collect_item_field_or_view_ref_processor(uchar *)
Collects fields and view references that have the qualifying table in the specified query block.
Definition: item.h:2875
bool is_nullable() const
Definition: item.h:3780
void set_subquery()
Set the "has subquery" property.
Definition: item.h:3533
void fix_char_length(uint32 max_char_length_arg)
Definition: item.h:3483
virtual Item * equality_substitution_transformer(uchar *)
Definition: item.h:3096
void add_accum_properties(const Item *item)
Add more accumulated properties to an Item.
Definition: item.h:3528
virtual uint decimal_precision() const
Definition: item.cc:827
virtual bool val_json(Json_wrapper *result)
Get a JSON value from an Item.
Definition: item.h:2125
virtual longlong val_int()=0
virtual void print(const THD *, String *str, enum_query_type) const
This method is used for to:
Definition: item.h:2538
bool fixed
True if item has been resolved.
Definition: item.h:3769
bool const_item() const
Returns true if item is constant, regardless of query evaluation state.
Definition: item.h:2475
bool null_value
True if item is null.
Definition: item.h:3806
Type
Definition: item.h:964
@ COND_ITEM
An AND or OR condition.
Definition: item.h:978
virtual void apply_is_true()
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item.h:2650
virtual table_map not_null_tables() const
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item.h:2427
virtual TYPELIB * get_typelib() const
Get the typelib information for an item of type set or enum.
Definition: item.h:1822
bool unsigned_flag
Definition: item.h:3807
virtual bool aggregate_check_group(uchar *)
Definition: item.h:3021
virtual bool is_null()
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item.h:2631
virtual bool clean_up_after_removal(uchar *arg)
Clean up after removing the item from the item tree.
Definition: item.cc:8187
virtual bool aggregate_check_distinct(uchar *)
Definition: item.h:3019
cond_result
Definition: item.h:993
@ COND_TRUE
Definition: item.h:993
@ COND_FALSE
Definition: item.h:993
@ COND_OK
Definition: item.h:993
traverse_order
Definition: item.h:995
Bool_test
< Modifier for result transformation
Definition: item.h:1008
@ BOOL_NOT_FALSE
Definition: item.h:1013
@ BOOL_NOT_TRUE
Definition: item.h:1012
@ BOOL_IS_TRUE
Definition: item.h:1009
@ BOOL_IS_FALSE
Definition: item.h:1010
@ BOOL_NEGATED
Definition: item.h:1016
uint32 max_length
Maximum length of result of evaluating this item, in number of bytes.
Definition: item.h:3694
virtual enum Type type() const =0
virtual uint cols() const
Definition: item.h:3267
Definition: sql_optimizer.h:133
Represents a JSON container value of type "object" (ECMA), type J_OBJECT here.
Definition: json_dom.h:374
bool add_alias(std::string_view key, Json_dom *value)
Insert the value into the object.
Definition: json_dom.h:416
A class that is capable of holding objects of any sub-type of Json_scalar.
Definition: json_dom.h:2035
Abstraction for accessing JSON values irrespective of whether they are (started out as) binary JSON v...
Definition: json_dom.h:1268
Definition: item_cmpfunc.h:644
Item_bool_func * create(const POS &pos, Item *a, Item *b) const override
Definition: item_cmpfunc.cc:451
bool l_op() const override
Definition: item_cmpfunc.h:649
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:647
bool eqne_op() const override
Definition: item_cmpfunc.h:648
Abstract base class for the comparison operators =, <> and <=>.
Definition: item_cmpfunc.h:563
virtual Item_bool_func * combine(const POS &pos, List< Item > list) const =0
Combines a list of conditions exp op exp.
bool eqne_op() const override
Definition: item_cmpfunc.h:566
bool l_op() const override
Definition: item_cmpfunc.h:567
virtual Item_bool_func * create_scalar_predicate(const POS &pos, Item *a, Item *b) const =0
Creates only an item tree node, without attempting to rewrite row constructors.
Item_bool_func * create(const POS &pos, Item *a, Item *b) const override
This implementation of the factory method also implements flattening of row constructors.
Definition: item_cmpfunc.cc:384
Definition: sql_list.h:680
Definition: sql_list.h:494
void sort(Node_cmp_func cmp)
Sort the list.
Definition: sql_list.h:594
T * head()
Definition: sql_list.h:520
Definition: item_cmpfunc.h:628
bool l_op() const override
Definition: item_cmpfunc.h:633
bool eqne_op() const override
Definition: item_cmpfunc.h:632
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:631
Item_bool_func * create(const POS &pos, Item *a, Item *b) const override
Definition: item_cmpfunc.cc:443
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:432
Definition: item_cmpfunc.h:609
Item_bool_func * create_scalar_predicate(const POS &pos, Item *a, Item *b) const override
Creates only an item tree node, without attempting to rewrite row constructors.
Definition: item_cmpfunc.cc:429
Item_bool_func * combine(const POS &pos, List< Item > list) const override
Combines a list of conditions exp op exp.
Definition: item_cmpfunc.cc:435
const char * symbol(bool invert) const override
This interface is only used by Item_allany_subselect.
Definition: item_cmpfunc.h:611
Wrapper class for an Item list head, used to allocate Item lists in the parser in a context-independe...
Definition: parse_tree_helpers.h:109
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:231
This class represents a query block, aka a query specification, which is a query consisting of a SELE...
Definition: sql_lex.h:1179
String class wrapper with a preallocated buffer of size buff_sz.
Definition: sql_string.h:672
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:169
bool is_alloced() const
Definition: sql_string.h:439
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Time_val is a temporal type that represents only time.
Definition: my_temporal.h:57
uint elements
Definition: sql_list.h:190
Definition: item_cmpfunc.h:2050
longlong value
Definition: item_cmpfunc.h:2051
bool has_date
Distinguish between DATE/DATETIME/TIMESTAMP and TIME.
Definition: item_cmpfunc.h:2057
const Item * warn_item
Definition: item_cmpfunc.h:2055
Definition: item_cmpfunc.h:2085
my_decimal value
Definition: item_cmpfunc.h:2086
Definition: item_cmpfunc.h:2026
longlong value
Definition: item_cmpfunc.h:2027
void store_value(Item *item) override
Definition: item_cmpfunc.h:2030
int cmp(Item *arg) override
Definition: item_cmpfunc.h:2034
int compare(const cmp_item *ci) const override
Definition: item_cmpfunc.h:2038
Definition: item_cmpfunc.h:2000
unique_ptr_destroy_only< Json_wrapper > m_value
Cached JSON value to look up.
Definition: item_cmpfunc.h:2003
~cmp_item_json() override
String m_str_value
String buffer.
Definition: item_cmpfunc.h:2007
unique_ptr_destroy_only< Json_scalar_holder > m_holder
Cache for the value above.
Definition: item_cmpfunc.h:2005
Definition: item_cmpfunc.h:2066
int cmp(Item *arg) override
Definition: item_cmpfunc.h:2074
double value
Definition: item_cmpfunc.h:2067
void store_value(Item *item) override
Definition: item_cmpfunc.h:2070
int compare(const cmp_item *ci) const override
Definition: item_cmpfunc.h:2078
Definition: item_cmpfunc.h:2324
cmp_item_row(cmp_item_row &&other)
Definition: item_cmpfunc.h:2337
void set_null_value(bool nv) override
Definition: item_cmpfunc.h:2350
cmp_item_row(THD *thd, Item *item)
Definition: item_cmpfunc.h:2332
cmp_item which stores a scalar (i.e. non-ROW).
Definition: item_cmpfunc.h:1966
bool m_null_value
If stored value is NULL.
Definition: item_cmpfunc.h:1968
void set_null_value(bool nv) override
Definition: item_cmpfunc.h:1969
Definition: item_cmpfunc.h:1972
const String * value_res
Definition: item_cmpfunc.h:1974
int compare(const cmp_item *ci) const override
Definition: item_cmpfunc.h:1981
cmp_item_string(const CHARSET_INFO *cs)
Definition: item_cmpfunc.h:1979
void store_value(Item *item) override
Definition: item_cmpfunc.h:1986
const CHARSET_INFO * cmp_charset
Definition: item_cmpfunc.h:1976
StringBuffer< STRING_BUFFER_USUAL_SIZE > value
Definition: item_cmpfunc.h:1975
Definition: item_cmpfunc.h:1921
virtual void store_value(Item *item)=0
virtual int compare(const cmp_item *item) const =0
virtual int cmp(Item *item)=0
virtual void set_null_value(bool nv)=0
virtual ~cmp_item()=default
virtual cmp_item * make_same()=0
virtual void store_value_by_template(cmp_item *, Item *item)
Definition: item_cmpfunc.h:1959
Definition: item_cmpfunc.h:2369
Mem_root_array< cmp_item_row * > base_pointers
Definition: item_cmpfunc.h:2373
Mem_root_array< cmp_item_row > base_objects
Definition: item_cmpfunc.h:2371
void value_to_item(uint, Item *) const override
Store the value at position pos into provided item object.
Definition: item_cmpfunc.h:2395
unique_ptr_destroy_only< cmp_item_row > tmp
Definition: item_cmpfunc.h:2370
bool is_row_result() const override
Definition: item_cmpfunc.h:2377
Item * create_item(MEM_ROOT *) const override
Create an instance of Item_{type} (e.g.
Definition: item_cmpfunc.h:2391
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:172
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:97
static MEM_ROOT mem_root
Definition: client_plugin.cc:114
static bool contains(const std::vector< std::string > &container, const std::string &file)
Definition: config_files.cc:41
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:31
This file contains the field type.
enum_field_types
Column types for MySQL Note: Keep include/mysql/components/services/bits/stored_program_bits....
Definition: field_types.h:55
@ MYSQL_TYPE_VARCHAR
Definition: field_types.h:71
@ MYSQL_TYPE_DATETIME
Definition: field_types.h:68
static const std::string dec("DECRYPTION")
uint64_t HashCString(const char *str)
Definition: hash.cc:33
static int flags[50]
Definition: hp_test1.cc:40
enum_mysql_timestamp_type
Definition: mysql_time.h:45
bool(Item::* Item_analyzer)(uchar **argp)
Definition: item.h:711
void(* Cond_traverser)(const Item *item, void *arg)
Definition: item.h:721
Item *(Item::* Item_transformer)(uchar *arg)
Type for transformers used by Item::transform and Item::compile.
Definition: item.h:720
static void ensure_multi_equality_fields_are_available(Item **args, int arg_idx, table_map available_tables, bool replace, bool *found)
Definition: item_cmpfunc.cc:8597
bool wrap_in_cast(Item **item, enum_field_types type, bool fix_new_item=true)
Wraps the item into a CAST function to the type provided as argument.
Definition: item_cmpfunc.cc:1410
longlong get_time_value(THD *thd, Item ***item_arg, Item **, const Item *warn_item, bool *is_null)
Retrieve TIME value for comparison from given item.
Definition: item_cmpfunc.cc:1685
int(Arg_comparator::* arg_cmp_func)()
Definition: item_cmpfunc.h:79
bool wrap_in_decimal_cast(Item **a, int len, int dec, bool fix_new_item=true)
Wraps the item into a DECIMAL CAST.
Definition: item_cmpfunc.cc:1454
Eq_creator eq_creator
Definition: mysqld.cc:1557
Ge_creator ge_creator
Definition: mysqld.cc:1562
Item * make_condition(Parse_context *pc, Item *item)
Ensure that all expressions involved in conditions are boolean functions.
Definition: item_cmpfunc.cc:6079
void find_and_adjust_equal_fields(Item *item, table_map available_tables, bool replace, bool *found)
Definition: item_cmpfunc.cc:8578
Lt_creator lt_creator
Definition: mysqld.cc:1561
bool get_mysql_time_from_str_no_warn(THD *thd, String *str, MYSQL_TIME *l_time, MYSQL_TIME_STATUS *status)
A minion of get_mysql_time_from_str, see its description.
Definition: item_cmpfunc.cc:1004
Gt_creator gt_creator
Definition: mysqld.cc:1560
longlong get_date_value(THD *thd, Item ***item_arg, Item **, const Item *warn_item, bool *is_null)
Retrieve DATE value for comparison with given date.
Definition: item_cmpfunc.cc:1708
static const int UNKNOWN
Definition: item_cmpfunc.h:494
bool IsAnd(const Item *item)
Returns true if the item is a conjunction.
Definition: item_cmpfunc.h:2986
bool wrap_in_int_cast(Item **a, bool is_unsigned, bool fix_new_item=true)
Wraps the item into a INTEGER CAST.
Definition: item_cmpfunc.cc:1472
Ne_creator ne_creator
Definition: mysqld.cc:1558
Equal_creator equal_creator
Definition: mysqld.cc:1559
bool WalkConjunction(Item *condition, Func func)
Calls "func" on each term in "condition" if it's a conjunction (and recursively on any conjunction di...
Definition: item_cmpfunc.h:2999
bool get_mysql_time_from_str(THD *thd, String *str, enum_mysql_timestamp_type warn_type, const char *warn_name, MYSQL_TIME *l_time)
Parse date provided in a string to a MYSQL_TIME.
Definition: item_cmpfunc.cc:1031
Le_creator le_creator
Definition: mysqld.cc:1563
longlong get_datetime_value(THD *thd, Item ***item_arg, Item **, const Item *warn_item, bool *is_null)
Retrieve correct DATETIME value from given item.
Definition: item_cmpfunc.cc:1741
Item * and_conds(Item *a, Item *b)
Builds condition: (a AND b) IS TRUE.
Definition: item_cmpfunc.h:2938
String * eval_string_arg(const CHARSET_INFO *to_cs, Item *arg, String *buffer)
Definition: item_func.h:94
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
std::unique_ptr< T, Destroy_only< T > > unique_ptr_destroy_only
std::unique_ptr, but only destroying.
Definition: my_alloc.h:480
Header for compiler-dependent features.
It is interface module to fixed precision decimals library.
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
unsigned char uchar
Definition: my_inttypes.h:52
long long int longlong
Definition: my_inttypes.h:55
uint64_t uint64
Definition: my_inttypes.h:69
uint16_t uint16
Definition: my_inttypes.h:65
uint64_t table_map
Definition: my_table_map.h:30
Interface for low level time utilities.
unsigned int my_time_flags_t
Flags to str_to_datetime and int_to_datetime.
Definition: my_time.h:87
static bool replace
Definition: mysqlimport.cc:70
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1077
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
constexpr value_type is_unsigned
Definition: classic_protocol_constants.h:273
Definition: commit_order_queue.h:34
PT & ref(PT *tp)
Definition: tablespace_impl.cc:359
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
std::string join(const detail::range auto &rng, std::string_view delim)
join elements of a range into a string separated by a delimiter.
Definition: string.h:74
static mysql_service_status_t add(reference_caching_channel channel, const char *implementation_name) noexcept
Definition: component.cc:127
bool is_null(poly_thread thread, poly_value value)
Definition: jit_executor_type_conversion.cc:46
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2888
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2884
struct result result
Definition: result.h:34
required uint32 status
Definition: replication_asynchronous_connection_failover.proto:61
required string type
Definition: replication_group_member_actions.proto:34
static int compare(size_t a, size_t b)
Function to compare two size_t integers for their relative order.
Definition: rpl_utility.cc:107
File containing constants that can be used throughout the server.
constexpr const table_map RAND_TABLE_BIT
Definition: sql_const.h:113
constexpr const size_t STRING_BUFFER_USUAL_SIZE
Definition: sql_const.h:126
constexpr const table_map OUTER_REF_TABLE_BIT
Definition: sql_const.h:112
enum_walk
Enumeration for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:289
bool(Item::*)(unsigned char *) Item_processor
Processor type for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:307
int plan_idx
This represents the index of a JOIN_TAB/QEP_TAB in an array.
Definition: sql_opt_exec_shared.h:54
Our own string classes, used pervasively throughout the executor.
int sortcmp(const String *a, const String *b, const CHARSET_INFO *cs)
Definition: sql_string.cc:689
Definition: m_ctype.h:421
Definition: item_cmpfunc.h:2866
List< Item_multi_eq > current_level
List of multiple equalities in the current conjunction.
Definition: item_cmpfunc.h:2870
Definition: item_cmpfunc.h:1786
bool unsigned_flag
Definition: item_cmpfunc.h:1788
longlong val
Definition: item_cmpfunc.h:1787
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
Structure to return status from str_to_datetime(), str_to_time(), int_to_datetime(),...
Definition: my_time.h:173
Definition: mysql_time.h:82
Definition: my_bitmap.h:43
Bison "location" class.
Definition: parse_location.h:43
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:422
Definition: item_cmpfunc.h:1457
Item_result type
Definition: item_cmpfunc.h:1458
double dbl
Definition: item_cmpfunc.h:1459
my_decimal dec
Definition: item_cmpfunc.h:1460
Target down_cast(Source *arg)
Casts from one pointer type to another in a type hierarchy.
Definition: template_utils.h:95
constexpr T pointer_cast(void *p)
Casts from one pointer type, to another, without using reinterpret_cast or C-style cast: foo f; bar *...
Definition: template_utils.h:74
Item_result
Type of the user defined function return slot and arguments.
Definition: udf_registration_types.h:39
@ INT_RESULT
double
Definition: udf_registration_types.h:43
@ INVALID_RESULT
Definition: udf_registration_types.h:40
int n
Definition: xcom_base.cc:509