112
112
#include <boost/dynamic_bitset.hpp>
114
#include "drizzled/sql_base.h"
115
#include "drizzled/sql_select.h"
116
#include "drizzled/error.h"
117
#include "drizzled/optimizer/cost_vector.h"
118
#include "drizzled/item/cmpfunc.h"
119
#include "drizzled/field/num.h"
120
#include "drizzled/check_stack_overrun.h"
121
#include "drizzled/optimizer/sum.h"
122
#include "drizzled/optimizer/range.h"
123
#include "drizzled/optimizer/quick_range.h"
124
#include "drizzled/optimizer/quick_range_select.h"
125
#include "drizzled/optimizer/quick_group_min_max_select.h"
126
#include "drizzled/optimizer/quick_index_merge_select.h"
127
#include "drizzled/optimizer/quick_ror_intersect_select.h"
128
#include "drizzled/optimizer/quick_ror_union_select.h"
129
#include "drizzled/optimizer/table_read_plan.h"
130
#include "drizzled/optimizer/sel_arg.h"
131
#include "drizzled/optimizer/sel_imerge.h"
132
#include "drizzled/optimizer/sel_tree.h"
133
#include "drizzled/optimizer/range_param.h"
134
#include "drizzled/records.h"
135
#include "drizzled/internal/my_sys.h"
136
#include "drizzled/internal/iocache.h"
138
#include "drizzled/temporal.h" /* Needed in get_mm_leaf() for timestamp -> datetime comparisons */
114
#include <drizzled/check_stack_overrun.h>
115
#include <drizzled/error.h>
116
#include <drizzled/field/num.h>
117
#include <drizzled/internal/iocache.h>
118
#include <drizzled/internal/my_sys.h>
119
#include <drizzled/item/cmpfunc.h>
120
#include <drizzled/optimizer/cost_vector.h>
121
#include <drizzled/optimizer/quick_group_min_max_select.h>
122
#include <drizzled/optimizer/quick_index_merge_select.h>
123
#include <drizzled/optimizer/quick_range.h>
124
#include <drizzled/optimizer/quick_range_select.h>
125
#include <drizzled/optimizer/quick_ror_intersect_select.h>
126
#include <drizzled/optimizer/quick_ror_union_select.h>
127
#include <drizzled/optimizer/range.h>
128
#include <drizzled/optimizer/range_param.h>
129
#include <drizzled/optimizer/sel_arg.h>
130
#include <drizzled/optimizer/sel_imerge.h>
131
#include <drizzled/optimizer/sel_tree.h>
132
#include <drizzled/optimizer/sum.h>
133
#include <drizzled/optimizer/table_read_plan.h>
134
#include <drizzled/plugin/storage_engine.h>
135
#include <drizzled/records.h>
136
#include <drizzled/sql_base.h>
137
#include <drizzled/sql_select.h>
138
#include <drizzled/table_reference.h>
139
#include <drizzled/session.h>
140
#include <drizzled/key.h>
141
#include <drizzled/unique.h>
142
#include <drizzled/temporal.h> /* Needed in get_mm_leaf() for timestamp -> datetime comparisons */
143
#include <drizzled/sql_lex.h>
144
#include <drizzled/system_variables.h>
140
146
using namespace std;
144
150
#define HA_END_SPACE_KEY 0
1159
1164
double roru_total_cost;
1161
1166
optimizer::CostVector sweep_cost;
1162
Join *join= param->session->lex->select_lex.join;
1167
Join *join= param->session->lex().select_lex.join;
1163
1168
bool is_interrupted= test(join && join->tables == 1);
1164
1169
get_sweep_read_cost(param->table, roru_total_records, is_interrupted,
1166
1171
roru_total_cost= roru_index_costs +
1167
rows2double(roru_total_records)*log((double)n_child_scans) /
1172
static_cast<double>(roru_total_records)*log((double)n_child_scans) /
1168
1173
(TIME_FOR_COMPARE_ROWID * M_LN2) +
1169
1174
sweep_cost.total_cost();
4308
4315
make_prev_keypart_map(ref->key_parts), EQ_RANGE)))
4310
4317
*ref->null_ref_key= 0; // Clear null byte
4311
if (insert_dynamic(&quick->ranges,(unsigned char*)&null_range))
4318
quick->ranges.push_back(&null_range);
4315
4321
/* Call multi_range_read_info() to get the MRR flags and buffer size */
4316
4322
quick->mrr_flags= HA_MRR_NO_ASSOCIATION |
4317
4323
(table->key_read ? HA_MRR_INDEX_ONLY : 0);
4318
if (session->lex->sql_command != SQLCOM_SELECT)
4324
if (session->lex().sql_command != SQLCOM_SELECT)
4319
4325
quick->mrr_flags |= HA_MRR_USE_DEFAULT_IMPL;
4321
4327
quick->mrr_buf_size= session->variables.read_rnd_buff_size;