File: myx_lex_helpers.cpp

package info (click to toggle)
mysql-workbench 6.3.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 113,932 kB
  • ctags: 87,814
  • sloc: ansic: 955,521; cpp: 427,465; python: 59,728; yacc: 59,129; xml: 54,204; sql: 7,091; objc: 965; makefile: 638; sh: 613; java: 237; perl: 30; ruby: 6; php: 1
file content (128 lines) | stat: -rw-r--r-- 2,512 bytes parent folder | download | duplicates (2)
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