home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / mysql / mysql-3.23.28g-win-source.exe / sql / sql_lex.h < prev    next >
C/C++ Source or Header  |  2000-11-16  |  5KB  |  159 lines

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