diff options
Diffstat (limited to 'sql/sql_lex.h')
-rw-r--r-- | sql/sql_lex.h | 105 |
1 files changed, 48 insertions, 57 deletions
diff --git a/sql/sql_lex.h b/sql/sql_lex.h index af80b175cd3..6aef99886e9 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -22,8 +22,12 @@ class Table_ident; class sql_exchange; class LEX_COLUMN; -// The following hack is needed because mysql_yacc.cc does not define -// YYSTYPE before including this file +/* + The following hack is needed because mysql_yacc.cc does not define + YYSTYPE before including this file +*/ + +#include "set_var.h" #ifdef MYSQL_YACC #define LEX_YYSTYPE void * @@ -40,6 +44,7 @@ enum enum_sql_command { SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS, SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_LOGS, SQLCOM_SHOW_STATUS, + SQLCOM_SHOW_INNODB_STATUS, SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS, SQLCOM_SHOW_CREATE_DB, @@ -59,56 +64,47 @@ enum enum_sql_command { SQLCOM_HA_OPEN, SQLCOM_HA_CLOSE, SQLCOM_HA_READ, SQLCOM_SHOW_SLAVE_HOSTS, SQLCOM_DELETE_MULTI, SQLCOM_MULTI_UPDATE, SQLCOM_SHOW_BINLOG_EVENTS, SQLCOM_SHOW_NEW_MASTER, SQLCOM_DO, - SQLCOM_END, SQLCOM_SHOW_WARNS, SQLCOM_SHOW_WARNS_COUNT, - SQLCOM_EMPTY_QUERY, SQLCOM_SHOW_ERRORS, - SQLCOM_SHOW_ERRORS_COUNT, SQLCOM_SHOW_COLUMN_TYPES, - SQLCOM_SHOW_TABLE_TYPES, SQLCOM_SHOW_PRIVILEGES + SQLCOM_SHOW_WARNS, SQLCOM_EMPTY_QUERY, SQLCOM_SHOW_ERRORS, + SQLCOM_SHOW_COLUMN_TYPES, SQLCOM_SHOW_TABLE_TYPES, SQLCOM_SHOW_PRIVILEGES, + SQLCOM_END }; -enum lex_states { STATE_START, STATE_CHAR, STATE_IDENT, - STATE_IDENT_SEP, - STATE_IDENT_START, - STATE_FOUND_IDENT, - STATE_SIGNED_NUMBER, - STATE_REAL, - STATE_HEX_NUMBER, - 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 +enum lex_states +{ + STATE_START, STATE_CHAR, STATE_IDENT, STATE_IDENT_SEP, STATE_IDENT_START, + STATE_FOUND_IDENT, STATE_SIGNED_NUMBER, STATE_REAL, STATE_HEX_NUMBER, + 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, STATE_SYSTEM_VAR, + STATE_IDENT_OR_KEYWORD }; + typedef List<Item> List_item; typedef struct st_lex_master_info { - char* host, *user, *password,*log_file_name; + char *host, *user, *password, *log_file_name; uint port, connect_retry; ulonglong pos; ulong server_id; - char* relay_log_name; + char *relay_log_name; ulong relay_log_pos; } LEX_MASTER_INFO; -enum sub_select_type {UNSPECIFIED_TYPE,UNION_TYPE, INTERSECT_TYPE, - EXCEPT_TYPE, GLOBAL_OPTIONS_TYPE, DERIVED_TABLE_TYPE}; +enum sub_select_type +{ + UNSPECIFIED_TYPE,UNION_TYPE, INTERSECT_TYPE, + EXCEPT_TYPE, GLOBAL_OPTIONS_TYPE, DERIVED_TABLE_TYPE, OLAP_TYPE +}; + +enum olap_type +{ + UNSPECIFIED_OLAP_TYPE, CUBE_TYPE, ROLLUP_TYPE +}; /* The state of the lex parsing for selects @@ -246,6 +242,7 @@ class st_select_lex: public st_select_lex_node { public: char *db, *db1, *table1, *db2, *table2; /* For outer join using .. */ Item *where, *having; /* WHERE & HAVING clauses */ + enum olap_type olap; List<List_item> expr_list; List<List_item> when_list; /* WHEN clause */ SQL_LIST table_list, group_list; /* FROM & GROUP BY clauses */ @@ -255,11 +252,11 @@ public: List<Item_func_match> ftfunc_list; JOIN *join; /* after JOIN::prepare it is pointer to corresponding JOIN */ uint in_sum_expr; - bool create_refs, - braces, /* SELECT ... UNION (SELECT ... ) <- this braces */ - depended, /* depended from outer select subselect */ - /* TRUE when having fix field called in processing of this SELECT */ - having_fix_field; + bool create_refs; + bool braces; /* SELECT ... UNION (SELECT ... ) <- this braces */ + bool depended; /* depended from outer select subselect */ + /* TRUE when having fix field called in processing of this SELECT */ + bool having_fix_field; void init_query(); void init_select(); @@ -286,20 +283,11 @@ public: }; typedef class st_select_lex SELECT_LEX; -class Set_option :public Sql_alloc { -public: - const char *name; - Item *item; - uint name_length; - bool type; /* 1 if global */ - Set_option(bool par_type, const char *par_name, uint length, - Item *par_item) - :name(par_name), item(par_item), name_length(length), type(par_type) {} -}; /* The state of the lex parsing. This is saved in the THD struct */ -typedef struct st_lex { +typedef struct st_lex +{ uint yylineno,yytoklen; /* Simulate lex */ LEX_YYSTYPE yylval; SELECT_LEX_UNIT unit; /* most upper unit */ @@ -320,19 +308,20 @@ typedef struct st_lex { List<Alter_drop> drop_list; List<Alter_column> alter_list; List<String> interval_list; - List<st_lex_user> users_list; + List<LEX_USER> users_list; List<LEX_COLUMN> columns; List<Key> key_list; List<create_field> create_list; List<Item> *insert_list,field_list,value_list; List<List_item> many_values; - List<Set_option> option_list; + List<set_var_base> var_list; List<Item> param_list; SQL_LIST proc_list, auxilliary_table_list; TYPELIB *interval; create_field *last_field; Item *default_value, *comment; CONVERT *convert_set; + CONVERT *thd_convert_set; // Set with SET CHAR SET LEX_USER *grant_user; gptr yacc_yyss,yacc_yyvs; THD *thd; @@ -350,10 +339,12 @@ typedef struct st_lex { enum enum_ha_read_modes ha_read_mode; enum ha_rkey_function ha_rkey_mode; enum enum_enable_or_disable alter_keys_onoff; + enum enum_var_type option_type; uint grant, grant_tot_col, which_columns, union_option; uint fk_delete_opt, fk_update_opt, fk_match_option; - bool drop_primary,drop_if_exists,local_file; - bool in_comment,ignore_space,verbose,simple_alter, option_type, derived_tables; + bool drop_primary, drop_if_exists, local_file, olap; + bool in_comment, ignore_space, verbose, simple_alter; + bool derived_tables; uint slave_thd_opt; CHARSET_INFO *charset; } LEX; |