1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
1 |
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
|
2 |
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
|
|
3 |
*
|
|
1999.6.1
by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file |
4 |
* Copyright (C) 2008-2009 Sun Microsystems, Inc.
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
5 |
*
|
6 |
* This program is free software; you can redistribute it and/or modify
|
|
7 |
* it under the terms of the GNU General Public License as published by
|
|
8 |
* the Free Software Foundation; either version 2 of the License, or
|
|
9 |
* (at your option) any later version.
|
|
10 |
*
|
|
11 |
* This program is distributed in the hope that it will be useful,
|
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14 |
* GNU General Public License for more details.
|
|
15 |
*
|
|
16 |
* You should have received a copy of the GNU General Public License
|
|
17 |
* along with this program; if not, write to the Free Software
|
|
18 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19 |
*/
|
|
20 |
||
21 |
/**
|
|
22 |
* @file
|
|
23 |
*
|
|
1541.1.1
by Brian Aker
JOIN -> Join rename |
24 |
* Defines the Join class
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
25 |
*/
|
26 |
||
2234
by Brian Aker
Mass removal of ifdef/endif in favor of pragma once. |
27 |
#pragma once
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
28 |
|
2221.7.4
by Olaf van der Spek
Refactor |
29 |
#include <drizzled/dynamic_array.h> |
1108.6.29
by Padraig O'Sullivan
Added an optimizer namespace and sub-directory within drizzled. Moved the |
30 |
#include <drizzled/optimizer/position.h> |
2154.2.7
by Brian Aker
class Join constructor moved out. |
31 |
#include <drizzled/sql_select.h> |
2154.2.17
by Brian Aker
Additional removal of session |
32 |
#include <drizzled/tmp_table_param.h> |
1100.4.2
by Padraig O'Sullivan
Removed the typedef for nested_join_map and instead just declare these |
33 |
#include <bitset> |
34 |
||
2252.1.14
by Olaf van der Spek
Common fwd |
35 |
namespace drizzled { |
2154.2.7
by Brian Aker
class Join constructor moved out. |
36 |
|
2318.6.43
by Olaf van der Spek
Refactor |
37 |
class Join : public memory::SqlAlloc, boost::noncopyable |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
38 |
{
|
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
39 |
/**
|
1108.6.8
by Padraig O'Sullivan
Made the positions member of the JOIN class private (finally got that |
40 |
* Contains a partial query execution plan which is extended during
|
41 |
* cost-based optimization.
|
|
42 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
43 |
optimizer::Position positions[MAX_TABLES+1]; |
1108.6.8
by Padraig O'Sullivan
Made the positions member of the JOIN class private (finally got that |
44 |
|
45 |
/**
|
|
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
46 |
* Contains the optimal query execution plan after cost-based optimization
|
47 |
* has taken place.
|
|
48 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
49 |
optimizer::Position best_positions[MAX_TABLES+1]; |
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
50 |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
51 |
public: |
1089.1.1
by Brian Aker
Remove of JOIN_TAB to JoinTable |
52 |
JoinTable *join_tab; |
53 |
JoinTable **best_ref; |
|
54 |
JoinTable **map2table; /**< mapping between table indexes and JoinTables */ |
|
55 |
JoinTable *join_tab_save; /**< saved join_tab for subquery reexecution */ |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
56 |
|
57 |
Table **table; |
|
58 |
Table **all_tables; |
|
59 |
/**
|
|
60 |
The table which has an index that allows to produce the requried ordering.
|
|
61 |
A special value of 0x1 means that the ordering will be produced by
|
|
62 |
passing 1st non-const table to filesort(). NULL means no such table exists.
|
|
63 |
*/
|
|
64 |
Table *sort_by_table; |
|
65 |
||
66 |
uint32_t tables; /**< Number of tables in the join */ |
|
67 |
uint32_t outer_tables; /**< Number of tables that are not inside semijoin */ |
|
68 |
uint32_t const_tables; |
|
69 |
uint32_t send_group_parts; |
|
70 |
||
71 |
bool sort_and_group; |
|
72 |
bool first_record; |
|
73 |
bool full_join; |
|
74 |
bool group; |
|
75 |
bool no_field_update; |
|
76 |
bool do_send_rows; |
|
77 |
/**
|
|
78 |
true when we want to resume nested loop iterations when
|
|
79 |
fetching data from a cursor
|
|
80 |
*/
|
|
81 |
bool resume_nested_loop; |
|
82 |
/**
|
|
83 |
true <=> optimizer must not mark any table as a constant table.
|
|
84 |
This is needed for subqueries in form "a IN (SELECT .. UNION SELECT ..):
|
|
85 |
when we optimize the select that reads the results of the union from a
|
|
86 |
temporary table, we must not mark the temp. table as constant because
|
|
87 |
the number of rows in it may vary from one subquery execution to another.
|
|
88 |
*/
|
|
89 |
bool no_const_tables; |
|
90 |
bool select_distinct; /**< Set if SELECT DISTINCT */ |
|
91 |
/**
|
|
92 |
If we have the GROUP BY statement in the query,
|
|
93 |
but the group_list was emptied by optimizer, this
|
|
94 |
flag is true.
|
|
95 |
It happens when fields in the GROUP BY are from
|
|
96 |
constant table
|
|
97 |
*/
|
|
98 |
bool group_optimized_away; |
|
99 |
||
100 |
/*
|
|
101 |
simple_xxxxx is set if order_st/GROUP BY doesn't include any references
|
|
1541.1.1
by Brian Aker
JOIN -> Join rename |
102 |
to other tables than the first non-constant table in the Join.
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
103 |
It's also set if order_st/GROUP BY is empty.
|
104 |
*/
|
|
105 |
bool simple_order; |
|
106 |
bool simple_group; |
|
107 |
/**
|
|
108 |
Is set only in case if we have a GROUP BY clause
|
|
1273.2.15
by Stewart Smith
fix accidental mangling of comment: s/order_st BY/ORDER BY/. in drizzled/join.h |
109 |
and no ORDER BY after constant elimination of 'order'.
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
110 |
*/
|
111 |
bool no_order; |
|
1273.2.15
by Stewart Smith
fix accidental mangling of comment: s/order_st BY/ORDER BY/. in drizzled/join.h |
112 |
/** Is set if we have a GROUP BY and we have ORDER BY on a constant. */
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
113 |
bool skip_sort_order; |
114 |
bool union_part; /**< this subselect is part of union */ |
|
115 |
bool optimized; /**< flag to avoid double optimization in EXPLAIN */ |
|
116 |
bool need_tmp; |
|
117 |
bool hidden_group_fields; |
|
118 |
||
119 |
table_map const_table_map; |
|
120 |
table_map found_const_table_map; |
|
121 |
table_map outer_join; |
|
122 |
||
123 |
ha_rows send_records; |
|
124 |
ha_rows found_records; |
|
125 |
ha_rows examined_rows; |
|
126 |
ha_rows row_limit; |
|
127 |
ha_rows select_limit; |
|
128 |
/**
|
|
129 |
Used to fetch no more than given amount of rows per one
|
|
130 |
fetch operation of server side cursor.
|
|
131 |
The value is checked in end_send and end_send_group in fashion, similar
|
|
132 |
to offset_limit_cnt:
|
|
133 |
- fetch_limit= HA_POS_ERROR if there is no cursor.
|
|
134 |
- when we open a cursor, we set fetch_limit to 0,
|
|
135 |
- on each fetch iteration we add num_rows to fetch to fetch_limit
|
|
136 |
*/
|
|
137 |
ha_rows fetch_limit; |
|
138 |
||
139 |
Session *session; |
|
140 |
List<Item> *fields; |
|
2026.2.1
by Monty Taylor
Renamed things prefixed mysql_ or mysqld_ |
141 |
List<Item> &fields_list; /**< hold field list passed to select_query */ |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
142 |
List<TableList> *join_list; /**< list of joined tables in reverse order */ |
143 |
/** unit structure (with global parameters) for this select */
|
|
144 |
Select_Lex_Unit *unit; |
|
145 |
/** select that processed */
|
|
146 |
Select_Lex *select_lex; |
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
147 |
optimizer::SqlSelect *select; /**< created in optimization phase */ |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
148 |
|
149 |
/**
|
|
150 |
Bitmap of nested joins embedding the position at the end of the current
|
|
151 |
partial join (valid only during join optimizer run).
|
|
152 |
*/
|
|
1100.4.2
by Padraig O'Sullivan
Removed the typedef for nested_join_map and instead just declare these |
153 |
std::bitset<64> cur_embedding_map; |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
154 |
|
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
155 |
/**
|
156 |
* The cost for the final query execution plan chosen after optimization
|
|
157 |
* has completed. The QEP is stored in the best_positions variable.
|
|
158 |
*/
|
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
159 |
double best_read; |
1101.1.16
by Monty Taylor
Reverted 1103 |
160 |
List<Cached_item> group_fields; |
161 |
List<Cached_item> group_fields_cache; |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
162 |
Table *tmp_table; |
163 |
/** used to store 2 possible tmp table of SELECT */
|
|
164 |
Table *exec_tmp_table1; |
|
165 |
Table *exec_tmp_table2; |
|
166 |
Item_sum **sum_funcs; |
|
167 |
Item_sum ***sum_funcs_end; |
|
168 |
/** second copy of sumfuncs (for queries with 2 temporary tables */
|
|
169 |
Item_sum **sum_funcs2; |
|
170 |
Item_sum ***sum_funcs_end2; |
|
171 |
Item *having; |
|
172 |
Item *tmp_having; /**< To store having when processed temporary table */ |
|
173 |
Item *having_history; /**< Store having for explain */ |
|
174 |
uint64_t select_options; |
|
175 |
select_result *result; |
|
176 |
Tmp_Table_Param tmp_table_param; |
|
1711.6.1
by Brian Aker
Style on structure cleanup |
177 |
DrizzleLock *lock; |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
178 |
|
1541.1.1
by Brian Aker
JOIN -> Join rename |
179 |
Join *tmp_join; /**< copy of this Join to be used with temporary tables */ |
2082.3.1
by vjsamuel1990 at gmail
Merge conversion of ROLLUP from struct to class. |
180 |
Rollup rollup; /**< Used with rollup */ |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
181 |
DYNAMIC_ARRAY keyuse; |
182 |
Item::cond_result cond_value; |
|
183 |
Item::cond_result having_value; |
|
184 |
List<Item> all_fields; /**< to store all fields that used in query */ |
|
185 |
/** Above list changed to use temporary table */
|
|
186 |
List<Item> tmp_all_fields1; |
|
187 |
List<Item> tmp_all_fields2; |
|
188 |
List<Item> tmp_all_fields3; |
|
189 |
/** Part, shared with list above, emulate following list */
|
|
190 |
List<Item> tmp_fields_list1; |
|
191 |
List<Item> tmp_fields_list2; |
|
192 |
List<Item> tmp_fields_list3; |
|
193 |
int error; |
|
194 |
||
1892.3.3
by tdavies
struct order_st changed and renamed to c++ class named:Order |
195 |
Order *order; |
2026.2.1
by Monty Taylor
Renamed things prefixed mysql_ or mysqld_ |
196 |
Order *group_list; /**< hold parameters of select_query */ |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
197 |
COND *conds; // ---"--- |
198 |
Item *conds_history; /**< store WHERE for explain */ |
|
2026.2.1
by Monty Taylor
Renamed things prefixed mysql_ or mysqld_ |
199 |
TableList *tables_list; /**< hold 'tables' parameter of select_query */ |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
200 |
COND_EQUAL *cond_equal; |
1089.1.1
by Brian Aker
Remove of JOIN_TAB to JoinTable |
201 |
JoinTable *return_tab; /**< used only for outer joins */ |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
202 |
Item **ref_pointer_array; /**< used pointer reference for this select */ |
203 |
/** Copy of above to be used with different lists */
|
|
204 |
Item **items0; |
|
205 |
Item **items1; |
|
206 |
Item **items2; |
|
207 |
Item **items3; |
|
208 |
Item **current_ref_pointer_array; |
|
209 |
uint32_t ref_pointer_array_size; ///< size of above in bytes |
|
210 |
const char *zero_result_cause; ///< not 0 if exec must return zero result |
|
211 |
||
212 |
/*
|
|
213 |
storage for caching buffers allocated during query execution.
|
|
214 |
These buffers allocations need to be cached as the thread memory pool is
|
|
215 |
cleared only at the end of the execution of the whole query and not caching
|
|
216 |
allocations that occur in repetition at execution time will result in
|
|
217 |
excessive memory usage.
|
|
218 |
*/
|
|
1711.6.1
by Brian Aker
Style on structure cleanup |
219 |
SortField *sortorder; // make_unireg_sortorder() |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
220 |
Table **table_reexec; // make_simple_join() |
1089.1.1
by Brian Aker
Remove of JOIN_TAB to JoinTable |
221 |
JoinTable *join_tab_reexec; // make_simple_join() |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
222 |
/* end of allocation caching storage */
|
223 |
||
224 |
/** Constructors */
|
|
1541.1.1
by Brian Aker
JOIN -> Join rename |
225 |
Join(Session *session_arg, |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
226 |
List<Item> &fields_arg, |
227 |
uint64_t select_options_arg, |
|
2154.2.7
by Brian Aker
class Join constructor moved out. |
228 |
select_result *result_arg); |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
229 |
|
230 |
/**
|
|
231 |
* This method is currently only used when a subselect EXPLAIN is performed.
|
|
232 |
* I pulled out the init() method and have simply reset the values to what
|
|
233 |
* was previously in the init() method. See the note about the hack in
|
|
234 |
* sql_union.cc...
|
|
235 |
*/
|
|
2154.2.7
by Brian Aker
class Join constructor moved out. |
236 |
void reset(Session *session_arg, |
237 |
List<Item> &fields_arg, |
|
238 |
uint64_t select_options_arg, |
|
239 |
select_result *result_arg); |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
240 |
|
241 |
int prepare(Item ***rref_pointer_array, |
|
242 |
TableList *tables, |
|
243 |
uint32_t wind_num, |
|
244 |
COND *conds, |
|
245 |
uint32_t og_num, |
|
1892.3.3
by tdavies
struct order_st changed and renamed to c++ class named:Order |
246 |
Order *order, |
247 |
Order *group, |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
248 |
Item *having, |
249 |
Select_Lex *select, |
|
250 |
Select_Lex_Unit *unit); |
|
2154.2.7
by Brian Aker
class Join constructor moved out. |
251 |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
252 |
int optimize(); |
253 |
int reinit(); |
|
254 |
void exec(); |
|
255 |
int destroy(); |
|
256 |
void restore_tmp(); |
|
257 |
bool alloc_func_list(); |
|
258 |
bool setup_subquery_materialization(); |
|
259 |
bool make_sum_func_list(List<Item> &all_fields, |
|
260 |
List<Item> &send_fields, |
|
261 |
bool before_group_by, |
|
262 |
bool recompute= false); |
|
263 |
||
264 |
inline void set_items_ref_array(Item **ptr) |
|
265 |
{
|
|
266 |
memcpy(ref_pointer_array, ptr, ref_pointer_array_size); |
|
267 |
current_ref_pointer_array= ptr; |
|
268 |
}
|
|
269 |
inline void init_items_ref_array() |
|
270 |
{
|
|
2183.2.17
by Olaf van der Spek
Use List::size() |
271 |
items0= ref_pointer_array + all_fields.size(); |
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
272 |
memcpy(items0, ref_pointer_array, ref_pointer_array_size); |
273 |
current_ref_pointer_array= items0; |
|
274 |
}
|
|
275 |
||
276 |
bool rollup_init(); |
|
277 |
bool rollup_make_fields(List<Item> &all_fields, |
|
278 |
List<Item> &fields, |
|
279 |
Item_sum ***func); |
|
280 |
int rollup_send_data(uint32_t idx); |
|
281 |
int rollup_write_data(uint32_t idx, Table *table); |
|
282 |
void remove_subq_pushed_predicates(Item **where); |
|
283 |
/**
|
|
284 |
Release memory and, if possible, the open tables held by this execution
|
|
285 |
plan (and nested plans). It's used to release some tables before
|
|
286 |
the end of execution in order to increase concurrency and reduce
|
|
287 |
memory consumption.
|
|
288 |
*/
|
|
289 |
void join_free(); |
|
1541.1.1
by Brian Aker
JOIN -> Join rename |
290 |
/** Cleanup this Join, possibly for reuse */
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
291 |
void cleanup(bool full); |
292 |
void clear(); |
|
2318.6.25
by Olaf van der Spek
Refactor |
293 |
void save_join_tab(); |
294 |
void init_save_join_tab(); |
|
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
295 |
bool send_row_on_empty_set() |
296 |
{
|
|
297 |
return (do_send_rows && tmp_table_param.sum_func_count != 0 && |
|
298 |
!group_list); |
|
299 |
}
|
|
300 |
bool change_result(select_result *result); |
|
2154.2.7
by Brian Aker
class Join constructor moved out. |
301 |
bool is_top_level_join() const; |
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
302 |
|
1108.6.11
by Padraig O'Sullivan
Added some doxygen comments to the new methods added to the JOIN class. |
303 |
/**
|
304 |
* Copy the partial query plan into the optimal query plan.
|
|
305 |
*
|
|
306 |
* @param[in] size the size of the plan which is to be copied
|
|
307 |
*/
|
|
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
308 |
void copyPartialPlanIntoOptimalPlan(uint32_t size) |
309 |
{
|
|
310 |
memcpy(best_positions, positions, |
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
311 |
sizeof(optimizer::Position) * size); |
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
312 |
}
|
313 |
||
1240.8.2
by Dennis Schoen
add cache_const_exprs() to JOIN |
314 |
void cache_const_exprs(); |
315 |
||
1108.6.11
by Padraig O'Sullivan
Added some doxygen comments to the new methods added to the JOIN class. |
316 |
/**
|
317 |
* @param[in] index the index of the position to retrieve
|
|
318 |
* @return a reference to the specified position in the optimal
|
|
319 |
* query plan
|
|
320 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
321 |
optimizer::Position &getPosFromOptimalPlan(uint32_t index) |
1108.6.4
by Padraig O'Sullivan
Made the best_positions member of the JOIN class private and added any |
322 |
{
|
323 |
return best_positions[index]; |
|
324 |
}
|
|
325 |
||
1108.6.11
by Padraig O'Sullivan
Added some doxygen comments to the new methods added to the JOIN class. |
326 |
/**
|
327 |
* @param[in] index the index of the position to retrieve
|
|
328 |
* @return a reference to the specified position in the partial
|
|
329 |
* query plan
|
|
330 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
331 |
optimizer::Position &getPosFromPartialPlan(uint32_t index) |
1108.6.6
by Padraig O'Sullivan
Adding accessors to the JOIN class for the positions member. The end goal is |
332 |
{
|
333 |
return positions[index]; |
|
334 |
}
|
|
335 |
||
1108.6.11
by Padraig O'Sullivan
Added some doxygen comments to the new methods added to the JOIN class. |
336 |
/**
|
337 |
* @param[in] index the index of the position to set
|
|
338 |
* @param[in] in_pos the value to set the position to
|
|
339 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
340 |
void setPosInPartialPlan(uint32_t index, optimizer::Position &in_pos) |
1108.6.6
by Padraig O'Sullivan
Adding accessors to the JOIN class for the positions member. The end goal is |
341 |
{
|
1108.6.9
by Padraig O'Sullivan
Cleaned up the method for setting an element in the positions array. |
342 |
positions[index]= in_pos; |
1108.6.6
by Padraig O'Sullivan
Adding accessors to the JOIN class for the positions member. The end goal is |
343 |
}
|
344 |
||
1108.6.11
by Padraig O'Sullivan
Added some doxygen comments to the new methods added to the JOIN class. |
345 |
/**
|
346 |
* @return a pointer to the first position in the partial query plan
|
|
347 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
348 |
optimizer::Position *getFirstPosInPartialPlan() |
1108.6.8
by Padraig O'Sullivan
Made the positions member of the JOIN class private (finally got that |
349 |
{
|
350 |
return positions; |
|
351 |
}
|
|
352 |
||
1108.6.11
by Padraig O'Sullivan
Added some doxygen comments to the new methods added to the JOIN class. |
353 |
/**
|
354 |
* @param[in] index the index of the operator to retrieve from the partial
|
|
355 |
* query plan
|
|
356 |
* @return a pointer to the position in the partial query plan
|
|
357 |
*/
|
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
358 |
optimizer::Position *getSpecificPosInPartialPlan(int32_t index) |
1108.6.8
by Padraig O'Sullivan
Made the positions member of the JOIN class private (finally got that |
359 |
{
|
360 |
return positions + index; |
|
361 |
}
|
|
362 |
||
1039.2.1
by Jay Pipes
First phase refactoring the JOIN class: |
363 |
};
|
364 |
||
1541.1.1
by Brian Aker
JOIN -> Join rename |
365 |
enum_nested_loop_state evaluate_join_record(Join *join, JoinTable *join_tab, int error); |
366 |
enum_nested_loop_state evaluate_null_complemented_join_record(Join *join, JoinTable *join_tab); |
|
367 |
enum_nested_loop_state flush_cached_records(Join *join, JoinTable *join_tab, bool skip_last); |
|
368 |
enum_nested_loop_state end_send(Join *join, JoinTable *join_tab, bool end_of_records); |
|
369 |
enum_nested_loop_state end_write(Join *join, JoinTable *join_tab, bool end_of_records); |
|
370 |
enum_nested_loop_state end_update(Join *join, JoinTable *join_tab, bool end_of_records); |
|
371 |
enum_nested_loop_state end_unique_update(Join *join, JoinTable *join_tab, bool end_of_records); |
|
1039.2.2
by Jay Pipes
Phase 2 of JOIN refactoring. |
372 |
|
1280.1.10
by Monty Taylor
Put everything in drizzled into drizzled namespace. |
373 |
} /* namespace drizzled */ |
374 |