Changeset: 3bc1581c0950 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3bc1581c0950
Modified Files:
        monetdb5/extras/jaql/30_jaql.mal
        monetdb5/extras/jaql/Makefile.ag
        monetdb5/extras/jaql/Tests/All
        monetdb5/extras/jaql/Tests/arraytorecord.mal
        monetdb5/extras/jaql/Tests/arraytorecord.stable.err
        monetdb5/extras/jaql/Tests/arraytorecord.stable.out
        monetdb5/extras/jaql/Tests/func00.mal
        monetdb5/extras/jaql/Tests/func00.stable.out
        monetdb5/extras/jaql/jaql.c
        monetdb5/extras/jaql/jaql.mal
        monetdb5/extras/jaql/jaqlfunc.mal
        monetdb5/extras/jaql/jaqlgencode.c
        monetdb5/extras/jaql/jaqlgencode.h
Branch: jacqueline
Log Message:

funcs: simple check for function suitability

- moved all callable functions to jaqlfunc module (and file for ease of
  administration)
- the code now looks up the function to use, and does a quick check on
  its signature to see if its usable (needs more work)
- converted the arraytorecord test into jaql-based invocation test
- removed sum() test from func00 as it will get a different
  implementation


diffs (truncated from 526 to 300 lines):

diff --git a/monetdb5/extras/jaql/30_jaql.mal b/monetdb5/extras/jaql/30_jaql.mal
--- a/monetdb5/extras/jaql/30_jaql.mal
+++ b/monetdb5/extras/jaql/30_jaql.mal
@@ -17,3 +17,4 @@
 
 include json;
 include jaql;
+include jaqlfunc;
diff --git a/monetdb5/extras/jaql/Makefile.ag b/monetdb5/extras/jaql/Makefile.ag
--- a/monetdb5/extras/jaql/Makefile.ag
+++ b/monetdb5/extras/jaql/Makefile.ag
@@ -51,7 +51,7 @@ headers_json_mal = {
 headers_jaql_mal = {
        HEADERS = mal
        DIR = libdir/monetdb5
-       SOURCES = jaql.mal
+       SOURCES = jaql.mal jaqlfunc.mal
 }
 
 headers_autoload = {
diff --git a/monetdb5/extras/jaql/Tests/All b/monetdb5/extras/jaql/Tests/All
--- a/monetdb5/extras/jaql/Tests/All
+++ b/monetdb5/extras/jaql/Tests/All
@@ -3,8 +3,6 @@ json01
 json02
 json03
 
-arraytorecord
-
 expand00
 filter00
 transform00
diff --git a/monetdb5/extras/jaql/Tests/arraytorecord.mal 
b/monetdb5/extras/jaql/Tests/arraytorecord.mal
deleted file mode 100644
--- a/monetdb5/extras/jaql/Tests/arraytorecord.mal
+++ /dev/null
@@ -1,14 +0,0 @@
-(i1,i2,i3,i4,i5,i6,i7) := json.shred("[\"DEF\",\"ABC\"]");
-(j1,j2,j3,j4,j5,j6,j7) := json.shred("[123,456]");
-
-(r1,r2,r3,r4,r5,r6,r7) := 
jaql.arrayToRecord(i1,i2,i3,i4,i5,i6,i7,j1,j2,j3,j4,j5,j6,j7);
-
-o := io.stdout();
-json.print(o,r1,r2,r3,r4,r5,r6,r7);
-
-
-(j1,j2,j3,j4,j5,j6,j7) := json.shred("[123]");
-
-(r1,r2,r3,r4,r5,r6,r7) := 
jaql.arrayToRecord(i1,i2,i3,i4,i5,i6,i7,j1,j2,j3,j4,j5,j6,j7);
-
-json.print(o,r1,r2,r3,r4,r5,r6,r7);
diff --git a/monetdb5/extras/jaql/Tests/arraytorecord.stable.err 
b/monetdb5/extras/jaql/Tests/arraytorecord.stable.err
deleted file mode 100644
--- a/monetdb5/extras/jaql/Tests/arraytorecord.stable.err
+++ /dev/null
@@ -1,31 +0,0 @@
-stderr of test 'arraytorecord` in directory 'extras/jaql` itself:
-
-
-# 14:30:50 >  
-# 14:30:50 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"gdk_dbfarm=/net/sofia.ins.cwi.nl/export/scratch1/fabian/tmp/mtest-jacqueline-sofia.ins.cwi.nl/five/dbfarm"
 "--set" "mapi_open=true" "--set" "mapi_port=39312" "--set" "monet_prompt=" 
"--trace" "--forcemito" "--set" "mal_listing=2" "--dbname=mTests_extras_jaql" 
"arraytorecord.mal"
-# 14:30:50 >  
-
-# builtin opt  gdk_dbname = demo
-# builtin opt  gdk_dbfarm = 
/ufs/fabian/scratch/ssd/monetdb/jacqueline/program-x86_64/var/lib/monetdb5/dbfarm
-# builtin opt  gdk_debug = 0
-# builtin opt  gdk_alloc_map = no
-# builtin opt  gdk_vmtrim = yes
-# builtin opt  monet_prompt = >
-# builtin opt  monet_daemon = no
-# builtin opt  mapi_port = 50000
-# builtin opt  mapi_open = false
-# builtin opt  mapi_autosense = false
-# builtin opt  sql_optimizer = default_pipe
-# builtin opt  sql_debug = 0
-# cmdline opt  gdk_nr_threads = 0
-# cmdline opt  gdk_dbfarm = 
/net/sofia.ins.cwi.nl/export/scratch1/fabian/tmp/mtest-jacqueline-sofia.ins.cwi.nl/five/dbfarm
-# cmdline opt  mapi_open = true
-# cmdline opt  mapi_port = 39312
-# cmdline opt  monet_prompt = 
-# cmdline opt  mal_listing = 2
-# cmdline opt  gdk_dbname = mTests_extras_jaql
-
-# 14:30:50 >  
-# 14:30:50 >  "Done."
-# 14:30:50 >  
-
diff --git a/monetdb5/extras/jaql/Tests/arraytorecord.stable.out 
b/monetdb5/extras/jaql/Tests/arraytorecord.stable.out
deleted file mode 100644
--- a/monetdb5/extras/jaql/Tests/arraytorecord.stable.out
+++ /dev/null
@@ -1,35 +0,0 @@
-stdout of test 'arraytorecord` in directory 'extras/jaql` itself:
-
-
-# 14:30:50 >  
-# 14:30:50 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"gdk_dbfarm=/net/sofia.ins.cwi.nl/export/scratch1/fabian/tmp/mtest-jacqueline-sofia.ins.cwi.nl/five/dbfarm"
 "--set" "mapi_open=true" "--set" "mapi_port=39312" "--set" "monet_prompt=" 
"--trace" "--forcemito" "--set" "mal_listing=2" "--dbname=mTests_extras_jaql" 
"arraytorecord.mal"
-# 14:30:50 >  
-
-# MonetDB 5 server v11.8.0 "jacqueline-bba2819c6be4"
-# Serving database 'mTests_extras_jaql', using 8 threads
-# Compiled for x86_64-pc-linux-gnu/64bit with 64bit OIDs dynamically linked
-# Found 15.630 GiB available main-memory.
-# Copyright (c) 1993-July 2008 CWI.
-# Copyright (c) August 2008-2012 MonetDB B.V., all rights reserved
-# Visit http://www.monetdb.org/ for further information
-# Listening for connection requests on mapi:monetdb://sofia.ins.cwi.nl:39312/
-# MonetDB/GIS module loaded
-# MonetDB/SQL module loaded
-# MonetDB/DataCell module not loaded: MALException:jaql.context:JAQL 
environment not found
-function user.main():void;
-    (i1,i2,i3,i4,i5,i6,i7) := json.shred("[\"DEF\",\"ABC\"]");
-    (j1,j2,j3,j4,j5,j6,j7) := json.shred("[123,456]");
-    (r1,r2,r3,r4,r5,r6,r7) := 
jaql.arrayToRecord(i1,i2,i3,i4,i5,i6,i7,j1,j2,j3,j4,j5,j6,j7);
-    o := io.stdout();
-    json.print(o,r1,r2,r3,r4,r5,r6,r7);
-    (j1,j2,j3,j4,j5,j6,j7) := json.shred("[123]");
-    (r1,r2,r3,r4,r5,r6,r7) := 
jaql.arrayToRecord(i1,i2,i3,i4,i5,i6,i7,j1,j2,j3,j4,j5,j6,j7);
-    json.print(o,r1,r2,r3,r4,r5,r6,r7);
-end main;
-{ "DEF": 123, "ABC": 456 }
-{ "DEF": 123, "ABC": null }
-
-# 14:30:50 >  
-# 14:30:50 >  "Done."
-# 14:30:50 >  
-
diff --git a/monetdb5/extras/jaql/Tests/func00.mal 
b/monetdb5/extras/jaql/Tests/func00.mal
--- a/monetdb5/extras/jaql/Tests/func00.mal
+++ b/monetdb5/extras/jaql/Tests/func00.mal
@@ -1,2 +1,3 @@
-
-jaql.x("sum([1,2,3]);");
+# test of "native" functions (all inputs/outputs are json arrays)
+jaql.x("arrayToRecord([\"DEF\", \"ABC\"], [123, 456]);");
+jaql.x("arrayToRecord([\"DEF\", \"ABC\"], [456]);");
diff --git a/monetdb5/extras/jaql/Tests/func00.stable.out 
b/monetdb5/extras/jaql/Tests/func00.stable.out
--- a/monetdb5/extras/jaql/Tests/func00.stable.out
+++ b/monetdb5/extras/jaql/Tests/func00.stable.out
@@ -17,9 +17,12 @@ stdout of test 'func00` in directory 'ex
 # MonetDB/SQL module loaded
 # MonetDB/DataCell module not loaded: MALException:jaql.context:JAQL 
environment not found
 function user.main():void;
-    jaql.x("sum([1,2,3]);");
+# test of "native" functions (all inputs/outputs are json arrays) 
+    jaql.x("arrayToRecord([\"DEF\", \"ABC\"], [123, 456]);");
+    jaql.x("arrayToRecord([\"DEF\", \"ABC\"], [456]);");
 end main;
-6
+{ "DEF": 123, "ABC": 456 }
+{ "DEF": 456, "ABC": null }
 
 # 21:34:47 >  
 # 21:34:47 >  "Done."
diff --git a/monetdb5/extras/jaql/jaql.c b/monetdb5/extras/jaql/jaql.c
--- a/monetdb5/extras/jaql/jaql.c
+++ b/monetdb5/extras/jaql/jaql.c
@@ -1659,7 +1659,7 @@ JAQLexecute(Client cntxt, MalBlkPtr mb, 
                                /* we do not return anything */
                                setVarType(prg->def, 0, TYPE_void);
                                setVarUDFtype(prg->def, 0);
-                               (void)dumptree(j, prg->def, j->p);
+                               (void)dumptree(j, cntxt, prg->def, j->p);
                                pushEndInstruction(prg->def);
                                /* codegen could report an error */
                                if (j->err[0] != '\0')
diff --git a/monetdb5/extras/jaql/jaql.mal b/monetdb5/extras/jaql/jaql.mal
--- a/monetdb5/extras/jaql/jaql.mal
+++ b/monetdb5/extras/jaql/jaql.mal
@@ -33,137 +33,3 @@ pattern setVar(nme:str, kind:bat[:oid,:b
 address JAQLsetVar
 comment "Set or overwrite value of JSON variable";
 
-function range(start:lng, end:lng, 
skip:lng)(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]);
-       r2 := bat.new(:oid,:str);
-       r4 := bat.new(:oid,:dbl);
-       r6 := bat.new(:oid,:oid);
-       r7 := bat.new(:oid,:str);
-
-       # TODO: use array.series from sciql
-#      r3 := array.series(start, skip, end, 1, 1);
-       r3 := bat.new(:oid,:lng);
-       iend := calc.+(end, 1);
-       barrier (v,i) := language.newRange(start);
-                       r3 := bat.append(r3, i);
-                       redo (v,i) := language.nextElement(skip, iend);
-       exit (v,i);
-       r3 := algebra.markH(r3, 1@0);
-
-       r5 := algebra.project(r3, 0@0);
-       r5 := bat.reverse(r5);
-
-       r1 := bat.new(:oid,:bte);
-       r1 := bat.insert(r1, 0@0, 97:bte); # a
-       k := algebra.project(r3, 105:bte); # i
-       r1 := bat.insert(r1, k);
-
-       return (r1,r2,r3,r4,r5,r6,r7);
-end range;
-
-function range(start:lng, 
end:lng)(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]);
-       (r1,r2,r3,r4,r5,r6,r7) := jaql.range(start, end, 1:lng);
-       return (r1,r2,r3,r4,r5,r6,r7);
-end range;
-
-function 
range(size:lng)(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]);
-       s := size - 1;
-       (r1,r2,r3,r4,r5,r6,r7) := jaql.range(0:lng, s);
-       return (r1,r2,r3,r4,r5,r6,r7);
-end range;
-
-# generate a JSON record by merging two JSON arrays
-function 
arrayToRecord(kindn:bat[:oid,:bte],stringn:bat[:oid,:str],integern:bat[:oid,:lng],doublen:bat[:oid,:dbl],arrayn:bat[:oid,:oid],objectn:bat[:oid,:oid],namen:bat[:oid,:str],kindv:bat[:oid,:bte],stringv:bat[:oid,:str],integerv:bat[:oid,:lng],doublev:bat[:oid,:dbl],arrayv:bat[:oid,:oid],objectv:bat[:oid,:oid],namev:bat[:oid,:str])(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]);
-       r1 := bat.new(:oid,:bte);
-       r2 := bat.new(:oid,:str);
-       r3 := bat.new(:oid,:lng);
-       r4 := bat.new(:oid,:dbl);
-       r5 := bat.new(:oid,:oid);
-       r6 := bat.new(:oid,:oid);
-       r7 := bat.new(:oid,:str);
-
-       elemsn := algebra.selectH(arrayn, 0@0);
-       elemsn := bat.reverse(elemsn);
-       k1 := algebra.semijoin(kindn, elemsn);
-       # we can only have string values
-       k2 := algebra.select(k1, 115:bte); # s
-       k3 := algebra.markH(k2, 1@0);
-       k4 := algebra.markT(k2, 1@0);
-
-       elemsv := algebra.selectH(arrayv, 0@0);
-       e1 := algebra.markH(elemsv, 1@0);
-       e2 := algebra.join(k4, e1);
-
-       # create nulls for missing values
-       i1 := bat.reverse(kindv);
-       i2 := aggr.max(i1);
-       i3 := calc.wrd(i2);
-       i4 := calc.+(i3, 1);
-       i5 := calc.oid(i4);
-       e3 := algebra.kdifference(k4, e2);
-       e4 := algebra.project(e3, 110:bte); # n
-       e5 := algebra.markH(e4, i5);
-
-       # copy the value JSON data
-       r1 := bat.insert(r1, 0@0, 111:bte); # o
-       k10 := algebra.kdifference(kindv, r1);
-       r1 := bat.insert(r1, k10);
-       r1 := bat.insert(r1, e5);
-       r2 := bat.insert(r2, stringv);
-       r3 := bat.insert(r3, integerv);
-       r4 := bat.insert(r4, doublev);
-       a1 := algebra.kdifference(arrayv, elemsv);
-       r5 := bat.insert(r5, a1);
-       r6 := bat.insert(r6, objectv);
-       r7 := bat.insert(r7, namev);
-
-       # construct the top level object
-       e10 := algebra.markH(e3, i5);
-       e11 := algebra.markT(e10, i5);
-       e2 := bat.insert(e2, e11);
-       o1 := algebra.project(0@0, e2);
-       e12 := bat.reverse(e2);
-       s1 := algebra.join(e12, stringn);
-       # add object and the pair names
-       r6 := bat.insert(r6, o1);
-       r7 := bat.insert(r7, s1);
-
-       return (r1,r2,r3,r4,r5,r6,r7);
-end arrayToRecord;
-
-# perform sum over the input array
-function 
sum(kindn:bat[:oid,:bte],stringn:bat[:oid,:str],integern:bat[:oid,:lng],doublen:bat[:oid,:dbl],arrayn:bat[:oid,:oid],objectn:bat[:oid,:oid],namen:bat[:oid,:str])(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]);
-       # expect an array of ints or dbls
-       e1 := algebra.selectH(arrayn, 0@0);
-       e2 := bat.reverse(e1);
-
-       i1 := algebra.semijoin(kindn, e2);
-       i2 := algebra.select(i1, 105:bte); # i
-       i3 := algebra.semijoin(integern, i2);
-
-       d2 := algebra.select(i1, 100:bte); # d
-       d3 := algebra.semijoin(doublen, d2);
-       d4 := aggr.count(d3);
-
-       r1 := bat.new(:oid,:bte);
-       r2 := bat.new(:oid,:str);
-       r3 := bat.new(:oid,:lng);
-       r4 := bat.new(:oid,:dbl);
-       r5 := bat.new(:oid,:oid);
-       r6 := bat.new(:oid,:oid);
-       r7 := bat.new(:oid,:str);
-
-       s1 := aggr.sum(i3);
-       barrier hd := calc.>(d4, 0);
-               s2 := aggr.sum(d3);
-               s4 := calc.+(s1, s2);
-               r1 := bat.insert(r1, 0@0, 100:bte); # d
-               r4 := bat.insert(r4, 0@0, s4);
-       exit hd;
-       barrier nd := calc.==(d4, 0);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to