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

Reply via email to