~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/nested_join.h

  • Committer: Brian Aker
  • Date: 2011-04-23 09:16:34 UTC
  • mfrom: (2263.8.5 drizzle-bug-NNNNNN)
  • Revision ID: brian@tangent.org-20110423091634-smb5zbxr6qicm0yp
Merge in refactor

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
class NestedJoin
31
31
{
32
32
public:
 
33
  /*
 
34
    This constructor serves for creation of NestedJoin instances
 
35
  */
 
36
  NestedJoin() 
 
37
  :
 
38
  join_list(),
 
39
  used_tables(),
 
40
  not_null_tables(),
 
41
  first_nested(NULL),
 
42
  counter_(0),
 
43
  nj_map(),
 
44
  sj_depends_on(),
 
45
  sj_corr_tables(),
 
46
  sj_outer_expr_list()      
 
47
  { }    
 
48
 
33
49
  /* list of elements in the nested join */
34
50
  List<TableList> join_list;
35
51
 
36
52
  /* bitmap of tables in the nested join */
37
53
  table_map used_tables;
38
 
 
 
54
  
39
55
  /* tables that rejects nulls           */
40
56
  table_map not_null_tables;
41
57
 
49
65
    by the join optimizer.
50
66
    Before each use the counters are zeroed by reset_nj_counters.
51
67
  */
 
68
 
52
69
  uint32_t counter_;
53
70
 
54
71
  /* Bit used to identify this nested join*/
55
72
  std::bitset<64> nj_map;
56
73
 
57
74
  /*
 
75
     True if this join nest node is completely covered by the query execution
 
76
     plan. This means two things.
 
77
 
 
78
     1. All tables on its @c join_list are covered by the plan.
 
79
 
 
80
     2. All child join nest nodes are fully covered.
 
81
   */
 
82
 
 
83
  bool is_fully_covered() const { return join_list.size() == counter_; }
 
84
 
 
85
  /* To get the table_map sj_depends_on */
 
86
  table_map getSjDependsOn() const
 
87
  {
 
88
    return sj_depends_on;
 
89
  }
 
90
 
 
91
  /* To set the table_map sj_depends_on */
 
92
  void setSjDependsOn(const table_map &in_sj_depends_on)
 
93
  {
 
94
    sj_depends_on= in_sj_depends_on;
 
95
  }
 
96
 
 
97
  /* To get the table_map sj_corr_tables */
 
98
  table_map getSjCorrTables() const
 
99
  {
 
100
    return sj_corr_tables;
 
101
  }
 
102
  
 
103
  /* To set the table_map sj_corr_tables */
 
104
  void setSjCorrTables(const table_map &in_sj_corr_tables) 
 
105
  {
 
106
    sj_corr_tables= in_sj_corr_tables;
 
107
  }
 
108
 
 
109
  /* To get the List sj_outer_expr_list */
 
110
  const List<Item>& getSjOuterExprList() const
 
111
  {
 
112
    return sj_outer_expr_list;
 
113
  }
 
114
  
 
115
  /* To set the List sj_outer_expr_list */
 
116
  void setSjOuterExprList(const List<Item> &in_sj_outer_expr_list)
 
117
  {
 
118
    sj_outer_expr_list= in_sj_outer_expr_list;
 
119
  }
 
120
 
 
121
private:
 
122
  /*
58
123
    (Valid only for semi-join nests) Bitmap of tables outside the semi-join
59
124
    that are used within the semi-join's ON condition.
60
125
  */
61
126
  table_map sj_depends_on;
 
127
  
62
128
  /* Outer non-trivially correlated tables */
63
129
  table_map sj_corr_tables;
64
130
 
65
131
  List<Item> sj_outer_expr_list;
66
132
 
67
 
  /**
68
 
     True if this join nest node is completely covered by the query execution
69
 
     plan. This means two things.
70
 
 
71
 
     1. All tables on its @c join_list are covered by the plan.
72
 
 
73
 
     2. All child join nest nodes are fully covered.
74
 
   */
75
 
  bool is_fully_covered() const { return join_list.size() == counter_; }
76
133
};
77
134
 
78
135
} /* namespace drizzled */