Drizzled Public API Documentation

pars0pars.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002 
00003 Copyright (C) 1996, 2010, Innobase Oy. All Rights Reserved.
00004 
00005 This program is free software; you can redistribute it and/or modify it under
00006 the terms of the GNU General Public License as published by the Free Software
00007 Foundation; version 2 of the License.
00008 
00009 This program is distributed in the hope that it will be useful, but WITHOUT
00010 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00011 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
00012 
00013 You should have received a copy of the GNU General Public License along with
00014 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
00015 St, Fifth Floor, Boston, MA 02110-1301 USA
00016 
00017 *****************************************************************************/
00018 
00019 /**************************************************/
00026 #pragma once
00027 #ifndef pars0pars_h
00028 #define pars0pars_h
00029 
00030 #include "univ.i"
00031 #include "que0types.h"
00032 #include "usr0types.h"
00033 #include "pars0types.h"
00034 #include "row0types.h"
00035 #include "trx0types.h"
00036 #include "ut0vec.h"
00037 
00042 typedef void* (*pars_user_func_cb_t)(void* arg, void* user_arg);
00043 
00046 extern int  yydebug;
00047 
00048 #ifdef UNIV_SQL_DEBUG
00049 
00051 extern ibool  pars_print_lexed;
00052 #endif /* UNIV_SQL_DEBUG */
00053 
00054 /* Global variable used while parsing a single procedure or query : the code is
00055 NOT re-entrant */
00056 extern sym_tab_t* pars_sym_tab_global;
00057 
00058 extern pars_res_word_t  pars_to_char_token;
00059 extern pars_res_word_t  pars_to_number_token;
00060 extern pars_res_word_t  pars_to_binary_token;
00061 extern pars_res_word_t  pars_binary_to_number_token;
00062 extern pars_res_word_t  pars_substr_token;
00063 extern pars_res_word_t  pars_replstr_token;
00064 extern pars_res_word_t  pars_concat_token;
00065 extern pars_res_word_t  pars_length_token;
00066 extern pars_res_word_t  pars_instr_token;
00067 extern pars_res_word_t  pars_sysdate_token;
00068 extern pars_res_word_t  pars_printf_token;
00069 extern pars_res_word_t  pars_assert_token;
00070 extern pars_res_word_t  pars_rnd_token;
00071 extern pars_res_word_t  pars_rnd_str_token;
00072 extern pars_res_word_t  pars_count_token;
00073 extern pars_res_word_t  pars_sum_token;
00074 extern pars_res_word_t  pars_distinct_token;
00075 extern pars_res_word_t  pars_binary_token;
00076 extern pars_res_word_t  pars_blob_token;
00077 extern pars_res_word_t  pars_int_token;
00078 extern pars_res_word_t  pars_char_token;
00079 extern pars_res_word_t  pars_float_token;
00080 extern pars_res_word_t  pars_update_token;
00081 extern pars_res_word_t  pars_asc_token;
00082 extern pars_res_word_t  pars_desc_token;
00083 extern pars_res_word_t  pars_open_token;
00084 extern pars_res_word_t  pars_close_token;
00085 extern pars_res_word_t  pars_share_token;
00086 extern pars_res_word_t  pars_unique_token;
00087 extern pars_res_word_t  pars_clustered_token;
00088 
00089 extern ulint    pars_star_denoter;
00090 
00091 /* Procedure parameter types */
00092 #define PARS_INPUT  0
00093 #define PARS_OUTPUT 1
00094 #define PARS_NOT_PARAM  2
00095 
00096 int
00097 yyparse(void);
00098 
00099 /*************************************************************/
00102 UNIV_INTERN
00103 que_t*
00104 pars_sql(
00105 /*=====*/
00106   pars_info_t*  info, 
00107   const char* str); 
00108 /*************************************************************/
00110 #ifdef __cplusplus
00111 extern "C"
00112 #endif
00113 UNIV_INTERN
00114 void
00115 pars_get_lex_chars(
00116 /*===============*/
00117   char* buf,    
00118   int*  result,   
00119   int max_size);  
00121 /*************************************************************/
00123 UNIV_INTERN
00124 void
00125 yyerror(
00126 /*====*/
00127   const char* s); 
00128 /*********************************************************************/
00131 UNIV_INTERN
00132 sym_node_t*
00133 pars_variable_declaration(
00134 /*======================*/
00135   sym_node_t* node, 
00137   pars_res_word_t* type); 
00138 /*********************************************************************/
00141 UNIV_INTERN
00142 func_node_t*
00143 pars_func(
00144 /*======*/
00145   que_node_t* res_word,
00146   que_node_t* arg); 
00147 /*********************************************************************/
00150 UNIV_INTERN
00151 func_node_t*
00152 pars_op(
00153 /*====*/
00154   int   func, 
00155   que_node_t* arg1, 
00156   que_node_t* arg2);  
00158 /*********************************************************************/
00161 UNIV_INTERN
00162 order_node_t*
00163 pars_order_by(
00164 /*==========*/
00165   sym_node_t* column, 
00166   pars_res_word_t* asc);  
00167 /*********************************************************************/
00171 UNIV_INTERN
00172 sel_node_t*
00173 pars_select_list(
00174 /*=============*/
00175   que_node_t* select_list,  
00176   sym_node_t* into_list); 
00177 /*********************************************************************/
00180 UNIV_INTERN
00181 que_node_t*
00182 pars_cursor_declaration(
00183 /*====================*/
00184   sym_node_t* sym_node, 
00186   sel_node_t* select_node); 
00187 /*********************************************************************/
00190 UNIV_INTERN
00191 que_node_t*
00192 pars_function_declaration(
00193 /*======================*/
00194   sym_node_t* sym_node);  
00196 /*********************************************************************/
00199 UNIV_INTERN
00200 sel_node_t*
00201 pars_select_statement(
00202 /*==================*/
00203   sel_node_t* select_node,  
00205   sym_node_t* table_list, 
00206   que_node_t* search_cond,  
00207   pars_res_word_t* for_update,  
00208   pars_res_word_t* consistent_read,
00210   order_node_t* order_by);  
00211 /*********************************************************************/
00214 UNIV_INTERN
00215 col_assign_node_t*
00216 pars_column_assignment(
00217 /*===================*/
00218   sym_node_t* column, 
00219   que_node_t* exp); 
00220 /*********************************************************************/
00223 UNIV_INTERN
00224 upd_node_t*
00225 pars_update_statement_start(
00226 /*========================*/
00227   ibool   is_delete,  
00228   sym_node_t* table_sym,  
00229   col_assign_node_t* col_assign_list);
00231 /*********************************************************************/
00234 UNIV_INTERN
00235 upd_node_t*
00236 pars_update_statement(
00237 /*==================*/
00238   upd_node_t* node,   
00239   sym_node_t* cursor_sym, 
00241   que_node_t* search_cond); 
00242 /*********************************************************************/
00245 UNIV_INTERN
00246 ins_node_t*
00247 pars_insert_statement(
00248 /*==================*/
00249   sym_node_t* table_sym,  
00250   que_node_t* values_list,  
00251   sel_node_t* select);  
00252 /*********************************************************************/
00255 UNIV_INTERN
00256 sym_node_t*
00257 pars_parameter_declaration(
00258 /*=======================*/
00259   sym_node_t* node, 
00261   ulint   param_type,
00263   pars_res_word_t* type); 
00264 /*********************************************************************/
00267 UNIV_INTERN
00268 elsif_node_t*
00269 pars_elsif_element(
00270 /*===============*/
00271   que_node_t* cond,   
00272   que_node_t* stat_list); 
00273 /*********************************************************************/
00276 UNIV_INTERN
00277 if_node_t*
00278 pars_if_statement(
00279 /*==============*/
00280   que_node_t* cond,   
00281   que_node_t* stat_list,  
00282   que_node_t* else_part); 
00283 /*********************************************************************/
00286 UNIV_INTERN
00287 for_node_t*
00288 pars_for_statement(
00289 /*===============*/
00290   sym_node_t* loop_var, 
00291   que_node_t* loop_start_limit,
00292   que_node_t* loop_end_limit, 
00293   que_node_t* stat_list); 
00294 /*********************************************************************/
00297 UNIV_INTERN
00298 while_node_t*
00299 pars_while_statement(
00300 /*=================*/
00301   que_node_t* cond,   
00302   que_node_t* stat_list); 
00303 /*********************************************************************/
00306 UNIV_INTERN
00307 exit_node_t*
00308 pars_exit_statement(void);
00309 /*=====================*/
00310 /*********************************************************************/
00313 UNIV_INTERN
00314 return_node_t*
00315 pars_return_statement(void);
00316 /*=======================*/
00317 /*********************************************************************/
00320 UNIV_INTERN
00321 func_node_t*
00322 pars_procedure_call(
00323 /*================*/
00324   que_node_t* res_word,
00325   que_node_t* args);  
00326 /*********************************************************************/
00329 UNIV_INTERN
00330 assign_node_t*
00331 pars_assignment_statement(
00332 /*======================*/
00333   sym_node_t* var,  
00334   que_node_t* val); 
00335 /*********************************************************************/
00339 UNIV_INTERN
00340 fetch_node_t*
00341 pars_fetch_statement(
00342 /*=================*/
00343   sym_node_t* cursor,   
00344   sym_node_t* into_list,  
00345   sym_node_t* user_func); 
00346 /*********************************************************************/
00349 UNIV_INTERN
00350 open_node_t*
00351 pars_open_statement(
00352 /*================*/
00353   ulint   type, 
00355   sym_node_t* cursor);  
00356 /*********************************************************************/
00359 UNIV_INTERN
00360 row_printf_node_t*
00361 pars_row_printf_statement(
00362 /*======================*/
00363   sel_node_t* sel_node);  
00364 /*********************************************************************/
00367 UNIV_INTERN
00368 commit_node_t*
00369 pars_commit_statement(void);
00370 /*=======================*/
00371 /*********************************************************************/
00374 UNIV_INTERN
00375 roll_node_t*
00376 pars_rollback_statement(void);
00377 /*=========================*/
00378 /*********************************************************************/
00381 UNIV_INTERN
00382 sym_node_t*
00383 pars_column_def(
00384 /*============*/
00385   sym_node_t*   sym_node, 
00387   pars_res_word_t*  type,   
00388   sym_node_t*   len,    
00390   void*     is_unsigned,  
00392   void*     is_not_null); 
00394 /*********************************************************************/
00397 UNIV_INTERN
00398 tab_node_t*
00399 pars_create_table(
00400 /*==============*/
00401   sym_node_t* table_sym,  
00403   sym_node_t* column_defs,  
00404   void*   not_fit_in_memory);
00414 /*********************************************************************/
00417 UNIV_INTERN
00418 ind_node_t*
00419 pars_create_index(
00420 /*==============*/
00421   pars_res_word_t* unique_def,  
00422   pars_res_word_t* clustered_def, 
00423   sym_node_t* index_sym,  
00425   sym_node_t* table_sym,  
00427   sym_node_t* column_list); 
00428 /*********************************************************************/
00431 UNIV_INTERN
00432 que_fork_t*
00433 pars_procedure_definition(
00434 /*======================*/
00435   sym_node_t* sym_node, 
00437   sym_node_t* param_list, 
00438   que_node_t* stat_list); 
00440 /*************************************************************/
00446 UNIV_INTERN
00447 que_fork_t*
00448 pars_stored_procedure_call(
00449 /*=======================*/
00450   sym_node_t* sym_node);  
00451 /******************************************************************/
00456 UNIV_INTERN
00457 que_thr_t*
00458 pars_complete_graph_for_exec(
00459 /*=========================*/
00460   que_node_t* node, 
00462   trx_t*    trx,  
00463   mem_heap_t* heap);  
00465 /****************************************************************/
00468 UNIV_INTERN
00469 pars_info_t*
00470 pars_info_create(void);
00471 /*==================*/
00472 
00473 /****************************************************************/
00475 UNIV_INTERN
00476 void
00477 pars_info_free(
00478 /*===========*/
00479   pars_info_t*  info);  
00481 /****************************************************************/
00483 UNIV_INTERN
00484 void
00485 pars_info_add_literal(
00486 /*==================*/
00487   pars_info_t*  info,   
00488   const char* name,   
00489   const void* address,  
00490   ulint   length,   
00491   ulint   type,   
00492   ulint   prtype);  
00495 /****************************************************************/
00498 UNIV_INTERN
00499 void
00500 pars_info_add_str_literal(
00501 /*======================*/
00502   pars_info_t*  info,   
00503   const char* name,   
00504   const char* str);   
00506 /****************************************************************/
00515 UNIV_INTERN
00516 void
00517 pars_info_add_int4_literal(
00518 /*=======================*/
00519   pars_info_t*  info,   
00520   const char* name,   
00521   lint    val);   
00523 /****************************************************************/
00532 UNIV_INTERN
00533 void
00534 pars_info_add_ull_literal(
00535 /*======================*/
00536   pars_info_t*  info,   
00537   const char* name,   
00538   ib_uint64_t val);   
00539 /****************************************************************/
00541 UNIV_INTERN
00542 void
00543 pars_info_add_function(
00544 /*===================*/
00545   pars_info_t*    info, 
00546   const char*   name, 
00547   pars_user_func_cb_t func, 
00548   void*     arg); 
00550 /****************************************************************/
00552 UNIV_INTERN
00553 void
00554 pars_info_add_id(
00555 /*=============*/
00556   pars_info_t*  info,   
00557   const char* name,   
00558   const char* id);    
00560 /****************************************************************/
00563 UNIV_INTERN
00564 pars_user_func_t*
00565 pars_info_get_user_func(
00566 /*====================*/
00567   pars_info_t*    info, 
00568   const char*   name);  
00570 /****************************************************************/
00573 UNIV_INTERN
00574 pars_bound_lit_t*
00575 pars_info_get_bound_lit(
00576 /*====================*/
00577   pars_info_t*    info, 
00578   const char*   name);  
00580 /****************************************************************/
00583 UNIV_INTERN
00584 pars_bound_id_t*
00585 pars_info_get_bound_id(
00586 /*===================*/
00587   pars_info_t*    info, 
00588   const char*   name);  
00590 /******************************************************************/
00592 #ifdef __cplusplus
00593 extern "C"
00594 #endif
00595 UNIV_INTERN
00596 void
00597 pars_lexer_close(void);
00598 /*==================*/
00599 
00601 struct pars_info_struct {
00602   mem_heap_t* heap;   
00604   ib_vector_t*  funcs;    
00606   ib_vector_t*  bound_lits; 
00608   ib_vector_t*  bound_ids;  
00611   ibool   graph_owns_us;  
00613 };
00614 
00616 struct pars_user_func_struct {
00617   const char*   name; 
00618   pars_user_func_cb_t func; 
00619   void*     arg;  
00620 };
00621 
00623 struct pars_bound_lit_struct {
00624   const char* name;   
00625   const void* address;  
00626   ulint   length;   
00627   ulint   type;   
00628   ulint   prtype;   
00629 };
00630 
00632 struct pars_bound_id_struct {
00633   const char* name;   
00634   const char* id;   
00635 };
00636 
00638 struct pars_res_word_struct{
00639   int code; 
00641 };
00642 
00645 struct func_node_struct{
00646   que_common_t  common; 
00647   int   func; 
00648   ulint   func_class; 
00649   que_node_t* args; 
00650   UT_LIST_NODE_T(func_node_t) cond_list;
00654   UT_LIST_NODE_T(func_node_t) func_node_list;
00657 };
00658 
00660 struct order_node_struct{
00661   que_common_t  common; 
00662   sym_node_t* column; 
00663   ibool   asc;  
00664 };
00665 
00667 struct proc_node_struct{
00668   que_common_t  common;   
00669   sym_node_t* proc_id;  
00671   sym_node_t* param_list; 
00672   que_node_t* stat_list;  
00673   sym_tab_t*  sym_tab;  
00674 };
00675 
00677 struct elsif_node_struct{
00678   que_common_t  common;   
00679   que_node_t* cond;   
00680   que_node_t* stat_list;  
00681 };
00682 
00684 struct if_node_struct{
00685   que_common_t  common;   
00686   que_node_t* cond;   
00687   que_node_t* stat_list;  
00688   que_node_t* else_part;  
00689   elsif_node_t* elsif_list; 
00690 };
00691 
00693 struct while_node_struct{
00694   que_common_t  common;   
00695   que_node_t* cond;   
00696   que_node_t* stat_list;  
00697 };
00698 
00700 struct for_node_struct{
00701   que_common_t  common;   
00702   sym_node_t* loop_var; 
00707   que_node_t* loop_start_limit;
00708   que_node_t* loop_end_limit; 
00709   lint    loop_end_value; 
00713   que_node_t* stat_list;  
00714 };
00715 
00717 struct exit_node_struct{
00718   que_common_t  common;   
00719 };
00720 
00722 struct return_node_struct{
00723   que_common_t  common;   
00724 };
00725 
00727 struct assign_node_struct{
00728   que_common_t  common;   
00729   sym_node_t* var;    
00730   que_node_t* val;    
00731 };
00732 
00734 struct col_assign_node_struct{
00735   que_common_t  common;   
00736   sym_node_t* col;    
00737   que_node_t* val;    
00738 };
00739 
00741 /* @{ */
00742 #define PARS_FUNC_ARITH   1 
00743 #define PARS_FUNC_LOGICAL 2 
00744 #define PARS_FUNC_CMP   3 
00745 #define PARS_FUNC_PREDEFINED  4 
00746 #define PARS_FUNC_AGGREGATE 5 
00747 #define PARS_FUNC_OTHER   6 
00749 /* @} */
00750 
00751 #ifndef UNIV_NONINL
00752 #include "pars0pars.ic"
00753 #endif
00754 
00755 #endif