~drizzle-trunk/drizzle/development

390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
1055.2.21 by Jay Pipes
Documentation and indentation/style cleanups in sql_select, opt_range.h and join_tab.h. This patch doxygenates classes/structs and their member variables.
4
 *  Copyright (C) 2008-2009 Sun Microsystems
390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
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; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
1 by brian
clean slate
19
575.4.7 by Monty Taylor
More header cleanup.
20
#ifndef DRIZZLED_SQL_SELECT_H
21
#define DRIZZLED_SQL_SELECT_H
22
1055.2.21 by Jay Pipes
Documentation and indentation/style cleanups in sql_select, opt_range.h and join_tab.h. This patch doxygenates classes/structs and their member variables.
23
#include "drizzled/cached_item.h"
24
#include "drizzled/session.h"
25
#include "drizzled/field/varstring.h"
26
#include "drizzled/item/null.h"
1089.1.8 by Brian Aker
Shuffled around a few structures.
27
#include <drizzled/enum_nested_loop_state.h>
1108.6.56 by Padraig O'Sullivan
Extracted KeyUse into its own header file and placed it within the
28
#include "drizzled/optimizer/position.h"
29
#include "drizzled/optimizer/sargable_param.h"
30
#include "drizzled/optimizer/key_use.h"
1089.1.8 by Brian Aker
Shuffled around a few structures.
31
#include "drizzled/join_cache.h"
32
#include "drizzled/join_table.h"
33
1108.6.33 by Padraig O'Sullivan
Use std::vector to hold an array of SargableParam objects instead of a
34
#include <vector>
35
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
36
namespace drizzled
37
{
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
38
39
class select_result;
40
1 by brian
clean slate
41
/**
1055.2.21 by Jay Pipes
Documentation and indentation/style cleanups in sql_select, opt_range.h and join_tab.h. This patch doxygenates classes/structs and their member variables.
42
 * @file API and Classes to use when handling where clause
43
 */
1 by brian
clean slate
44
243.1.13 by Jay Pipes
More comments in mysql_priv.h to mark stuff TODO. Move sql_locale.h and object_creation_ctx.h up in the file since no more dependencies above them.
45
/* PREV_BITS only used in sql_select.cc */
46
#define PREV_BITS(type,A)	((type) (((type) 1 << (A)) -1))
47
1 by brian
clean slate
48
/* Values in optimize */
49
#define KEY_OPTIMIZE_EXISTS		1
50
#define KEY_OPTIMIZE_REF_OR_NULL	2
51
1541.1.1 by Brian Aker
JOIN -> Join rename
52
class Join;
1 by brian
clean slate
53
1541.1.1 by Brian Aker
JOIN -> Join rename
54
enum_nested_loop_state sub_select_cache(Join *join, JoinTable *join_tab, bool end_of_records);
55
enum_nested_loop_state sub_select(Join *join,JoinTable *join_tab, bool end_of_records);
56
enum_nested_loop_state end_send_group(Join *join, JoinTable *join_tab, bool end_of_records);
57
enum_nested_loop_state end_write_group(Join *join, JoinTable *join_tab, bool end_of_records);
1 by brian
clean slate
58
59
typedef struct st_rollup
60
{
61
  enum State { STATE_NONE, STATE_INITED, STATE_READY };
62
  State state;
63
  Item_null_result **null_items;
64
  Item ***ref_pointer_arrays;
65
  List<Item> *fields;
66
} ROLLUP;
67
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
68
} /* namespace drizzled */
69
70
/** @TODO why is this in the middle of the file??? */
71
1039.2.1 by Jay Pipes
First phase refactoring the JOIN class:
72
#include "drizzled/join.h"
1 by brian
clean slate
73
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
74
namespace drizzled
75
{
76
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
77
/*****************************************************************************
78
  Make som simple condition optimization:
79
  If there is a test 'field = const' change all refs to 'field' to 'const'
80
  Remove all dummy tests 'item = item', 'const op const'.
81
  Remove all 'item is NULL', when item can never be null!
82
  item->marker should be 0 for all items on entry
83
  Return in cond_value false if condition is impossible (1 = 2)
84
*****************************************************************************/
1054.2.7 by Monty Taylor
Fixed Solaris build problem. Removde unused new/delete opeartors.
85
struct COND_CMP {
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
86
  Item *and_level;
87
  Item_func *cmp_func;
88
  COND_CMP(Item *a,Item_func *b) :and_level(a),cmp_func(b) {}
89
};
90
1541.1.1 by Brian Aker
JOIN -> Join rename
91
void TEST_join(Join *join);
1 by brian
clean slate
92
93
/* Extern functions in sql_select.cc */
94
bool store_val_in_field(Field *field, Item *val, enum_check_fields check_flag);
851 by Brian Aker
Class rewrite of Session (aka get all of the junk out)
95
Table *create_tmp_table(Session *session,Tmp_Table_Param *param,List<Item> &fields,
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
96
			Order *group, bool distinct, bool save_sum_fields,
151 by Brian Aker
Ulonglong to uint64_t
97
			uint64_t select_options, ha_rows rows_limit,
1039.1.4 by Brian Aker
Modified alias to being const.
98
			const char* alias);
851 by Brian Aker
Class rewrite of Session (aka get all of the junk out)
99
void count_field_types(Select_Lex *select_lex, Tmp_Table_Param *param,
1 by brian
clean slate
100
                       List<Item> &fields, bool reset_with_sum_func);
851 by Brian Aker
Class rewrite of Session (aka get all of the junk out)
101
bool setup_copy_fields(Session *session, Tmp_Table_Param *param,
1 by brian
clean slate
102
		       Item **ref_pointer_array,
103
		       List<Item> &new_list1, List<Item> &new_list2,
482 by Brian Aker
Remove uint.
104
		       uint32_t elements, List<Item> &fields);
851 by Brian Aker
Class rewrite of Session (aka get all of the junk out)
105
void copy_fields(Tmp_Table_Param *param);
1 by brian
clean slate
106
void copy_funcs(Item **func_ptr);
520.1.22 by Brian Aker
Second pass of thd cleanup
107
Field* create_tmp_field_from_field(Session *session, Field* org_field,
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
108
                                   const char *name, Table *table,
482 by Brian Aker
Remove uint.
109
                                   Item_field *item, uint32_t convert_blob_length);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
110
bool test_if_ref(Item_field *left_item,Item *right_item);
1541.1.1 by Brian Aker
JOIN -> Join rename
111
COND *optimize_cond(Join *join, COND *conds, List<TableList> *join_list, Item::cond_result *cond_value);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
112
COND *make_cond_for_table(COND *cond,table_map table, table_map used_table, bool exclude_expensive_cond);
113
COND* substitute_for_best_equal_field(COND *cond, COND_EQUAL *cond_equal, void *table_join_idx);
114
bool list_contains_unique_index(Table *table, bool (*find_func) (Field *, void *), void *data);
115
bool find_field_in_order_list (Field *field, void *data);
116
bool find_field_in_item_list (Field *field, void *data);
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
117
bool test_if_skip_sort_order(JoinTable *tab,Order *order,ha_rows select_limit, bool no_changes, const key_map *map);
118
Order *create_distinct_group(Session *session,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
119
                                Item **ref_pointer_array,
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
120
                                Order *order_list,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
121
                                List<Item> &fields,
122
                                List<Item> &,
123
                                bool *all_order_by_fields_used);
124
// Create list for using with tempory table
125
bool change_to_use_tmp_fields(Session *session,
126
                              Item **ref_pointer_array,
127
			                        List<Item> &res_selected_fields,
128
			                        List<Item> &res_all_fields,
129
			                        uint32_t elements,
130
                              List<Item> &all_fields);
1541.1.1 by Brian Aker
JOIN -> Join rename
131
int do_select(Join *join, List<Item> *fields, Table *tmp_table);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
132
bool const_expression_in_where(COND *conds,Item *item, Item **comp_item);
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
133
int create_sort_index(Session *session, Join *join, Order *order, ha_rows filesort_limit, ha_rows select_limit, bool is_order_by);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
134
void save_index_subquery_explain_info(JoinTable *join_tab, Item* where);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
135
Item *remove_additional_cond(Item* conds);
136
bool setup_sum_funcs(Session *session, Item_sum **func_ptr);
137
bool init_sum_functions(Item_sum **func, Item_sum **end);
138
bool update_sum_func(Item_sum **func);
139
void copy_sum_funcs(Item_sum **func_ptr, Item_sum **end);
140
bool change_refs_to_tmp_fields(Session *session,
141
                               Item **ref_pointer_array,
142
                               List<Item> &res_selected_fields,
143
                               List<Item> &res_all_fields,
144
                               uint32_t elements,
145
			                         List<Item> &all_fields);
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
146
bool change_group_ref(Session *session, Item_func *expr, Order *group_list, bool *changed);
1637.5.9 by Prafulla Tekawade
Fix for Bug 592444
147
bool check_interleaving_with_nj(JoinTable *next);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
148
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
149
int join_read_const_table(JoinTable *tab, optimizer::Position *pos);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
150
int join_read_system(JoinTable *tab);
151
int join_read_const(JoinTable *tab);
152
int join_read_key(JoinTable *tab);
153
int join_read_always_key(JoinTable *tab);
154
int join_read_last_key(JoinTable *tab);
1538 by Brian Aker
Code shuffle on ReadRecord
155
int join_no_more_records(ReadRecord *info);
156
int join_read_next(ReadRecord *info);
157
int join_read_next_different(ReadRecord *info);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
158
int join_init_quick_read_record(JoinTable *tab);
1090.1.1 by Brian Aker
Collection of patches/bug fixes from new-cleanup tree (none of the
159
int init_read_record_seq(JoinTable *tab);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
160
int test_if_quick_select(JoinTable *tab);
161
int join_init_read_record(JoinTable *tab);
162
int join_read_first(JoinTable *tab);
1538 by Brian Aker
Code shuffle on ReadRecord
163
int join_read_next_same(ReadRecord *info);
164
int join_read_next_same_diff(ReadRecord *info);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
165
int join_read_last(JoinTable *tab);
1538 by Brian Aker
Code shuffle on ReadRecord
166
int join_read_prev_same(ReadRecord *info);
167
int join_read_prev(ReadRecord *info);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
168
int join_read_always_key_or_null(JoinTable *tab);
1538 by Brian Aker
Code shuffle on ReadRecord
169
int join_read_next_same_or_null(ReadRecord *info);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
170
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
171
void calc_used_field_length(Session *, JoinTable *join_tab);
1039.2.3 by Jay Pipes
Phase 3 of refactoring JOIN
172
StoredKey *get_store_key(Session *session, 
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
173
                         optimizer::KeyUse *keyuse,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
174
                         table_map used_tables,
1534 by Brian Aker
Remove of KeyPartInfo
175
                         KeyPartInfo *key_part,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
176
                         unsigned char *key_buff,
177
                         uint32_t maybe_null);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
178
int join_tab_cmp(const void* ptr1, const void* ptr2);
179
int join_tab_cmp_straight(const void* ptr1, const void* ptr2);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
180
void push_index_cond(JoinTable *tab, uint32_t keyno, bool other_tbls_ok);
1541.1.1 by Brian Aker
JOIN -> Join rename
181
void add_not_null_conds(Join *join);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
182
uint32_t max_part_bit(key_part_map bits);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
183
COND *add_found_match_trig_cond(JoinTable *tab, COND *cond, JoinTable *root_tab);
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
184
Order *create_distinct_group(Session *session,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
185
                                Item **ref_pointer_array,
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
186
                                Order *order,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
187
                                List<Item> &fields,
188
                                List<Item> &all_fields,
189
                                bool *all_order_by_fields_used);
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
190
bool eq_ref_table(Join *join, Order *start_order, JoinTable *tab);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
191
int remove_dup_with_compare(Session *session, Table *table, Field **first_field, uint32_t offset, Item *having);
192
int remove_dup_with_hash_index(Session *session, 
193
                               Table *table,
194
                               uint32_t field_count,
195
                               Field **first_field,
196
                               uint32_t key_length,
197
                               Item *having);
198
bool update_ref_and_keys(Session *session,
199
                         DYNAMIC_ARRAY *keyuse,
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
200
                         JoinTable *join_tab,
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
201
                         uint32_t tables,
202
                         COND *cond, 
203
                         COND_EQUAL *,
204
                         table_map normal_tables,
205
                         Select_Lex *select_lex,
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
206
                         std::vector<optimizer::SargableParam> &sargables);
207
ha_rows get_quick_record_count(Session *session, optimizer::SqlSelect *select, Table *table, const key_map *keys,ha_rows limit);
1541.1.1 by Brian Aker
JOIN -> Join rename
208
void optimize_keyuse(Join *join, DYNAMIC_ARRAY *keyuse_array);
209
void add_group_and_distinct_keys(Join *join, JoinTable *join_tab);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
210
void read_cached_record(JoinTable *tab);
1241.7.6 by Padraig O'Sullivan
Added some dtrace probes for tracing the optimizer.
211
bool mysql_select(Session *session, Item ***rref_pointer_array,
212
                  TableList *tables, uint32_t wild_num,  List<Item> &list,
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
213
                  COND *conds, uint32_t og_num, Order *order, Order *group,
1241.7.6 by Padraig O'Sullivan
Added some dtrace probes for tracing the optimizer.
214
                  Item *having, uint64_t select_type,
215
                  select_result *result, Select_Lex_Unit *unit,
216
                  Select_Lex *select_lex);
1039.2.2 by Jay Pipes
Phase 2 of JOIN refactoring.
217
// Create list for using with tempory table
218
void init_tmptable_sum_functions(Item_sum **func);
219
void update_tmptable_sum_func(Item_sum **func,Table *tmp_table);
1892.3.3 by tdavies
struct order_st changed and renamed to c++ class named:Order
220
bool only_eq_ref_tables(Join *join, Order *order, table_map tables);
1541.1.1 by Brian Aker
JOIN -> Join rename
221
bool create_ref_for_key(Join *join, JoinTable *j, 
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
222
                        optimizer::KeyUse *org_keyuse, 
1108.6.56 by Padraig O'Sullivan
Extracted KeyUse into its own header file and placed it within the
223
                        table_map used_tables);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
224
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
225
} /* namespace drizzled */
226
227
/** @TODO why is this in the middle of the file??? */
228
1039.2.3 by Jay Pipes
Phase 3 of refactoring JOIN
229
#include "drizzled/stored_key.h"
1 by brian
clean slate
230
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
231
namespace drizzled
232
{
233
1089.1.14 by Brian Aker
Fix TABLE_REF structure
234
bool cp_buffer_from_ref(Session *session, table_reference_st *ref);
1089.1.1 by Brian Aker
Remove of JOIN_TAB to JoinTable
235
int safe_index_read(JoinTable *tab);
520.1.22 by Brian Aker
Second pass of thd cleanup
236
COND *remove_eq_conds(Session *session, COND *cond, Item::cond_result *cond_value);
1101.1.16 by Monty Taylor
Reverted 1103
237
int test_if_item_cache_changed(List<Cached_item> &list);
575.4.7 by Monty Taylor
More header cleanup.
238
1054.1.7 by Brian Aker
Refactor TableList methods.
239
void print_join(Session *session, String *str,
240
                List<TableList> *tables, enum_query_type);
241
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
242
} /* namespace drizzled */
243
575.4.7 by Monty Taylor
More header cleanup.
244
#endif /* DRIZZLED_SQL_SELECT_H */