00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #pragma once
00021
00022 #include <drizzled/item/ref.h>
00023 #include <drizzled/item/direct_ref.h>
00024 #include <drizzled/item/field.h>
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 namespace drizzled {
00037
00038 class Item_outer_ref : public Item_direct_ref
00039 {
00040 public:
00041 Item *outer_ref;
00042
00043 Item_sum *in_sum_func;
00044
00045
00046
00047
00048 bool found_in_select_list;
00049 Item_outer_ref(Name_resolution_context *context_arg,
00050 Item_field *outer_field_arg)
00051 :Item_direct_ref(context_arg, 0, outer_field_arg->table_name,
00052 outer_field_arg->field_name),
00053 outer_ref(outer_field_arg), in_sum_func(0),
00054 found_in_select_list(0)
00055 {
00056 ref= &outer_ref;
00057 set_properties();
00058 fixed= 0;
00059 }
00060 Item_outer_ref(Name_resolution_context *context_arg, Item **item,
00061 const char *table_name_arg, const char *field_name_arg,
00062 bool alias_name_used_arg)
00063 :Item_direct_ref(context_arg, item, table_name_arg, field_name_arg,
00064 alias_name_used_arg),
00065 outer_ref(0), in_sum_func(0), found_in_select_list(1)
00066 {}
00067 void save_in_result_field(bool)
00068 {
00069 outer_ref->save_org_in_field(result_field);
00070 }
00071 bool fix_fields(Session *, Item **);
00072 void fix_after_pullout(Select_Lex *new_parent, Item **ref);
00073 table_map used_tables() const
00074 {
00075 return (*ref)->const_item() ? 0 : OUTER_REF_TABLE_BIT;
00076 }
00077 virtual Ref_Type ref_type() { return OUTER_REF; }
00078 };
00079
00080 }
00081