17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#ifndef DRIZZLED_SQL_LEX_H
21
#define DRIZZLED_SQL_LEX_H
20
#ifndef DRIZZLE_SERVER_SQL_LEX_H
21
#define DRIZZLE_SERVER_SQL_LEX_H
24
24
@defgroup Semantic_Analysis Semantic Analysis
26
#include <drizzled/message/table.pb.h>
28
#include "drizzled/plugin/function.h"
29
#include "drizzled/name_resolution_context.h"
30
#include "drizzled/item/subselect.h"
31
#include "drizzled/table_list.h"
32
#include "drizzled/function/math/real.h"
33
#include "drizzled/alter_drop.h"
34
#include "drizzled/alter_column.h"
35
#include "drizzled/alter_info.h"
36
#include "drizzled/key_part_spec.h"
37
#include "drizzled/index_hint.h"
38
#include "drizzled/statement.h"
39
#include "drizzled/optimizer/explain_plan.h"
27
#include <drizzled/sql_udf.h>
28
#include <drizzled/name_resolution_context.h>
29
#include <drizzled/item/subselect.h>
30
#include <drizzled/item/param.h>
31
#include <drizzled/item/outer_ref.h>
32
#include <drizzled/table_list.h>
33
#include <drizzled/function/math/real.h>
34
#include <drizzled/alter_drop.h>
35
#include <drizzled/alter_column.h>
36
#include <drizzled/key.h>
37
#include <drizzled/foreign_key.h>
38
#include <drizzled/item/param.h>
47
40
class select_result_interceptor;
41
class virtual_column_info;
49
43
/* YACC and LEX Definitions */
51
45
/* These may not be declared yet */
55
49
class Item_outer_ref;
57
} /* namespace drizzled */
60
52
The following hack is needed because mysql_yacc.cc does not define
61
53
YYSTYPE before including this file
64
56
#ifdef DRIZZLE_SERVER
65
/* set_var should change to set_var here ... */
66
# include <drizzled/sys_var.h>
57
# include <drizzled/set_var.h>
67
58
# include <drizzled/item/func.h>
68
59
# ifdef DRIZZLE_YACC
69
60
# define LEX_YYSTYPE void *
71
62
# if defined(DRIZZLE_LEX)
72
# include <drizzled/foreign_key.h>
73
63
# include <drizzled/lex_symbol.h>
74
64
# include <drizzled/sql_yacc.h>
75
65
# define LEX_YYSTYPE YYSTYPE *
88
78
#define DERIVED_NONE 0
89
79
#define DERIVED_SUBQUERY 1
94
81
typedef List<Item> List_item;
83
/* SERVERS CACHE CHANGES */
84
typedef struct st_lex_server_options
87
uint32_t server_name_length;
88
char *server_name, *host, *db, *username, *password, *scheme, *owner;
91
typedef struct st_lex_master_info
93
char *host, *user, *password, *log_file_name;
94
uint32_t port, connect_retry;
95
float heartbeat_period;
99
Enum is used for making it possible to detect if the user
100
changed variable or if it should be left at old value
102
enum {LEX_MI_UNCHANGED, LEX_MI_DISABLE, LEX_MI_ENABLE} heartbeat_opt;
103
char *relay_log_name;
104
uint32_t relay_log_pos;
96
108
enum sub_select_type
110
UNSPECIFIED_TYPE,UNION_TYPE, INTERSECT_TYPE,
111
EXCEPT_TYPE, GLOBAL_OPTIONS_TYPE, DERIVED_TABLE_TYPE, OLAP_TYPE
109
UNSPECIFIED_OLAP_TYPE,
116
UNSPECIFIED_OLAP_TYPE, CUBE_TYPE, ROLLUP_TYPE
119
enum tablespace_op_type
121
NO_TABLESPACE_OP, DISCARD_TABLESPACE, IMPORT_TABLESPACE
125
String names used to print a statement with index hints.
126
Keep in sync with index_hint_type.
128
extern const char * index_hint_type_name[];
129
typedef unsigned char index_clause_map;
132
Bits in index_clause_map : one for each possible FOR clause in
133
USE/FORCE/IGNORE INDEX index hint specification
135
#define INDEX_HINT_MASK_JOIN (1)
136
#define INDEX_HINT_MASK_GROUP (1 << 1)
137
#define INDEX_HINT_MASK_ORDER (1 << 2)
139
#define INDEX_HINT_MASK_ALL (INDEX_HINT_MASK_JOIN | INDEX_HINT_MASK_GROUP | \
140
INDEX_HINT_MASK_ORDER)
142
/* Single element of an USE/FORCE/IGNORE INDEX list specified as a SQL hint */
143
class Index_hint : public Sql_alloc
146
/* The type of the hint : USE/FORCE/IGNORE */
147
enum index_hint_type type;
148
/* Where the hit applies to. A bitmask of INDEX_HINT_MASK_<place> values */
149
index_clause_map clause;
151
The index name. Empty (str=NULL) name represents an empty list
156
Index_hint (enum index_hint_type type_arg, index_clause_map clause_arg,
157
char *str, uint32_t length) :
158
type(type_arg), clause(clause_arg)
161
key_name.length= length;
164
void print(Session *session, String *str);
249
302
UNCACHEABLE_EXPLAIN
250
303
UNCACHEABLE_PREPARE
252
std::bitset<8> uncacheable;
253
306
enum sub_select_type linkage;
254
307
bool no_table_names_allowed; /* used for global order by */
255
308
bool no_error; /* suppress error message (convert it to warnings) */
257
310
static void *operator new(size_t size)
259
return memory::sql_alloc(size);
312
return sql_alloc(size);
261
static void *operator new(size_t size, memory::Root *mem_root)
262
{ return (void*) mem_root->alloc_root((uint32_t) size); }
314
static void *operator new(size_t size, MEM_ROOT *mem_root)
315
{ return (void*) alloc_root(mem_root, (uint32_t) size); }
263
316
static void operator delete(void *, size_t)
265
static void operator delete(void *, memory::Root *)
317
{ TRASH(ptr, size); }
318
static void operator delete(void *, MEM_ROOT *)
267
Select_Lex_Node(): linkage(UNSPECIFIED_TYPE) {}
268
virtual ~Select_Lex_Node() {}
269
inline Select_Lex_Node* get_master() { return master; }
320
st_select_lex_node(): linkage(UNSPECIFIED_TYPE) {}
321
virtual ~st_select_lex_node() {}
322
inline st_select_lex_node* get_master() { return master; }
270
323
virtual void init_query();
271
324
virtual void init_select();
272
void include_down(Select_Lex_Node *upper);
273
void include_neighbour(Select_Lex_Node *before);
274
void include_standalone(Select_Lex_Node *sel, Select_Lex_Node **ref);
275
void include_global(Select_Lex_Node **plink);
325
void include_down(st_select_lex_node *upper);
326
void include_neighbour(st_select_lex_node *before);
327
void include_standalone(st_select_lex_node *sel, st_select_lex_node **ref);
328
void include_global(st_select_lex_node **plink);
278
virtual Select_Lex_Unit* master_unit()= 0;
279
virtual Select_Lex* outer_select()= 0;
280
virtual Select_Lex* return_after_parsing()= 0;
331
virtual st_select_lex_unit* master_unit()= 0;
332
virtual st_select_lex* outer_select()= 0;
333
virtual st_select_lex* return_after_parsing()= 0;
282
335
virtual bool set_braces(bool value);
283
336
virtual bool inc_in_sum_expr();
284
337
virtual uint32_t get_in_sum_expr();
285
338
virtual TableList* get_table_list();
286
339
virtual List<Item>* get_item_list();
340
virtual uint32_t get_table_join_options();
287
341
virtual TableList *add_table_to_list(Session *session, Table_ident *table,
289
const std::bitset<NUM_OF_TABLE_OPTIONS>& table_options,
290
thr_lock_type flags= TL_UNLOCK,
291
List<Index_hint> *hints= 0,
292
LEX_STRING *option= 0);
343
uint32_t table_options,
344
thr_lock_type flags= TL_UNLOCK,
345
List<Index_hint> *hints= 0,
346
LEX_STRING *option= 0);
293
347
virtual void set_lock_for_tables(thr_lock_type)
296
friend class Select_Lex_Unit;
350
friend class st_select_lex_unit;
297
351
friend bool mysql_new_select(LEX *lex, bool move_down);
299
353
void fast_exclude();
355
typedef class st_select_lex_node SELECT_LEX_NODE;
303
Select_Lex_Unit - unit of selects (UNION, INTERSECT, ...) group
358
SELECT_LEX_UNIT - unit of selects (UNION, INTERSECT, ...) group
307
362
class select_result;
309
364
class select_union;
310
class Select_Lex_Unit: public Select_Lex_Node {
365
class st_select_lex_unit: public st_select_lex_node {
312
367
TableList result_table_list;
313
368
select_union *union_result;
398
452
List<Item> *get_unit_column_types();
455
typedef class st_select_lex_unit SELECT_LEX_UNIT;
402
Select_Lex - store information of parsed SELECT statment
458
SELECT_LEX - store information of parsed SELECT statment
404
class Select_Lex: public Select_Lex_Node
460
class st_select_lex: public st_select_lex_node
416
olap(UNSPECIFIED_OLAP_TYPE),
421
is_item_list_lookup(false),
428
type(optimizer::ST_PRIMARY),
433
ref_pointer_array(0),
434
select_n_having_items(0),
438
select_n_where_fields(0),
439
parsing_place(NO_MATTER),
444
inner_sum_func_list(0),
450
n_child_sum_items(0),
452
subquery_in_having(0),
454
exclude_from_table_unique_test(0),
456
cur_pos_in_select_list(0),
458
full_group_by_flag(),
459
current_index_hint_type(INDEX_HINT_IGNORE),
460
current_index_hint_clause(),
465
463
Name_resolution_context context;
467
/* An Item representing the WHERE clause */
469
/* An Item representing the HAVING clause */
465
Item *where, *having; /* WHERE & HAVING clauses */
471
466
/* Saved values of the WHERE and HAVING clauses*/
472
Item::cond_result cond_value;
473
Item::cond_result having_value;
467
Item::cond_result cond_value, having_value;
474
468
/* point on lex in which it was created, used in view subquery detection */
476
470
enum olap_type olap;
477
471
/* FROM clause - points to the beginning of the TableList::next_local list. */
479
SQL_LIST group_list; /* GROUP BY clause. */
480
List<Item> item_list; /* list of fields & expressions */
481
List<String> interval_list;
482
bool is_item_list_lookup;
483
Join *join; /* after Join::prepare it is pointer to corresponding JOIN */
473
SQL_LIST group_list; /* GROUP BY clause. */
474
List<Item> item_list; /* list of fields & expressions */
475
List<String> interval_list;
476
bool is_item_list_lookup;
478
Despite their names, the following are used in unions. This should
481
List<Item_real_func> *ftfunc_list;
482
List<Item_real_func> ftfunc_list_alloc;
483
JOIN *join; /* after JOIN::prepare it is pointer to corresponding JOIN */
484
484
List<TableList> top_join_list; /* join list of the top level */
485
485
List<TableList> *join_list; /* list for the currently parsed join */
486
486
TableList *embedding; /* table embedding to the above list */
690
686
/* a list of USE/FORCE/IGNORE INDEX */
691
687
List<Index_hint> *index_hints;
689
typedef class st_select_lex SELECT_LEX;
694
inline bool Select_Lex_Unit::is_union ()
691
inline bool st_select_lex_unit::is_union ()
696
693
return first_select()->next_select() &&
697
694
first_select()->next_select()->linkage == UNION_TYPE;
697
#define ALTER_ADD_COLUMN (1L << 0)
698
#define ALTER_DROP_COLUMN (1L << 1)
699
#define ALTER_CHANGE_COLUMN (1L << 2)
700
#define ALTER_COLUMN_STORAGE (1L << 3)
701
#define ALTER_COLUMN_FORMAT (1L << 4)
702
#define ALTER_COLUMN_ORDER (1L << 5)
703
#define ALTER_ADD_INDEX (1L << 6)
704
#define ALTER_DROP_INDEX (1L << 7)
705
#define ALTER_RENAME (1L << 8)
706
#define ALTER_ORDER (1L << 9)
707
#define ALTER_OPTIONS (1L << 10)
708
#define ALTER_COLUMN_DEFAULT (1L << 11)
709
#define ALTER_KEYS_ONOFF (1L << 12)
710
#define ALTER_STORAGE (1L << 13)
711
#define ALTER_ROW_FORMAT (1L << 14)
712
#define ALTER_CONVERT (1L << 15)
713
#define ALTER_FORCE (1L << 16)
714
#define ALTER_RECREATE (1L << 17)
715
#define ALTER_TABLE_REORG (1L << 24)
716
#define ALTER_FOREIGN_KEY (1L << 31)
719
@brief Parsing data for CREATE or ALTER Table.
721
This structure contains a list of columns or indexes to be created,
728
List<Alter_drop> drop_list;
729
List<Alter_column> alter_list;
731
List<Create_field> create_list;
733
enum enum_enable_or_disable keys_onoff;
734
enum tablespace_op_type tablespace_op;
736
enum ha_build_method build_method;
737
Create_field *datetime_field;
738
bool error_if_not_empty;
743
keys_onoff(LEAVE_AS_IS),
744
tablespace_op(NO_TABLESPACE_OP),
746
build_method(HA_BUILD_DEFAULT),
747
datetime_field(NULL),
748
error_if_not_empty(false)
758
keys_onoff= LEAVE_AS_IS;
759
tablespace_op= NO_TABLESPACE_OP;
761
build_method= HA_BUILD_DEFAULT;
763
error_if_not_empty= false;
765
Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root);
767
Alter_info &operator=(const Alter_info &rhs); // not implemented
768
Alter_info(const Alter_info &rhs); // not implemented
771
enum xa_option_words {XA_NONE, XA_JOIN, XA_RESUME, XA_ONE_PHASE,
772
XA_SUSPEND, XA_FOR_MIGRATE};
710
774
extern const LEX_STRING null_lex_str;
713
778
Class representing list of all tables used by statement.
714
779
It also contains information about stored functions used by statement
796
} /* namespace drizzled */
798
#include "drizzled/lex_input_stream.h"
884
@brief This class represents the character input stream consumed during
887
In addition to consuming the input stream, this class performs some
888
comment pre processing, by filtering out out of bound special text
889
from the query input stream.
890
Two buffers, with pointers inside each buffers, are maintained in
891
parallel. The 'raw' buffer is the original query text, which may
892
contain out-of-bound comments. The 'cpp' (for comments pre processor)
893
is the pre-processed buffer that contains only the query text that
894
should be seen once out-of-bound data is removed.
897
class Lex_input_stream
900
Lex_input_stream(Session *session, const char* buff, unsigned int length);
906
When echo is true, characters parsed from the raw input stream are
907
preserved. When false, characters parsed are silently ignored.
908
@param echo the echo mode.
910
void set_echo(bool echo)
916
Skip binary from the input stream.
917
@param n number of bytes to accept.
919
void skip_binary(int n)
923
memcpy(m_cpp_ptr, m_ptr, n);
930
Get a character, and advance in the stream.
931
@return the next character to parse.
942
Get the last character accepted.
943
@return the last character accepted.
951
Look at the next character to parse, but do not accept it.
959
Look ahead at some character to parse.
960
@param n offset of the character to look up
968
Cancel the effect of the last yyGet() or yySkip().
969
Note that the echo mode should not change between calls to yyGet / yySkip
970
and yyUnget. The caller is responsible for ensuring that.
980
Accept a character, by advancing the input stream.
985
*m_cpp_ptr++ = *m_ptr++;
991
Accept multiple characters at once.
992
@param n the number of characters to accept.
998
memcpy(m_cpp_ptr, m_ptr, n);
1005
End of file indicator for the query text to parse.
1006
@return true if there are no more characters to parse
1010
return (m_ptr >= m_end_of_query);
1014
End of file indicator for the query text to parse.
1015
@param n number of characters expected
1016
@return true if there are less than n characters to parse
1020
return ((m_ptr + n) >= m_end_of_query);
1023
/** Get the raw query buffer. */
1024
const char *get_buf()
1029
/** Get the pre-processed query buffer. */
1030
const char *get_cpp_buf()
1035
/** Get the end of the raw query buffer. */
1036
const char *get_end_of_query()
1038
return m_end_of_query;
1041
/** Mark the stream position as the start of a new token. */
1044
m_tok_start_prev= m_tok_start;
1048
m_cpp_tok_start_prev= m_cpp_tok_start;
1049
m_cpp_tok_start= m_cpp_ptr;
1050
m_cpp_tok_end= m_cpp_ptr;
1054
Adjust the starting position of the current token.
1055
This is used to compensate for starting whitespace.
1057
void restart_token()
1060
m_cpp_tok_start= m_cpp_ptr;
1063
/** Get the token start position, in the raw buffer. */
1064
const char *get_tok_start()
1069
/** Get the token start position, in the pre-processed buffer. */
1070
const char *get_cpp_tok_start()
1072
return m_cpp_tok_start;
1075
/** Get the token end position, in the raw buffer. */
1076
const char *get_tok_end()
1081
/** Get the token end position, in the pre-processed buffer. */
1082
const char *get_cpp_tok_end()
1084
return m_cpp_tok_end;
1087
/** Get the previous token start position, in the raw buffer. */
1088
const char *get_tok_start_prev()
1090
return m_tok_start_prev;
1093
/** Get the current stream pointer, in the raw buffer. */
1094
const char *get_ptr()
1099
/** Get the current stream pointer, in the pre-processed buffer. */
1100
const char *get_cpp_ptr()
1105
/** Get the length of the current token, in the raw buffer. */
1109
The assumption is that the lexical analyser is always 1 character ahead,
1110
which the -1 account for.
1112
assert(m_ptr > m_tok_start);
1113
return (uint32_t) ((m_ptr - m_tok_start) - 1);
1116
/** Get the utf8-body string. */
1117
const char *get_body_utf8_str()
1122
/** Get the utf8-body length. */
1123
uint32_t get_body_utf8_length()
1125
return m_body_utf8_ptr - m_body_utf8;
1128
void body_utf8_start(Session *session, const char *begin_ptr);
1129
void body_utf8_append(const char *ptr);
1130
void body_utf8_append(const char *ptr, const char *end_ptr);
1131
void body_utf8_append_literal(Session *session,
1132
const LEX_STRING *txt,
1133
const CHARSET_INFO * const txt_cs,
1134
const char *end_ptr);
1136
/** Current thread. */
1139
/** Current line number. */
1142
/** Length of the last token parsed. */
1145
/** Interface with bison, value of the last token parsed. */
1148
/** LALR(2) resolution, look ahead token.*/
1149
int lookahead_token;
1151
/** LALR(2) resolution, value of the look ahead token.*/
1152
LEX_YYSTYPE lookahead_yylval;
1155
/** Pointer to the current position in the raw input stream. */
1158
/** Starting position of the last token parsed, in the raw buffer. */
1159
const char *m_tok_start;
1161
/** Ending position of the previous token parsed, in the raw buffer. */
1162
const char *m_tok_end;
1164
/** End of the query text in the input stream, in the raw buffer. */
1165
const char *m_end_of_query;
1167
/** Starting position of the previous token parsed, in the raw buffer. */
1168
const char *m_tok_start_prev;
1170
/** Begining of the query text in the input stream, in the raw buffer. */
1173
/** Length of the raw buffer. */
1174
uint32_t m_buf_length;
1176
/** Echo the parsed stream to the pre-processed buffer. */
1179
/** Pre-processed buffer. */
1182
/** Pointer to the current position in the pre-processed input stream. */
1186
Starting position of the last token parsed,
1187
in the pre-processed buffer.
1189
const char *m_cpp_tok_start;
1192
Starting position of the previous token parsed,
1193
in the pre-procedded buffer.
1195
const char *m_cpp_tok_start_prev;
1198
Ending position of the previous token parsed,
1199
in the pre-processed buffer.
1201
const char *m_cpp_tok_end;
1203
/** UTF8-body buffer created during parsing. */
1206
/** Pointer to the current position in the UTF8-body buffer. */
1207
char *m_body_utf8_ptr;
1210
Position in the pre-processed buffer. The query from m_cpp_buf to
1211
m_cpp_utf_processed_ptr is converted to UTF8-body.
1213
const char *m_cpp_utf8_processed_ptr;
1217
/** Current state of the lexical analyser. */
1218
enum my_lex_states next_state;
1221
Position of ';' in the stream, to delimit multiple queries.
1222
This delimiter is in the raw buffer.
1224
const char *found_semicolon;
1226
/** Token character bitmaps, to detect 7bit strings. */
1227
unsigned char tok_bitmap;
1229
/** SQL_MODE = IGNORE_SPACE. */
1232
/** State of the lexical analyser for comments. */
1233
enum_comment_state in_comment;
1236
Starting position of the TEXT_STRING or IDENT in the pre-processed
1239
NOTE: this member must be used within DRIZZLElex() function only.
1241
const char *m_cpp_text_start;
1244
Ending position of the TEXT_STRING or IDENT in the pre-processed
1247
NOTE: this member must be used within DRIZZLElex() function only.
1249
const char *m_cpp_text_end;
1252
Character set specified by the character-set-introducer.
1254
NOTE: this member must be used within DRIZZLElex() function only.
1256
const CHARSET_INFO *m_underscore_cs;
803
1260
/* The state of the lex parsing. This is saved in the Session struct */
804
1262
class LEX : public Query_tables_list
807
Select_Lex_Unit unit; /* most upper unit */
808
Select_Lex select_lex; /* first Select_Lex */
809
/* current Select_Lex in parsing */
810
Select_Lex *current_select;
811
/* list of all Select_Lex */
812
Select_Lex *all_selects_list;
1265
SELECT_LEX_UNIT unit; /* most upper unit */
1266
SELECT_LEX select_lex; /* first SELECT_LEX */
1267
/* current SELECT_LEX in parsing */
1268
SELECT_LEX *current_select;
1269
/* list of all SELECT_LEX */
1270
SELECT_LEX *all_selects_list;
814
/* This is the "scale" for DECIMAL (S,P) notation */
816
/* This is the decimal precision in DECIMAL(S,P) notation */
820
* This is used kind of like the "ident" member variable below, as
821
* a place to store certain names of identifiers. Unfortunately, it
822
* is used differently depending on the Command (SELECT on a derived
1272
char *length,*dec,*change;
825
1273
LEX_STRING name;
826
/* The string literal used in a LIKE expression */
1275
char* to_log; /* For PURGE MASTER LOGS TO */
828
file_exchange *exchange;
1277
sql_exchange *exchange;
829
1278
select_result *result;
832
* This is current used to store the name of a named key cache
833
* or a named savepoint. It should probably be refactored out into
834
* the eventual Command class built for the Keycache and Savepoint
1279
Item *default_value, *on_update_value;
1280
LEX_STRING comment, ident;
839
1282
unsigned char* yacc_yyss, *yacc_yyvs;
840
/* The owning Session of this LEX */
841
1283
Session *session;
1284
virtual_column_info *vcol_info;
842
1286
const CHARSET_INFO *charset;
843
1287
bool text_string_is_7bit;
844
1288
/* store original leaf_tables for INSERT SELECT and PS/SP */
891
1339
syntax error back.
893
1341
bool expr_allows_subselect;
1343
A special command "PARSE_VCOL_EXPR" is defined for the parser
1344
to translate an expression statement of a virtual column \
1345
(stored in the *.frm file as a string) into an Item object.
1346
The following flag is used to prevent other applications to use
1349
bool parse_vcol_expr;
895
1351
thr_lock_type lock_option;
896
1352
enum enum_duplicates duplicates;
1353
enum enum_tx_isolation tx_isolation;
1354
enum enum_ha_read_modes ha_read_mode;
898
1356
enum ha_rkey_function ha_rkey_mode;
899
1357
enum xa_option_words xa_opt;
1358
bool lock_transactional; /* For LOCK Table ... IN ... MODE */
901
sql_var_t option_type;
1360
enum enum_var_type option_type;
1362
uint32_t profile_query_id;
1363
uint32_t profile_options;
1364
enum column_format_type column_format;
1365
uint32_t which_columns;
1366
enum Foreign_key::fk_match_opt fk_match_option;
1367
enum Foreign_key::fk_option fk_update_opt;
1368
enum Foreign_key::fk_option fk_delete_opt;
1369
uint32_t slave_session_opt, start_transaction_opt;
1372
In LEX representing update which were transformed to multi-update
1373
stores total number of tables. For LEX representing multi-delete
1374
holds number of tables from which we will delete records.
1376
uint32_t table_count;
904
1377
uint8_t describe;
906
1379
A flag that indicates what kinds of derived tables are present in the
907
1380
query (0 if no derived tables, otherwise DERIVED_SUBQUERY).
909
1382
uint8_t derived_tables;
911
/* Was the IGNORE symbol found in statement */
1383
bool drop_if_exists, drop_temporary, local_file, one_shot_set;
1387
bool tx_chain, tx_release;
1388
bool subqueries, ignore;
1389
st_parsing_options parsing_options;
1390
Alter_info alter_info;
1393
Pointers to part of LOAD DATA statement that should be rewritten
1394
during replication ("LOCAL 'filename' REPLACE INTO" part).
1396
const char *fname_start;
1397
const char *fname_end;
915
1400
During name resolution search only in the table list given by