Changeset: e59b2c45714f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e59b2c45714f
Modified Files:
        sql/backends/monet5/Tests/rapi00.sql
        sql/include/sql_catalog.h
        sql/server/rel_psm.c
        sql/server/sql_parser.h
        sql/server/sql_parser.y
Branch: RIntegration
Log Message:

store the R/C/J function string.
TODO instantiate the R/C/J function (and then call it)


diffs (178 lines):

diff --git a/sql/backends/monet5/Tests/rapi00.sql 
b/sql/backends/monet5/Tests/rapi00.sql
--- a/sql/backends/monet5/Tests/rapi00.sql
+++ b/sql/backends/monet5/Tests/rapi00.sql
@@ -20,6 +20,7 @@ language R {
        someval <- Re(fft(arg1)); return(someval);
 };
 
+select * from functions where name = 'rapi00';
 select * from rapi00();
 
 drop table rapitable;
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -276,6 +276,7 @@ typedef struct sql_arg {
 #define F_UNION 5
 #define F_CBODY 6
 #define F_RBODY 7
+#define F_JBODY 8
 
 #define IS_FUNC(f) (f->type == F_FUNC)
 #define IS_PROC(f) (f->type == F_PROC)
@@ -284,6 +285,7 @@ typedef struct sql_arg {
 #define IS_UNION(f) (f->type == F_UNION)
 #define IS_CBODY(f) (f->type == F_CBODY)
 #define IS_RBODY(f) (f->type == F_RBODY)
+#define IS_JBODY(f) (f->type == F_JBODY)
 
 typedef struct sql_func {
        sql_base base;
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
@@ -26,10 +26,6 @@
 #include "rel_exp.h"
 #include "rel_updates.h"
 #include "sql_privileges.h"
-#undef HAVE_LIBR
-#ifdef HAVE_LIBR
-#include "rapi.h"
-#endif
 
 static sql_rel *
 rel_psm_block(sql_allocator *sa, list *l)
@@ -584,17 +580,6 @@ sequential_block (mvc *sql, sql_subtype 
                                return NULL;
                        res = exp_rel(sql, r);
                }       break;
-               case SQL_R_BODY:
-               case SQL_C_BODY:
-               case SQL_J_BODY:
-#ifdef HAVE_LIBR
-                       res = RAPIparser(s->data.lval); // TBD
-                       if ( res)
-                               res = sql_error(sql, 01, "Language statement 
parsing failed");
-#else
-                               //res = sql_error(sql, 01, "Language extensions 
not supported ");
-#endif
-                       break;
                default:
                        res = sql_error(sql, 01, 
                         "Statement '%s' is not a valid flow control statement",
@@ -769,7 +754,16 @@ rel_create_func(mvc *sql, dlist *qname, 
                                                        "CREATE %s%s: failed to 
get restype", KF, F);
                        }
 
-                       if (body) {             /* sql func */
+                       if (body && type == F_RBODY) {
+                               if (create) 
+                                       f = mvc_create_func(sql, sql->sa, s, 
fname, l, restype, type, "rapi", fname, q);
+                       } else if (body && type == F_CBODY) {
+                               if (create) 
+                                       f = mvc_create_func(sql, sql->sa, s, 
fname, l, restype, type, "capi", fname, q);
+                       } else if (body && type == F_JBODY) {
+                               if (create) 
+                                       f = mvc_create_func(sql, sql->sa, s, 
fname, l, restype, type, "japi", fname, q);
+                       } else if (body) {              /* sql func */
                                list *b = NULL;
                                sql_schema *old_schema = cur_schema(sql);
        
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
@@ -175,9 +175,6 @@ typedef enum tokens {
        SQL_XMLTEXT,
        SQL_XMLVALIDATE,
        SQL_XMLNAMESPACES,
-       SQL_R_BODY,
-       SQL_J_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,7 +218,6 @@ int yydebug=1;
        trigger_event
        opt_when
        procedure_statement
-       language_body
        trigger_procedure_statement
        if_opt_else
        func_data_type
@@ -1803,10 +1802,34 @@ func_def:
                                append_list(f, $3);
                                append_list(f, $5);
                                append_symbol(f, $8);
-                               append_string(f, NULL);
+                               append_list(f, NULL);
                                append_list(f, $9);
                                append_int(f, F_FUNC);
                          $$ = _symbol_create_list( SQL_CREATE_FUNC, f ); }
+  | create FUNCTION qname
+       '(' opt_paramlist ')'
+    RETURNS func_data_type
+    LANGUAGE IDENT X_BODY { 
+                       int tpe_func = 0;
+                       dlist *f = L();
+                       char l = *$10;
+
+                       if (l == 'R' || l == 'r')
+                               tpe_func = F_RBODY;
+                       else if (l == 'C' || l == 'c')
+                               tpe_func = F_CBODY;
+                       else if (l == 'J' || l == 'j')
+                               tpe_func = F_JBODY;
+                       else
+                               yyerror(m, sql_message("Language name R, C, or 
J(avascript):expected, received '%c'", l));
+
+                       append_list(f, $3);
+                       append_list(f, $5);
+                       append_symbol(f, $8);
+                       append_list(f, NULL); 
+                       append_list(f, append_string(L(), $11));
+                       append_int(f, tpe_func);
+                       $$ = _symbol_create_list( SQL_CREATE_FUNC, f ); }
   | create FILTER FUNCTION qname
        '(' opt_paramlist ')'
     EXTERNAL sqlNAME external_function_name    
@@ -1850,7 +1873,7 @@ func_def:
                                append_list(f, $3);
                                append_list(f, $5);
                                append_symbol(f, NULL); /* no result */
-                               append_string(f, NULL); /* no mil-impl */
+                               append_list(f, NULL); 
                                append_list(f, $7);
                                append_int(f, F_PROC);
                          $$ = _symbol_create_list( SQL_CREATE_FUNC, f ); }
@@ -1867,28 +1890,6 @@ routine_body:
        procedure_statement_list procedure_statement SCOLON 
     END
                { $$ = append_symbol($3,$4); }
- | language_body {$$ = L(); append_symbol($$,$1);}
- ;
-
-language_body:
-   LANGUAGE IDENT X_BODY { 
-               int tpe = 0;
-               dlist *l =L(); 
-               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
-               if (  strcmp($2,"J")== 0 || strcmp($2,"j")==0 )
-                       tpe= SQL_J_BODY;
-               else
-                       yyerror(m, sql_message("Language name R, C, or 
J(avascript):expected, received %s", $2));
-               append_string(l,$3); 
-               append_int(l,F_FUNC); 
-               append_string(l,$2); 
-               $$ = _symbol_create_list( tpe, l );
-       }
  ;
 
 /* change into compound statement 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to