1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
#include <stdio.h>
#include <sstream>
#ifdef _WIN32
#include "mysql_sql_parser_public_interface.h"
#endif
#include "myx_sql_parser_public_interface.h"
#include "myx_lex_helpers.h"
#include "myx_sql_parser.tab.hh"
#include "myx_sql_tree_item.h"
//#include "sql_lex.h"
namespace mysql_parser
{
std::istream* lex_input_stream= 0;
static std::string err_msg;
const void* tree= 0;
struct Lex_args lex_args;
extern int MYSQLlex(void **arg, void *yyl);
int yylex(void **yylval)
{
//struct Lex_args *p= (struct Lex_args *)ptr_to_arg_pair;
//return MYSQLlex(lex_args.arg1, lex_args.arg2);
int state= mysql_parser::MYSQLlex(yylval, mysql_parser::lex_args.arg2);
//int state= myx_map_lexer_value(MYSQLlex(yylval, lex_args.arg2));
//return state == END_OF_INPUT ? 0 : state;
return state;
}
void yyerror(const char *msg) { mysql_parser::err_msg= msg; }
/*
int yywrap() { return 1; } // stop after EOF
void yy_custom_input(char *buf, int* result, int max_size)
{
mysql_parser::lex_input_stream->read(buf, max_size);
*result= mysql_parser::lex_input_stream->gcount();
}
int yy_token_match(int token, const char *value)
{
return token;
}
int yy_unknown_token(const char *value)
{
//printf("error %s", value);
return 0;
}
*/
MYX_PUBLIC_FUNC const std::string & myx_get_err_msg()
{
return err_msg;
}
MYX_PUBLIC_FUNC const void *myx_get_parser_tree()
{
return tree;
}
MYX_PUBLIC_FUNC void myx_set_parser_input(std::istream *sqlstream)
{
lex_input_stream= sqlstream;
}
MYX_PUBLIC_FUNC void myx_set_parser_source(const char *sql)
{
lex_input_stream= new std::istringstream(sql);
}
MYX_PUBLIC_FUNC void myx_set_parser_source(std::istream *sqlstream)
{
lex_input_stream= sqlstream;
}
MYX_PUBLIC_FUNC void myx_free_parser_source(void)
{
delete lex_input_stream;
SqlAstStatics::cleanup_ast_nodes();
}
MYX_PUBLIC_FUNC void myx_parse(void)
{
err_msg.clear();
yyparse();
}
// server replacement routines
//
//extern "C" {
extern char *strmake_root(const char *str, unsigned int len)
{
char *pos;
if ((pos=(char *)malloc(len+1)))
{
memcpy(pos,str,len);
pos[len]=0;
}
return pos;
}
extern char *strdup_root(const char *str)
{
return strmake_root(str, (unsigned int) strlen(str));
}
extern char *alloc_root(unsigned int size)
{
return (char *)malloc(size);
}
extern char *memdup_root(const char *str, unsigned int len)
{
char *pos;
if ((pos=alloc_root(len)))
memcpy(pos,str,len);
return pos;
}
//} // extern C
} // namespace mysql_parser
|