Changeset: f19b59e9323d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f19b59e9323d Added Files: sql/backends/monet5/Tests/rapi04.sql Modified Files: monetdb5/extras/rapi/rapi.c monetdb5/extras/rapi/rapi.mal sql/backends/monet5/Tests/All sql/backends/monet5/Tests/rapi02.sql sql/backends/monet5/Tests/rapi03.sql Branch: RIntegration Log Message:
R API: More test cases boolean return type diffs (111 lines): 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 @@ -405,6 +405,16 @@ str RAPIeval(Client cntxt, MalBlkPtr mb, SXP_TO_BAT(lng, INTEGER_POINTER, *p==NA_INTEGER); break; } + case TYPE_bte: { // only R logical types fit into bte BATs + if (!IS_LOGICAL(ret_col)) { + msg = createException(MAL, "rapi.eval", + "wrong R column type for column %d, expected logical", + i); + goto wrapup; + } + SXP_TO_BAT(bte, LOGICAL_POINTER, *p==NA_LOGICAL); + break; + } case TYPE_dbl: { if (!IS_NUMERIC(ret_col)) { msg = 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,9 +17,14 @@ 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"; + #the generic R interface pattern eval(expr:str,arg:any...):any... address RAPIeval diff --git a/sql/backends/monet5/Tests/All b/sql/backends/monet5/Tests/All --- a/sql/backends/monet5/Tests/All +++ b/sql/backends/monet5/Tests/All @@ -4,6 +4,7 @@ HAVE_LIBR?rapi00 HAVE_LIBR?rapi01 HAVE_LIBR?rapi02 HAVE_LIBR?rapi03 +HAVE_LIBR?rapi04 inlineR inlineUDF diff --git a/sql/backends/monet5/Tests/rapi02.sql b/sql/backends/monet5/Tests/rapi02.sql --- a/sql/backends/monet5/Tests/rapi02.sql +++ b/sql/backends/monet5/Tests/rapi02.sql @@ -1,10 +1,12 @@ create table rval(i integer,j integer); insert into rval values (1,4), (2,3), (3,2), (4,1); -create function rapi02(i integer,j integer) returns integer +create function rapi02(i integer,j integer,z integer) returns integer language R { - return(arg1*arg2); + return(arg1*sum(arg2)*arg3); }; -select rapi02(i,j) from rval; +select rapi02(i,j,2) from rval; drop function rapi02; -drop table rval; \ No newline at end of file +drop table rval; + + diff --git a/sql/backends/monet5/Tests/rapi03.sql b/sql/backends/monet5/Tests/rapi03.sql --- a/sql/backends/monet5/Tests/rapi03.sql +++ b/sql/backends/monet5/Tests/rapi03.sql @@ -1,12 +1,10 @@ create table rval(i integer); insert into rval values (1),(2),(3),(4),(-1),(0); -create function rapi03(i integer,z integer) returns integer +create function rapi03(i integer,z integer) returns boolean language R { - return(as.integer(arg1>arg2)); + return(arg1>arg2); }; -select * from rval where rapi03(i,2) = 1; +select * from rval where rapi03(i,2); drop function rapi03; drop table rval; - - diff --git a/sql/backends/monet5/Tests/rapi04.sql b/sql/backends/monet5/Tests/rapi04.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/rapi04.sql @@ -0,0 +1,16 @@ +CREATE TABLE ts (ts INTEGER); +insert into ts values (1387360138),(451665720),(514382400),(1000209600),(1326272400); + +create function moon(arg1 integer,arg2 float, arg3 float) returns integer language R { + library(moonsun) + options(latitude=arg2,longitude=arg3) + angles <- sapply(arg1,FUN=function(x){ + ts <- as.POSIXlt(x,origin = "1970-01-01",tz="UTC") + moon(jd(epoch=ts)+ts$hour/24)$angle + }) + return(as.integer(arg1[angles > 0])) +}; + +select * from ts where moon(ts,52.3,4.8) > 0; +drop function moon; +drop table ts; \ No newline at end of file _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list