1
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; either version 2 of the License, or
6
(at your option) any later version.
8
This program is distributed in the hope that it will be useful,
9
but WITHOUT ANY WARRANTY; without even the implied warranty of
10
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
GNU General Public License for more details.
13
You should have received a copy of the GNU General Public License
14
along with this program; if not, write to the Free Software
15
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
18
/* YACC and LEX Definitions */
20
/* These may not be declared yet */
25
// The following hack is neaded because mysql_yacc.cc does not define
26
// YYSTYPE before including this file
29
#define LEX_YYSTYPE void *
31
#include "lex_symbol.h"
33
#define LEX_YYSTYPE YYSTYPE *
36
enum enum_sql_command {
37
SQLCOM_SELECT,SQLCOM_CREATE_TABLE,SQLCOM_CREATE_INDEX,SQLCOM_ALTER_TABLE,
38
SQLCOM_UPDATE,SQLCOM_INSERT,SQLCOM_INSERT_SELECT,SQLCOM_DELETE,
39
SQLCOM_DROP_TABLE,SQLCOM_DROP_INDEX,SQLCOM_SHOW_DATABASES,
40
SQLCOM_SHOW_TABLES,SQLCOM_SHOW_FIELDS,SQLCOM_SHOW_KEYS,
41
SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES,
42
SQLCOM_GRANT, SQLCOM_CHANGE_DB, SQLCOM_CREATE_DB, SQLCOM_DROP_DB,
43
SQLCOM_REPAIR, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT, SQLCOM_SHOW_VARIABLES,
44
SQLCOM_SHOW_STATUS, SQLCOM_CREATE_FUNCTION, SQLCOM_DROP_FUNCTION,
45
SQLCOM_SHOW_PROCESSLIST,SQLCOM_REVOKE,SQLCOM_OPTIMIZE, SQLCOM_CHECK,
46
SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_SHOW_GRANTS, SQLCOM_ANALYZE,
47
SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP,
48
SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_SHOW_CREATE,
49
SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, SQLCOM_CHANGE_MASTER
52
enum lex_states { STATE_START, STATE_CHAR, STATE_IDENT,
63
STATE_OPERATOR_OR_IDENT,
71
STATE_END_LONG_COMMENT,
77
STATE_USER_VARIABLE_DELIMITER
80
typedef List<Item> List_item;
82
typedef struct st_lex_master_info
84
char* host, *user, *password,*log_file_name;
85
uint port, connect_retry;
89
/* The state of the lex parsing. This is saved in the THD struct */
91
typedef struct st_lex {
92
uint yylineno,yytoklen; /* Simulate lex */
94
uchar *ptr,*tok_start,*tok_end,*end_of_query;
95
ha_rows select_limit,offset_limit;
96
bool create_refs,drop_primary,drop_if_exists,local_file,
97
in_comment,ignore_space,verbose;
98
enum_sql_command sql_command;
99
enum lex_states next_state;
101
uint in_sum_expr,grant,grant_tot_col,which_columns, sort_default;
102
char *length,*dec,*change,*name;
104
sql_exchange *exchange;
105
thr_lock_type lock_option;
107
List<List_item> expr_list;
108
List<List_item> when_list;
109
List<List_item> many_values;
110
List<key_part_spec> col_list;
111
List<Alter_drop> drop_list;
112
List<Alter_column> alter_list;
113
List<String> interval_list,use_index,*use_index_ptr,
114
ignore_index, *ignore_index_ptr;
115
List<st_lex_user> users_list;
116
List<LEX_COLUMN> columns;
118
List<create_field> create_list;
119
List<Item> item_list,*insert_list,field_list,value_list;
120
List<Item_func_match> ftfunc_list;
121
SQL_LIST order_list,table_list,group_list,proc_list;
123
create_field *last_field;
125
Item *where,*having,*default_value;
126
enum enum_duplicates duplicates;
127
ulong thread_id,type;
128
HA_CREATE_INFO create_info;
129
CONVERT *convert_set;
130
LEX_USER *grant_user;
131
char *db,*db1,*table1,*db2,*table2; /* For outer join using .. */
132
gptr yacc_yyss,yacc_yyvs;
135
HA_CHECK_OPT check_opt; // check/repair options
136
LEX_MASTER_INFO mi; // used by CHANGE MASTER
142
LEX *lex_start(THD *thd, uchar *buf,uint length);
143
void lex_end(LEX *lex);
145
extern pthread_key(LEX*,THR_LEX);
147
extern LEX_STRING tmp_table_alias;
149
#define current_lex (¤t_thd->lex)