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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list