summaryrefslogtreecommitdiff
path: root/sql/item.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item.h')
-rw-r--r--sql/item.h27
1 files changed, 21 insertions, 6 deletions
diff --git a/sql/item.h b/sql/item.h
index 205c72ede9c..d680c9cf4c6 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -734,7 +734,7 @@ public:
/*
Bitmap of tables used by item
(note: if you need to check dependencies on individual columns, check out
- check_column_usage_processor)
+ class Field_enumerator)
*/
virtual table_map used_tables() const { return (table_map) 0L; }
/*
@@ -892,7 +892,7 @@ public:
virtual bool reset_query_id_processor(uchar *query_id_arg) { return 0; }
virtual bool is_expensive_processor(uchar *arg) { return 0; }
virtual bool register_field_in_read_map(uchar *arg) { return 0; }
- virtual bool check_column_usage_processor(uchar *arg) { return 0; }
+ virtual bool enumerate_field_refs_processor(uchar *arg) { return 0; }
virtual bool mark_as_eliminated_processor(uchar *arg) { return 0; }
/*
Check if a partition function is allowed
@@ -1018,14 +1018,29 @@ public:
};
-/* Data for Item::check_column_usage_processor */
+/*
+ Class to be used to enumerate all field references in an item tree.
+ Suggested usage:
+
+ class My_enumerator : public Field_enumerator
+ {
+ virtual void visit_field() { ... your actions ...}
+ }
+
+ My_enumerator enumerator;
+ item->walk(Item::enumerate_field_refs_processor, ...,(uchar*)&enumerator);
+
+ This is similar to Visitor pattern.
+*/
+
class Field_enumerator
{
public:
- virtual void see_field(Field *field)= 0;
- virtual ~Field_enumerator() {}; /* Shut up compiler warning */
+ virtual void visit_field(Field *field)= 0;
+ virtual ~Field_enumerator() {}; /* purecov: inspected */
};
+
class sp_head;
@@ -1491,7 +1506,7 @@ public:
bool find_item_in_field_list_processor(uchar *arg);
bool register_field_in_read_map(uchar *arg);
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
- bool check_column_usage_processor(uchar *arg);
+ bool enumerate_field_refs_processor(uchar *arg);
void cleanup();
bool result_as_longlong()
{