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

Reply via email to