summaryrefslogtreecommitdiff
path: root/sql/sql_lex.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_lex.h')
-rw-r--r--sql/sql_lex.h149
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 (&current_thd->lex)