mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Removing duplicate code/declarations:
Removing "Field *result_field" from Item_field and Item_ref, and deriving Item_ident and Item_ref from Item_result_field instead.
This commit is contained in:
14
sql/item.cc
14
sql/item.cc
@@ -739,7 +739,7 @@ Item_ident::Item_ident(TABLE_LIST *view_arg, const char *field_name_arg)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Item_ident::Item_ident(THD *thd, Item_ident *item)
|
Item_ident::Item_ident(THD *thd, Item_ident *item)
|
||||||
:Item(thd, item),
|
:Item_result_field(thd, item),
|
||||||
orig_db_name(item->orig_db_name),
|
orig_db_name(item->orig_db_name),
|
||||||
orig_table_name(item->orig_table_name),
|
orig_table_name(item->orig_table_name),
|
||||||
orig_field_name(item->orig_field_name),
|
orig_field_name(item->orig_field_name),
|
||||||
@@ -758,7 +758,7 @@ void Item_ident::cleanup()
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("Item_ident::cleanup");
|
DBUG_ENTER("Item_ident::cleanup");
|
||||||
bool was_fixed= fixed;
|
bool was_fixed= fixed;
|
||||||
Item::cleanup();
|
Item_result_field::cleanup();
|
||||||
db_name= orig_db_name;
|
db_name= orig_db_name;
|
||||||
table_name= orig_table_name;
|
table_name= orig_table_name;
|
||||||
field_name= orig_field_name;
|
field_name= orig_field_name;
|
||||||
@@ -2189,7 +2189,7 @@ Item_field::Item_field(Name_resolution_context *context_arg,
|
|||||||
const char *db_arg,const char *table_name_arg,
|
const char *db_arg,const char *table_name_arg,
|
||||||
const char *field_name_arg)
|
const char *field_name_arg)
|
||||||
:Item_ident(context_arg, db_arg,table_name_arg,field_name_arg),
|
:Item_ident(context_arg, db_arg,table_name_arg,field_name_arg),
|
||||||
field(0), result_field(0), item_equal(0), no_const_subst(0),
|
field(0), item_equal(0), no_const_subst(0),
|
||||||
have_privileges(0), any_privileges(0)
|
have_privileges(0), any_privileges(0)
|
||||||
{
|
{
|
||||||
SELECT_LEX *select= current_thd->lex->current_select;
|
SELECT_LEX *select= current_thd->lex->current_select;
|
||||||
@@ -2206,7 +2206,6 @@ Item_field::Item_field(Name_resolution_context *context_arg,
|
|||||||
Item_field::Item_field(THD *thd, Item_field *item)
|
Item_field::Item_field(THD *thd, Item_field *item)
|
||||||
:Item_ident(thd, item),
|
:Item_ident(thd, item),
|
||||||
field(item->field),
|
field(item->field),
|
||||||
result_field(item->result_field),
|
|
||||||
item_equal(item->item_equal),
|
item_equal(item->item_equal),
|
||||||
no_const_subst(item->no_const_subst),
|
no_const_subst(item->no_const_subst),
|
||||||
have_privileges(item->have_privileges),
|
have_privileges(item->have_privileges),
|
||||||
@@ -5172,7 +5171,7 @@ void Item_field::cleanup()
|
|||||||
it will be linked correctly next time by name of field and table alias.
|
it will be linked correctly next time by name of field and table alias.
|
||||||
I.e. we can drop 'field'.
|
I.e. we can drop 'field'.
|
||||||
*/
|
*/
|
||||||
field= result_field= 0;
|
field= 0;
|
||||||
item_equal= NULL;
|
item_equal= NULL;
|
||||||
null_value= FALSE;
|
null_value= FALSE;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@@ -6611,7 +6610,7 @@ Item_ref::Item_ref(Name_resolution_context *context_arg,
|
|||||||
const char *field_name_arg,
|
const char *field_name_arg,
|
||||||
bool alias_name_used_arg)
|
bool alias_name_used_arg)
|
||||||
:Item_ident(context_arg, NullS, table_name_arg, field_name_arg),
|
:Item_ident(context_arg, NullS, table_name_arg, field_name_arg),
|
||||||
result_field(0), ref(item), reference_trough_name(0)
|
ref(item), reference_trough_name(0)
|
||||||
{
|
{
|
||||||
alias_name_used= alias_name_used_arg;
|
alias_name_used= alias_name_used_arg;
|
||||||
/*
|
/*
|
||||||
@@ -6655,7 +6654,7 @@ public:
|
|||||||
Item_ref::Item_ref(TABLE_LIST *view_arg, Item **item,
|
Item_ref::Item_ref(TABLE_LIST *view_arg, Item **item,
|
||||||
const char *field_name_arg, bool alias_name_used_arg)
|
const char *field_name_arg, bool alias_name_used_arg)
|
||||||
:Item_ident(view_arg, field_name_arg),
|
:Item_ident(view_arg, field_name_arg),
|
||||||
result_field(NULL), ref(item), reference_trough_name(0)
|
ref(item), reference_trough_name(0)
|
||||||
{
|
{
|
||||||
alias_name_used= alias_name_used_arg;
|
alias_name_used= alias_name_used_arg;
|
||||||
/*
|
/*
|
||||||
@@ -6999,7 +6998,6 @@ void Item_ref::cleanup()
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("Item_ref::cleanup");
|
DBUG_ENTER("Item_ref::cleanup");
|
||||||
Item_ident::cleanup();
|
Item_ident::cleanup();
|
||||||
result_field= 0;
|
|
||||||
if (reference_trough_name)
|
if (reference_trough_name)
|
||||||
{
|
{
|
||||||
/* We have to reset the reference as it may been freed */
|
/* We have to reset the reference as it may been freed */
|
||||||
|
68
sql/item.h
68
sql/item.h
@@ -2069,7 +2069,33 @@ public:
|
|||||||
#define NO_CACHED_FIELD_INDEX ((uint)(-1))
|
#define NO_CACHED_FIELD_INDEX ((uint)(-1))
|
||||||
|
|
||||||
class st_select_lex;
|
class st_select_lex;
|
||||||
class Item_ident :public Item
|
|
||||||
|
|
||||||
|
class Item_result_field :public Item /* Item with result field */
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Field *result_field; /* Save result here */
|
||||||
|
Item_result_field() :result_field(0) {}
|
||||||
|
// Constructor used for Item_sum/Item_cond_and/or (see Item comment)
|
||||||
|
Item_result_field(THD *thd, Item_result_field *item):
|
||||||
|
Item(thd, item), result_field(item->result_field)
|
||||||
|
{}
|
||||||
|
~Item_result_field() {} /* Required with gcc 2.95 */
|
||||||
|
Field *get_tmp_table_field() { return result_field; }
|
||||||
|
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
||||||
|
table_map used_tables() const { return true; }
|
||||||
|
void set_result_field(Field *field) { result_field= field; }
|
||||||
|
bool is_result_field() { return true; }
|
||||||
|
void save_in_result_field(bool no_conversions)
|
||||||
|
{
|
||||||
|
save_in_field(result_field, no_conversions);
|
||||||
|
}
|
||||||
|
void cleanup();
|
||||||
|
bool check_vcol_func_processor(uchar *arg) { return FALSE;}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Item_ident :public Item_result_field
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/*
|
/*
|
||||||
@@ -2165,7 +2191,7 @@ class Item_field :public Item_ident
|
|||||||
protected:
|
protected:
|
||||||
void set_field(Field *field);
|
void set_field(Field *field);
|
||||||
public:
|
public:
|
||||||
Field *field,*result_field;
|
Field *field;
|
||||||
Item_equal *item_equal;
|
Item_equal *item_equal;
|
||||||
bool no_const_subst;
|
bool no_const_subst;
|
||||||
/*
|
/*
|
||||||
@@ -2234,8 +2260,6 @@ public:
|
|||||||
return MONOTONIC_STRICT_INCREASING;
|
return MONOTONIC_STRICT_INCREASING;
|
||||||
}
|
}
|
||||||
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
|
||||||
Field *get_tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
|
||||||
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
|
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
|
||||||
bool get_date_result(MYSQL_TIME *ltime,ulonglong fuzzydate);
|
bool get_date_result(MYSQL_TIME *ltime,ulonglong fuzzydate);
|
||||||
bool is_null() { return field->is_null(); }
|
bool is_null() { return field->is_null(); }
|
||||||
@@ -2261,6 +2285,9 @@ public:
|
|||||||
{
|
{
|
||||||
update_table_bitmaps();
|
update_table_bitmaps();
|
||||||
}
|
}
|
||||||
|
bool is_result_field() { return false; }
|
||||||
|
void set_result_field(Field *field) {}
|
||||||
|
void save_in_result_field(bool no_conversions) { }
|
||||||
Item *get_tmp_table_item(THD *thd);
|
Item *get_tmp_table_item(THD *thd);
|
||||||
bool collect_item_field_processor(uchar * arg);
|
bool collect_item_field_processor(uchar * arg);
|
||||||
bool add_field_to_set_processor(uchar * arg);
|
bool add_field_to_set_processor(uchar * arg);
|
||||||
@@ -2270,7 +2297,6 @@ public:
|
|||||||
bool register_field_in_bitmap(uchar *arg);
|
bool register_field_in_bitmap(uchar *arg);
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
bool vcol_in_partition_func_processor(uchar *bool_arg);
|
bool vcol_in_partition_func_processor(uchar *bool_arg);
|
||||||
bool check_vcol_func_processor(uchar *arg) { return FALSE;}
|
|
||||||
bool enumerate_field_refs_processor(uchar *arg);
|
bool enumerate_field_refs_processor(uchar *arg);
|
||||||
bool update_table_bitmaps_processor(uchar *arg);
|
bool update_table_bitmaps_processor(uchar *arg);
|
||||||
void cleanup();
|
void cleanup();
|
||||||
@@ -3241,30 +3267,6 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Item_result_field :public Item /* Item with result field */
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Field *result_field; /* Save result here */
|
|
||||||
Item_result_field() :result_field(0) {}
|
|
||||||
// Constructor used for Item_sum/Item_cond_and/or (see Item comment)
|
|
||||||
Item_result_field(THD *thd, Item_result_field *item):
|
|
||||||
Item(thd, item), result_field(item->result_field)
|
|
||||||
{}
|
|
||||||
~Item_result_field() {} /* Required with gcc 2.95 */
|
|
||||||
Field *get_tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
|
||||||
table_map used_tables() const { return 1; }
|
|
||||||
void set_result_field(Field *field) { result_field= field; }
|
|
||||||
bool is_result_field() { return 1; }
|
|
||||||
void save_in_result_field(bool no_conversions)
|
|
||||||
{
|
|
||||||
save_in_field(result_field, no_conversions);
|
|
||||||
}
|
|
||||||
void cleanup();
|
|
||||||
bool check_vcol_func_processor(uchar *arg) { return FALSE;}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Array of items, e.g. function or aggerate function arguments.
|
Array of items, e.g. function or aggerate function arguments.
|
||||||
*/
|
*/
|
||||||
@@ -3376,14 +3378,13 @@ protected:
|
|||||||
void set_properties();
|
void set_properties();
|
||||||
public:
|
public:
|
||||||
enum Ref_Type { REF, DIRECT_REF, VIEW_REF, OUTER_REF, AGGREGATE_REF };
|
enum Ref_Type { REF, DIRECT_REF, VIEW_REF, OUTER_REF, AGGREGATE_REF };
|
||||||
Field *result_field; /* Save result here */
|
|
||||||
Item **ref;
|
Item **ref;
|
||||||
bool reference_trough_name;
|
bool reference_trough_name;
|
||||||
Item_ref(Name_resolution_context *context_arg,
|
Item_ref(Name_resolution_context *context_arg,
|
||||||
const char *db_arg, const char *table_name_arg,
|
const char *db_arg, const char *table_name_arg,
|
||||||
const char *field_name_arg)
|
const char *field_name_arg)
|
||||||
:Item_ident(context_arg, db_arg, table_name_arg, field_name_arg),
|
:Item_ident(context_arg, db_arg, table_name_arg, field_name_arg),
|
||||||
result_field(0), ref(0), reference_trough_name(1) {}
|
ref(0), reference_trough_name(1) {}
|
||||||
/*
|
/*
|
||||||
This constructor is used in two scenarios:
|
This constructor is used in two scenarios:
|
||||||
A) *item = NULL
|
A) *item = NULL
|
||||||
@@ -3406,7 +3407,7 @@ public:
|
|||||||
|
|
||||||
/* Constructor need to process subselect with temporary tables (see Item) */
|
/* Constructor need to process subselect with temporary tables (see Item) */
|
||||||
Item_ref(THD *thd, Item_ref *item)
|
Item_ref(THD *thd, Item_ref *item)
|
||||||
:Item_ident(thd, item), result_field(item->result_field), ref(item->ref) {}
|
:Item_ident(thd, item), ref(item->ref) {}
|
||||||
enum Type type() const { return REF_ITEM; }
|
enum Type type() const { return REF_ITEM; }
|
||||||
enum Type real_type() const { return ref ? (*ref)->type() :
|
enum Type real_type() const { return ref ? (*ref)->type() :
|
||||||
REF_ITEM; }
|
REF_ITEM; }
|
||||||
@@ -3442,6 +3443,7 @@ public:
|
|||||||
enum_field_types field_type() const { return (*ref)->field_type(); }
|
enum_field_types field_type() const { return (*ref)->field_type(); }
|
||||||
Field *get_tmp_table_field()
|
Field *get_tmp_table_field()
|
||||||
{ return result_field ? result_field : (*ref)->get_tmp_table_field(); }
|
{ return result_field ? result_field : (*ref)->get_tmp_table_field(); }
|
||||||
|
Field *tmp_table_field(TABLE *t_arg) { return 0; }
|
||||||
Item *get_tmp_table_item(THD *thd);
|
Item *get_tmp_table_item(THD *thd);
|
||||||
table_map used_tables() const;
|
table_map used_tables() const;
|
||||||
void update_used_tables();
|
void update_used_tables();
|
||||||
@@ -3453,8 +3455,6 @@ public:
|
|||||||
{
|
{
|
||||||
return depended_from ? 0 : (*ref)->not_null_tables();
|
return depended_from ? 0 : (*ref)->not_null_tables();
|
||||||
}
|
}
|
||||||
void set_result_field(Field *field) { result_field= field; }
|
|
||||||
bool is_result_field() { return 1; }
|
|
||||||
void save_in_result_field(bool no_conversions)
|
void save_in_result_field(bool no_conversions)
|
||||||
{
|
{
|
||||||
(*ref)->save_in_field(result_field, no_conversions);
|
(*ref)->save_in_field(result_field, no_conversions);
|
||||||
|
Reference in New Issue
Block a user