diff options
Diffstat (limited to 'sql/sql_lex.h')
-rw-r--r-- | sql/sql_lex.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/sql/sql_lex.h b/sql/sql_lex.h new file mode 100644 index 00000000000..6fd9f203d52 --- /dev/null +++ b/sql/sql_lex.h @@ -0,0 +1,149 @@ +/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +/* YACC and LEX Definitions */ + +/* These may not be declared yet */ +class Table_ident; +class sql_exchange; +class LEX_COLUMN; + +// The following hack is neaded because mysql_yacc.cc does not define +// YYSTYPE before including this file + +#ifdef MYSQL_YACC +#define LEX_YYSTYPE void * +#else +#include "lex_symbol.h" +#include "sql_yacc.h" +#define LEX_YYSTYPE YYSTYPE * +#endif + +enum enum_sql_command { + SQLCOM_SELECT,SQLCOM_CREATE_TABLE,SQLCOM_CREATE_INDEX,SQLCOM_ALTER_TABLE, + SQLCOM_UPDATE,SQLCOM_INSERT,SQLCOM_INSERT_SELECT,SQLCOM_DELETE, + SQLCOM_DROP_TABLE,SQLCOM_DROP_INDEX,SQLCOM_SHOW_DATABASES, + SQLCOM_SHOW_TABLES,SQLCOM_SHOW_FIELDS,SQLCOM_SHOW_KEYS, + SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES, + SQLCOM_GRANT, SQLCOM_CHANGE_DB, SQLCOM_CREATE_DB, SQLCOM_DROP_DB, + SQLCOM_REPAIR, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT, SQLCOM_SHOW_VARIABLES, + SQLCOM_SHOW_STATUS, SQLCOM_CREATE_FUNCTION, SQLCOM_DROP_FUNCTION, + SQLCOM_SHOW_PROCESSLIST,SQLCOM_REVOKE,SQLCOM_OPTIMIZE, SQLCOM_CHECK, + SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_SHOW_GRANTS, SQLCOM_ANALYZE, + SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP, + SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_SHOW_CREATE, + SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, SQLCOM_CHANGE_MASTER +}; + +enum lex_states { STATE_START, STATE_CHAR, STATE_IDENT, + STATE_IDENT_SEP, + STATE_IDENT_START, + STATE_FOUND_IDENT, + STATE_SIGNED_NUMBER, + STATE_REAL, + STATE_CMP_OP, + STATE_LONG_CMP_OP, + STATE_STRING, + STATE_COMMENT, + STATE_END, + STATE_OPERATOR_OR_IDENT, + STATE_NUMBER_IDENT, + STATE_INT_OR_REAL, + STATE_REAL_OR_POINT, + STATE_BOOL, + STATE_EOL, + STATE_ESCAPE, + STATE_LONG_COMMENT, + STATE_END_LONG_COMMENT, + STATE_COLON, + STATE_SET_VAR, + STATE_USER_END, + STATE_HOSTNAME, + STATE_SKIP, + STATE_USER_VARIABLE_DELIMITER +}; + +typedef List<Item> List_item; + +typedef struct st_lex_master_info +{ + char* host, *user, *password,*log_file_name; + uint port, connect_retry; + ulonglong pos; +} LEX_MASTER_INFO; + +/* The state of the lex parsing. This is saved in the THD struct */ + +typedef struct st_lex { + uint yylineno,yytoklen; /* Simulate lex */ + LEX_YYSTYPE yylval; + uchar *ptr,*tok_start,*tok_end,*end_of_query; + ha_rows select_limit,offset_limit; + bool create_refs,drop_primary,drop_if_exists,local_file, + in_comment,ignore_space,verbose; + enum_sql_command sql_command; + enum lex_states next_state; + ulong options; + uint in_sum_expr,grant,grant_tot_col,which_columns, sort_default; + char *length,*dec,*change,*name; + String *wild; + sql_exchange *exchange; + thr_lock_type lock_option; + + List<List_item> expr_list; + List<List_item> when_list; + List<List_item> many_values; + List<key_part_spec> col_list; + List<Alter_drop> drop_list; + List<Alter_column> alter_list; + List<String> interval_list,use_index,*use_index_ptr, + ignore_index, *ignore_index_ptr; + List<st_lex_user> users_list; + List<LEX_COLUMN> columns; + List<Key> key_list; + List<create_field> create_list; + List<Item> item_list,*insert_list,field_list,value_list; + List<Item_func_match> ftfunc_list; + SQL_LIST order_list,table_list,group_list,proc_list; + TYPELIB *interval; + create_field *last_field; + + Item *where,*having,*default_value; + enum enum_duplicates duplicates; + ulong thread_id,type; + HA_CREATE_INFO create_info; + CONVERT *convert_set; + LEX_USER *grant_user; + char *db,*db1,*table1,*db2,*table2; /* For outer join using .. */ + gptr yacc_yyss,yacc_yyvs; + THD *thd; + udf_func udf; + HA_CHECK_OPT check_opt; // check/repair options + LEX_MASTER_INFO mi; // used by CHANGE MASTER +} LEX; + + +void lex_init(void); +void lex_free(void); +LEX *lex_start(THD *thd, uchar *buf,uint length); +void lex_end(LEX *lex); + +extern pthread_key(LEX*,THR_LEX); + +extern LEX_STRING tmp_table_alias; + +#define current_lex (¤t_thd->lex) |