35
#include <drizzled/item/cache.h>
36
#include <drizzled/item/cmpfunc.h>
37
#include <drizzled/item/copy_string.h>
38
#include <drizzled/item/uint.h>
39
#include <drizzled/cached_item.h>
40
#include <drizzled/sql_base.h>
41
#include <drizzled/sql_select.h> /* include join.h */
42
#include <drizzled/lock.h>
43
#include <drizzled/nested_join.h>
44
#include <drizzled/join.h>
45
#include <drizzled/join_cache.h>
46
#include <drizzled/show.h>
47
#include <drizzled/field/blob.h>
48
#include <drizzled/optimizer/position.h>
49
#include <drizzled/optimizer/sargable_param.h>
50
#include <drizzled/optimizer/key_use.h>
51
#include <drizzled/optimizer/range.h>
52
#include <drizzled/optimizer/sum.h>
53
#include <drizzled/optimizer/explain_plan.h>
54
#include <drizzled/optimizer/access_method_factory.h>
55
#include <drizzled/optimizer/access_method.h>
56
#include <drizzled/records.h>
57
#include <drizzled/probes.h>
58
#include <drizzled/internal/my_bit.h>
59
#include <drizzled/internal/my_sys.h>
60
#include <drizzled/internal/iocache.h>
61
#include <drizzled/plugin/storage_engine.h>
62
#include <drizzled/session.h>
63
#include <drizzled/select_result.h>
35
#include "drizzled/item/cache.h"
36
#include "drizzled/item/cmpfunc.h"
37
#include "drizzled/item/copy_string.h"
38
#include "drizzled/item/uint.h"
39
#include "drizzled/cached_item.h"
40
#include "drizzled/sql_base.h"
41
#include "drizzled/sql_select.h" /* include join.h */
42
#include "drizzled/lock.h"
43
#include "drizzled/nested_join.h"
44
#include "drizzled/join.h"
45
#include "drizzled/join_cache.h"
46
#include "drizzled/show.h"
47
#include "drizzled/field/blob.h"
48
#include "drizzled/optimizer/position.h"
49
#include "drizzled/optimizer/sargable_param.h"
50
#include "drizzled/optimizer/key_use.h"
51
#include "drizzled/optimizer/range.h"
52
#include "drizzled/optimizer/sum.h"
53
#include "drizzled/optimizer/explain_plan.h"
54
#include "drizzled/optimizer/access_method_factory.h"
55
#include "drizzled/optimizer/access_method.h"
56
#include "drizzled/records.h"
57
#include "drizzled/probes.h"
58
#include "drizzled/internal/my_bit.h"
59
#include "drizzled/internal/my_sys.h"
60
#include "drizzled/internal/iocache.h"
61
#include "drizzled/plugin/storage_engine.h"
65
63
#include <drizzled/debug.h>
395
nesting_map save_allow_sum_func= session->getLex()->allow_sum_func;
393
nesting_map save_allow_sum_func= session->lex->allow_sum_func;
396
394
session->setWhere("having clause");
397
session->getLex()->allow_sum_func|= 1 << select_lex_arg->nest_level;
395
session->lex->allow_sum_func|= 1 << select_lex_arg->nest_level;
398
396
select_lex->having_fix_field= 1;
399
397
bool having_fix_rc= (!having->fixed &&
400
398
(having->fix_fields(session, &having) ||
625
623
select_limit= HA_POS_ERROR;
626
624
do_send_rows = (unit->select_limit_cnt) ? 1 : 0;
627
625
// Ignore errors of execution if option IGNORE present
628
if (session->getLex()->ignore)
629
session->getLex()->current_select->no_error= 1;
626
if (session->lex->ignore)
627
session->lex->current_select->no_error= 1;
631
629
#ifdef HAVE_REF_TO_FIELDS // Not done yet
632
630
/* Add HAVING to WHERE if possible */
2038
2036
if (can_unlock && lock && session->lock &&
2039
2037
!(select_options & SELECT_NO_UNLOCK) &&
2040
2038
!select_lex->subquery_in_having &&
2041
(select_lex == (session->getLex()->unit.fake_select_lex ?
2042
session->getLex()->unit.fake_select_lex : &session->getLex()->select_lex)))
2039
(select_lex == (session->lex->unit.fake_select_lex ?
2040
session->lex->unit.fake_select_lex : &session->lex->select_lex)))
2045
2043
TODO: unlock tables even if the join isn't top level select in the
3231
3229
have STRING_RESULT result type, we increase the length
3232
3230
by 8 as maximum pack length of such fields.
3234
if (field::isDateTime(type))
3232
if (type == DRIZZLE_TYPE_DATE ||
3233
type == DRIZZLE_TYPE_TIME ||
3234
type == DRIZZLE_TYPE_DATETIME ||
3235
type == DRIZZLE_TYPE_MICROTIME ||
3236
type == DRIZZLE_TYPE_TIMESTAMP)
3236
3238
key_length+= 8;
5650
5652
bool *hidden_group_fields)
5653
nesting_map save_allow_sum_func=session->getLex()->allow_sum_func ;
5655
nesting_map save_allow_sum_func=session->lex->allow_sum_func ;
5655
session->getLex()->allow_sum_func&= ~(1 << session->getLex()->current_select->nest_level);
5657
session->lex->allow_sum_func&= ~(1 << session->lex->current_select->nest_level);
5656
5658
res= session->setup_conds(tables, conds);
5658
session->getLex()->allow_sum_func|= 1 << session->getLex()->current_select->nest_level;
5660
session->lex->allow_sum_func|= 1 << session->lex->current_select->nest_level;
5659
5661
res= res || setup_order(session, ref_pointer_array, tables, fields, all_fields,
5661
session->getLex()->allow_sum_func&= ~(1 << session->getLex()->current_select->nest_level);
5663
session->lex->allow_sum_func&= ~(1 << session->lex->current_select->nest_level);
5662
5664
res= res || setup_group(session, ref_pointer_array, tables, fields, all_fields,
5663
5665
group, hidden_group_fields);
5664
session->getLex()->allow_sum_func= save_allow_sum_func;
5666
session->lex->allow_sum_func= save_allow_sum_func;