Changeset: d3e0e0e7e4f6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d3e0e0e7e4f6 Modified Files: sql/server/sql_parser.h sql/server/sql_parser.y sql/server/sql_scan.c Branch: Jul2012 Log Message:
sql/parser: make compile with bison-2.6 properly type the param carried around by bison, use default error function from bison to avoid conflicts lateron diffs (truncated from 677 to 300 lines): diff --git a/sql/server/sql_parser.h b/sql/server/sql_parser.h --- a/sql/server/sql_parser.h +++ b/sql/server/sql_parser.h @@ -187,8 +187,8 @@ typedef enum jt { extern char *token2string(int token); extern void *sql_error(mvc *sql, int error_code, _In_z_ _Printf_format_string_ char *format, ...) __attribute__((__format__(__printf__, 3, 4))); -extern int parse_error(mvc *sql, const char *s); -extern int sqlparse(void *); +extern int sqlerror(mvc *sql, const char *s); +extern int sqlparse(mvc *m); #endif /*_SQL_PARSER_H_*/ diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -32,7 +32,7 @@ #include <string.h> #include <stdlib.h> -#define SA (((mvc*)parm)->sa) +#define SA m->sa #define _symbol_create(t,d) symbol_create( SA, t, d) #define _symbol_create_list(t,d) symbol_create_list( SA, t, d) #define _symbol_create_int(t,d) symbol_create_int( SA, t, d) @@ -51,14 +51,6 @@ #define append_type(l,d) dlist_append_type( SA, l, d) #define _atom_string(t, v) atom_string(SA, t, v) - -#define YYPARSE_PARAM parm -#define YYLEX_PARAM parm -#ifdef yyerror -#undef yyerror -#endif -#define yyerror(s) parse_error(YYLEX_PARAM, s) -#define sqlerror(s) parse_error(YYLEX_PARAM, s) /* needed for bison++ 1.21.11-3 */ #define YYMALLOC malloc #define YYFREE free @@ -77,6 +69,10 @@ * UDT */ +%define api.pure +%parse-param { mvc *m } +%lex-param { void *m } + /* reentrant parser */ %pure_parser %union { @@ -566,7 +562,6 @@ SQLCODE SQLERROR UNDER WHENEVER sqlstmt: sql SCOLON { - mvc *m = (mvc*)parm; if (m->sym) { append_symbol(m->sym->data.lval, $$); $$ = m->sym; @@ -576,12 +571,12 @@ sqlstmt: YYACCEPT; } - | PREPARE { mvc *m = (mvc*)parm; + | PREPARE { m->emode = m_prepare; m->scanner.as = m->scanner.yycur; m->scanner.key = 0; } - sql SCOLON { mvc *m = (mvc*)parm; + sql SCOLON { if (m->sym) { append_symbol(m->sym->data.lval, $3); $$ = m->sym; @@ -590,12 +585,12 @@ sqlstmt: } YYACCEPT; } - | SQL_PLAN { mvc *m = (mvc*)parm; + | SQL_PLAN { m->emode = m_plan; m->scanner.as = m->scanner.yycur; m->scanner.key = 0; } - sql SCOLON { mvc *m = (mvc*)parm; + sql SCOLON { if (m->sym) { append_symbol(m->sym->data.lval, $3); $$ = m->sym; @@ -605,12 +600,12 @@ sqlstmt: YYACCEPT; } - | SQL_EXPLAIN { mvc *m = (mvc*)parm; + | SQL_EXPLAIN { m->emod |= mod_explain; m->scanner.as = m->scanner.yycur; m->scanner.key = 0; } - sql SCOLON { mvc *m = (mvc*)parm; + sql SCOLON { if (m->sym) { append_symbol(m->sym->data.lval, $3); $$ = m->sym; @@ -620,12 +615,12 @@ sqlstmt: YYACCEPT; } - | SQL_DOT { mvc *m = (mvc*)parm; + | SQL_DOT { m->emod |= mod_dot; m->scanner.as = m->scanner.yycur; m->scanner.key = 0; } - sql SCOLON { mvc *m = (mvc*)parm; + sql SCOLON { if (m->sym) { append_symbol(m->sym->data.lval, $3); $$ = m->sym; @@ -635,9 +630,9 @@ sqlstmt: YYACCEPT; } - | SQL_DEBUG { mvc *m = (mvc*)parm; + | SQL_DEBUG { if (m->scanner.mode == LINE_1) { - yyerror("SQL debugging only supported in interactive mode"); + yyerror(m, "SQL debugging only supported in interactive mode"); YYABORT; } m->emod |= mod_debug; @@ -645,22 +640,17 @@ sqlstmt: m->scanner.key = 0; } sqlstmt { $$ = $3; YYACCEPT; } - | SQL_TRACE { mvc *m = (mvc*)parm; + | SQL_TRACE { m->emod |= mod_trace; m->scanner.as = m->scanner.yycur; m->scanner.key = 0; } sqlstmt { $$ = $3; YYACCEPT; } - | exec SCOLON { mvc *m = (mvc*)parm; - m->sym = $$ = $1; YYACCEPT; } - | /*empty*/ { mvc *m = (mvc*)parm; - m->sym = $$ = NULL; YYACCEPT; } - | SCOLON { mvc *m = (mvc*)parm; - m->sym = $$ = NULL; YYACCEPT; } - | error SCOLON { mvc *m = (mvc*)parm; - m->sym = $$ = NULL; YYACCEPT; } - | LEX_ERROR { mvc *m = (mvc*)parm; - m->sym = $$ = NULL; YYABORT; } + | exec SCOLON { m->sym = $$ = $1; YYACCEPT; } + | /*empty*/ { m->sym = $$ = NULL; YYACCEPT; } + | SCOLON { m->sym = $$ = NULL; YYACCEPT; } + | error SCOLON { m->sym = $$ = NULL; YYACCEPT; } + | LEX_ERROR { m->sym = $$ = NULL; YYABORT; } ; @@ -1425,7 +1415,6 @@ column_def: /* handle multi-statements by wrapping them in a list */ sql_subtype it; dlist* stmts; - mvc *m = (mvc*)parm; /* note: sql_next_seq_name uses sa_alloc */ str sn = sql_next_seq_name(m); dlist *p; /* primary key */ @@ -1535,7 +1524,6 @@ generated_column: /* handle multi-statements by wrapping them in a list */ sql_subtype it; dlist* stmts; - mvc *m = (mvc*)parm; /* note: sql_next_seq_name uses sa_alloc */ str sn = sql_next_seq_name(m); /* sequence generation code */ @@ -1563,7 +1551,6 @@ generated_column: /* handle multi-statements by wrapping them in a list */ sql_subtype it; dlist* stmts; - mvc *m = (mvc*)parm; /* note: sql_next_seq_name uses sa_alloc */ str sn = sql_next_seq_name(m); /* sequence generation code */ @@ -2062,7 +2049,7 @@ while_statement: char *label = $1?$1:$8; if ($1 && $8 && strcmp($1, $8) != 0) { $$ = NULL; - yyerror("WHILE: labels should match"); + yyerror(m, "WHILE: labels should match"); YYABORT; } l = L(); @@ -2381,7 +2368,7 @@ update_statement: transaction_statement: _transaction_stmt - { mvc *m = (mvc*)parm; + { $$ = $1; m->type = Q_TRANS; } ; @@ -2470,7 +2457,7 @@ copyfrom_stmt: | COPY opt_nr BINARY INTO qname FROM string_commalist /* binary copy from */ { dlist *l = L(); if ($2 != NULL) { - yyerror("COPY INTO: cannot pass number of records when using binary COPY INTO"); + yyerror(m, "COPY INTO: cannot pass number of records when using binary COPY INTO"); YYABORT; } append_list(l, $5); @@ -2648,8 +2635,6 @@ value_commalist: null: sqlNULL { - mvc *m = (mvc*)parm; - if (m->emode == m_normal && m->caching) { /* replace by argument */ atom *a = atom_general(SA, sql_bind_localtype("void"), NULL); @@ -2878,7 +2863,7 @@ select_no_parens_orderby: _symbol_create_list( SQL_FROM, append_symbol(L(), $1)), NULL, NULL, NULL, $2, _symbol_create_list(SQL_NAME, append_list(append_string(L(),"inner"),NULL)), $3, $4, $5); } } else { - yyerror("missing SELECT operator"); + yyerror(m, "missing SELECT operator"); YYABORT; } } @@ -2999,7 +2984,7 @@ table_ref: } | subquery { $$ = NULL; - yyerror("subquery table reference needs alias, use AS xxx"); + yyerror(m, "subquery table reference needs alias, use AS xxx"); YYABORT; } | joined_table { $$ = $1; @@ -3012,11 +2997,7 @@ table_ref: /* Basket expression, TODO window */ | '[' - { - mvc *m = (mvc*)parm; - - m->caching = 0; - } + { m->caching = 0; } select_no_parens ']' table_name { dlist *op = L(); @@ -3246,7 +3227,7 @@ like_exp: { char *s = sql2str($3); if (_strlen(s) != 1) { char *msg = sql_message("\b22025!ESCAPE must be one character"); - yyerror(msg); + yyerror(m, msg); _DELETE(msg); $$ = NULL; YYABORT; @@ -3403,7 +3384,7 @@ simple_scalar_exp: $$ = NULL; assert($2->token != SQL_COLUMN || $2->data.lval->h->type != type_lng); if ($2->token == SQL_COLUMN && $2->data.lval->h->type == type_int) { - atom *a = sql_bind_arg(parm, $2->data.lval->h->data.i_val); + atom *a = sql_bind_arg(m, $2->data.lval->h->data.i_val); if (!atom_neg(a)) $$ = $2; } @@ -3446,7 +3427,6 @@ value_exp: param: '?' { - mvc *m = (mvc*)parm; int nr = (m->params)?list_length(m->params):0; sql_add_param(m, NULL, NULL); @@ -3773,8 +3753,6 @@ opt_alias_name: atom: literal { - mvc *m = (mvc*)parm; - if (m->emode == m_normal && m->caching && m->argc < 100) { /* replace by argument */ AtomNode *an = (AtomNode*)$1; @@ -3939,12 +3917,11 @@ interval_qualifier: interval_type: INTERVAL interval_qualifier { int sk, ek, sp, ep; - mvc *m = (mvc*)parm; int tpe; $$.type = NULL; if ( (tpe = parse_interval_qualifier( m, $2, &sk, &ek, &sp, &ep )) < 0){ - yyerror("\b22006!incorrect interval"); + yyerror(m, "\b22006!incorrect interval"); YYABORT; } else { _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list