sql_lex.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    
  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.
  7.    
  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.
  12.    
  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 */
  16. /* YACC and LEX Definitions */
  17. /* These may not be declared yet */
  18. class Table_ident;
  19. class sql_exchange;
  20. class LEX_COLUMN;
  21. // The following hack is neaded because mysql_yacc.cc does not define
  22. // YYSTYPE before including this file
  23. #ifdef MYSQL_YACC
  24. #define LEX_YYSTYPE void *
  25. #else
  26. #include "lex_symbol.h"
  27. #include "sql_yacc.h"
  28. #define LEX_YYSTYPE YYSTYPE *
  29. #endif
  30. enum enum_sql_command {
  31.   SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX, SQLCOM_ALTER_TABLE,
  32.   SQLCOM_UPDATE, SQLCOM_INSERT, SQLCOM_INSERT_SELECT,
  33.   SQLCOM_DELETE, SQLCOM_TRUNCATE, SQLCOM_DROP_TABLE, SQLCOM_DROP_INDEX,
  34.   SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS,
  35.   SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_LOGS, SQLCOM_SHOW_STATUS,
  36.   SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT,
  37.   SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE,
  38.   SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES,
  39.   SQLCOM_GRANT, SQLCOM_CHANGE_DB, SQLCOM_CREATE_DB, SQLCOM_DROP_DB,
  40.   SQLCOM_REPAIR, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT, 
  41.   SQLCOM_CREATE_FUNCTION, SQLCOM_DROP_FUNCTION,
  42.   SQLCOM_REVOKE,SQLCOM_OPTIMIZE, SQLCOM_CHECK,
  43.   SQLCOM_FLUSH, SQLCOM_KILL,  SQLCOM_ANALYZE,
  44.   SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP,
  45.   SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_CHANGE_MASTER,
  46.   SQLCOM_RENAME_TABLE, SQLCOM_BACKUP_TABLE, SQLCOM_RESTORE_TABLE,
  47.   SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_SHOW_BINLOGS,
  48.   SQLCOM_SHOW_OPEN_TABLES
  49. };
  50. enum lex_states { STATE_START, STATE_CHAR, STATE_IDENT,
  51.   STATE_IDENT_SEP,
  52.   STATE_IDENT_START,
  53.   STATE_FOUND_IDENT,
  54.   STATE_SIGNED_NUMBER,
  55.   STATE_REAL,
  56.   STATE_CMP_OP,
  57.   STATE_LONG_CMP_OP,
  58.   STATE_STRING,
  59.   STATE_COMMENT,
  60.   STATE_END,
  61.   STATE_OPERATOR_OR_IDENT,
  62.   STATE_NUMBER_IDENT,
  63.   STATE_INT_OR_REAL,
  64.   STATE_REAL_OR_POINT,
  65.   STATE_BOOL,
  66.   STATE_EOL,
  67.   STATE_ESCAPE,
  68.   STATE_LONG_COMMENT,
  69.   STATE_END_LONG_COMMENT,
  70.   STATE_COLON,
  71.   STATE_SET_VAR,
  72.   STATE_USER_END,
  73.   STATE_HOSTNAME,
  74.   STATE_SKIP,
  75.   STATE_USER_VARIABLE_DELIMITER
  76. };
  77. typedef List<Item> List_item;
  78. typedef struct st_lex_master_info
  79. {
  80.   char* host, *user, *password,*log_file_name;
  81.   uint port, connect_retry;
  82.   ulonglong pos;
  83. } LEX_MASTER_INFO;
  84. /* The state of the lex parsing. This is saved in the THD struct */
  85. typedef struct st_lex {
  86.   uint  yylineno,yytoklen; /* Simulate lex */
  87.   LEX_YYSTYPE yylval;
  88.   uchar *ptr,*tok_start,*tok_end,*end_of_query;
  89.   char *length,*dec,*change,*name;
  90.   char *db,*db1,*table1,*db2,*table2; /* For outer join using .. */
  91.   char *backup_dir; /* For RESTORE/BACKUP */
  92.   char* to_log;                                 /* For PURGE MASTER LOGS TO */
  93.   String *wild;
  94.   sql_exchange *exchange;
  95.   ha_rows select_limit,offset_limit;
  96.   List<List_item>     expr_list;
  97.   List<List_item>     when_list;
  98.   List<List_item>     many_values;
  99.   List<key_part_spec> col_list;
  100.   List<Alter_drop>    drop_list;
  101.   List<Alter_column>  alter_list;
  102.   List<String>       interval_list,use_index,*use_index_ptr,
  103.       ignore_index, *ignore_index_ptr;
  104.   List<st_lex_user>   users_list;
  105.   List<LEX_COLUMN>    columns;
  106.   List<Key>       key_list;
  107.   List<create_field>  create_list;
  108.   List<Item>       item_list,*insert_list,field_list,value_list;
  109.   List<Item_func_match> ftfunc_list;
  110.   SQL_LIST       order_list,table_list,group_list,proc_list;
  111.   TYPELIB       *interval;
  112.   create_field       *last_field;
  113.   Item *where,*having,*default_value;
  114.   CONVERT *convert_set;
  115.   LEX_USER *grant_user;
  116.   gptr yacc_yyss,yacc_yyvs;
  117.   THD *thd;
  118.   udf_func udf;
  119.   HA_CHECK_OPT   check_opt; // check/repair options
  120.   HA_CREATE_INFO create_info;
  121.   LEX_MASTER_INFO mi; // used by CHANGE MASTER
  122.   ulong thread_id,type;
  123.   ulong options;
  124.   enum_sql_command sql_command;
  125.   enum lex_states next_state;
  126.   enum enum_duplicates duplicates;
  127.   uint in_sum_expr,grant,grant_tot_col,which_columns, sort_default;
  128.   thr_lock_type lock_option;
  129.   bool create_refs,drop_primary,drop_if_exists,local_file;
  130.   bool  in_comment,ignore_space,verbose;
  131. } LEX;
  132. void lex_init(void);
  133. void lex_free(void);
  134. LEX *lex_start(THD *thd, uchar *buf,uint length);
  135. void lex_end(LEX *lex);
  136. extern pthread_key(LEX*,THR_LEX);
  137. extern LEX_STRING tmp_table_alias;
  138. #define current_lex (&current_thd->lex)