library/sql.parser/source/myx_lex_helpers.cpp (78 lines of code) (raw):
#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