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