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