Changeset: 9a08deb62e39 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9a08deb62e39
Modified Files:
monetdb5/extras/rapi/Makefile.ag
monetdb5/extras/rapi/rapi.c
monetdb5/extras/rapi/rapi.h
monetdb5/extras/rapi/rapi.mal
sql/server/rel_psm.c
sql/server/sql_parser.h
sql/server/sql_parser.y
Branch: RIntegration
Log Message:
Fix the current state
The include file rap.h does not appear where it is expected.
includedir/monetdb
diffs (139 lines):
diff --git a/monetdb5/extras/rapi/Makefile.ag b/monetdb5/extras/rapi/Makefile.ag
--- a/monetdb5/extras/rapi/Makefile.ag
+++ b/monetdb5/extras/rapi/Makefile.ag
@@ -27,10 +27,16 @@ MTSAFE
lib__rapi = {
MODULE
DIR = libdir/monetdb5
- SOURCES = rapi.h rapi.c
+ SOURCES = rapi.c
LIBS = $(libr_LIBS)
}
+headers_h = {
+ DIR = includedir/monetdb
+ HEADERS = h
+ SOURCES = rapi.h
+}
+
headers_rapi_mal = {
HEADERS = mal
DIR = libdir/monetdb5
@@ -44,4 +50,4 @@ headers_autoload = {
}
EXTRA_DIST_DIR = Tests
-EXTRA_DIST = 50_rapi.mal rapi.mal
+EXTRA_DIST = 50_rapi.mal rapi.mal
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -130,6 +130,18 @@ static void RAPIinitialize(void) {
rapiInitialized++;
}
+str RAPIparser(int *ret, str *rcall){
+ ParseStatus status;
+ str msg = NULL;
+
+ (void) ret;
+ (void) R_ParseVector(mkString(*rcall), INT_MAX, &status, R_NilValue);
+ if (status != PARSE_OK)
+ msg = createException(MAL, "rapi.eval", "%s", *rcall);
+ free(*rcall);
+ return msg;
+}
+
str RAPIeval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) {
str exprStr = *(str*) getArgReference(stk, pci, pci->retc);
SEXP x, env,retval;
diff --git a/monetdb5/extras/rapi/rapi.h b/monetdb5/extras/rapi/rapi.h
--- a/monetdb5/extras/rapi/rapi.h
+++ b/monetdb5/extras/rapi/rapi.h
@@ -41,6 +41,7 @@
#define _RAPI_DEBUG_
+rapi_export str RAPIparser(int *ret, str *rcall);
rapi_export str RAPIeval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
rapi_export str RAPIevalScalar(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
rapi_export str RAPIevalDataframe(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
diff --git a/monetdb5/extras/rapi/rapi.mal b/monetdb5/extras/rapi/rapi.mal
--- a/monetdb5/extras/rapi/rapi.mal
+++ b/monetdb5/extras/rapi/rapi.mal
@@ -17,6 +17,9 @@
module rapi;
+command parser(expr:str):bit
+address RAPIparser;
+
pattern eval(expr:str):any
address RAPIeval
comment "Execute a simple R script returning a single value";
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,6 +26,10 @@
#include "rel_exp.h"
#include "rel_updates.h"
#include "sql_privileges.h"
+#undef HAVELIBR
+#ifdef HAVE_LIBR
+#include "rapi.h"
+#endif
static sql_rel *
rel_psm_block(sql_allocator *sa, list *l)
@@ -582,7 +586,14 @@ sequential_block (mvc *sql, sql_subtype
} break;
case SQL_R_BODY:
case SQL_C_BODY:
- res = sql_error(sql, 01, "Language statement is not
yet handled");
+ case SQL_J_BODY:
+#ifdef HAVE_LIBR
+ res = RAPIparser(s->data.lval); // TBD
+ if ( res)
+ res = sql_error(sql, 01, "Language statement
is not yet handled");
+#else
+ res = sql_error(sql, 01, "Language extensions
not supported ");
+#endif
break;
default:
res = sql_error(sql, 01,
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
@@ -176,6 +176,7 @@ typedef enum tokens {
SQL_XMLVALIDATE,
SQL_XMLNAMESPACES,
SQL_R_BODY,
+ SQL_J_BODY,
SQL_C_BODY
} tokens;
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
@@ -1874,15 +1874,18 @@ language_body:
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));
+ 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 );
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list