Changeset: b9d79d1ec39c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b9d79d1ec39c
Modified Files:
monetdb5/extras/jaql/parser/jaql.l
sql/server/sql_parser.h
sql/server/sql_parser.y
sql/server/sql_scan.c
Branch: default
Log Message:
Merged from Jul2012
diffs (truncated from 690 to 300 lines):
diff --git a/monetdb5/extras/jaql/parser/jaql.l
b/monetdb5/extras/jaql/parser/jaql.l
--- a/monetdb5/extras/jaql/parser/jaql.l
+++ b/monetdb5/extras/jaql/parser/jaql.l
@@ -19,8 +19,8 @@
%{
#include <stdio.h>
+#include "jaqltree.h"
#include "jaql.tab.h"
-#include "jaqltree.h"
#ifdef _MSC_VER
#define snprintf _snprintf
#define fileno _fileno
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;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list