Changeset: e3337edefcfc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e3337edefcfc
Modified Files:
sql/server/rel_psm.c
sql/server/sql_parser.h
sql/server/sql_parser.y
sql/server/sql_scan.c
Branch: RIntegration
Log Message:
Getting it one step further.
diffs (94 lines):
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -580,6 +580,10 @@ sequential_block (mvc *sql, sql_subtype
return NULL;
res = exp_rel(sql, r);
} break;
+ case SQL_R_BODY:
+ case SQL_C_BODY:
+ res = sql_error(sql, 01, "Language statement is not
yet handled");
+ break;
default:
res = sql_error(sql, 01,
"Statement '%s' is not a valid flow control statement",
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
@@ -174,7 +174,9 @@ typedef enum tokens {
SQL_XMLQUERY,
SQL_XMLTEXT,
SQL_XMLVALIDATE,
- SQL_XMLNAMESPACES
+ SQL_XMLNAMESPACES,
+ SQL_R_BODY,
+ SQL_C_BODY
} tokens;
typedef enum jt {
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
@@ -218,6 +218,7 @@ int yydebug=1;
trigger_event
opt_when
procedure_statement
+ language_body
trigger_procedure_statement
if_opt_else
func_data_type
@@ -366,7 +367,6 @@ int yydebug=1;
case_opt_else_statement
variable_list
routine_body
- language_body
table_function_column_list
select_target_list
external_function_name
@@ -1867,17 +1867,24 @@ routine_body:
procedure_statement_list procedure_statement SCOLON
END
{ $$ = append_symbol($3,$4); }
- | language_body {$$ = $1;}
+ | language_body {$$ = L(); append_symbol($$,$1);}
;
language_body:
- LANGUAGE IDENT X_BODY { $$ =L();
- append_string($$,$3);
- append_int($$,F_FUNC);
- if ( strcmp($2,"R") && strcmp($2,"r") && strcmp($2,"C") &&
strcmp($2,"c") )
+ LANGUAGE IDENT X_BODY {
+ int tpe = 0;
+ dlist *l =L();
+ append_string(l,$3);
+ append_int(l,F_FUNC);
+ if ( strcmp($2,"R")== 0 || strcmp($2,"r")==0 )
+ tpe= SQL_R_BODY;
+ else
+ if ( strcmp($2,"C")== 0 || strcmp($2,"c")==0 )
+ tpe= SQL_C_BODY;
+ else
yyerror(m, sql_message("Language name R or C expected,
received %s", $2));
- append_string($$,$2);
- append_int($$,F_RBODY);
+ append_string(l,$2);
+ $$ = _symbol_create_list( tpe, l );
}
;
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -656,8 +656,10 @@ scanner_body(mvc *c)
}
lc->yycur = pos - (int)rs->pos;
assert(pos <= rs->len + 1);
- if (blk == 0 && !escape)
+ if (blk == 0 && !escape){
+ lc->yycur--; /* go back to current (possibly
invalid) char */
return scanner_token(lc, X_BODY);
+ }
lc->yycur--; /* go back to current (possibly invalid) char */
if (!cur) {
if (lc->rs->len >= lc->rs->pos + lc->yycur + 1) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list