Changeset: a41832584b76 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a41832584b76 Modified Files: monetdb5/extras/jaql/Tests/All monetdb5/extras/jaql/Tests/transform02.mal monetdb5/extras/jaql/Tests/transform02.stable.err monetdb5/extras/jaql/Tests/transform02.stable.out monetdb5/extras/jaql/jaqlgencode.c Branch: jacqueline Log Message:
transform: implemented pair names unfolding Using the x.* notation is basically giving everything we have, which is trivial in our model, as it means we simply return all members of the matching arrays (which have pair names already, of course). diffs (155 lines): 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 @@ -6,6 +6,7 @@ json03 expand00 filter00 transform00 +transform02 join00 join02 sort00 diff --git a/monetdb5/extras/jaql/Tests/transform02.mal b/monetdb5/extras/jaql/Tests/transform02.mal new file mode 100644 --- /dev/null +++ b/monetdb5/extras/jaql/Tests/transform02.mal @@ -0,0 +1,3 @@ +jaql.x("[{\"a\":1,\"b\":3},{\"b\":2},{\"a\":4,\"b\":5}] -> transform {$.*};"); +jaql.x("[{\"b\":3},{\"a\":3.5,\"b\":2}] -> transform {$.*};"); +jaql.x("[{\"x\":{\"b\":3}},{\"x\":{\"a\":3.5,\"b\":2}}] -> transform {$.x.*};"); diff --git a/monetdb5/extras/jaql/Tests/transform02.stable.err b/monetdb5/extras/jaql/Tests/transform02.stable.err new file mode 100644 --- /dev/null +++ b/monetdb5/extras/jaql/Tests/transform02.stable.err @@ -0,0 +1,31 @@ +stderr of test 'transform02` in directory 'extras/jaql` itself: + + +# 17:33:19 > +# 17:33:19 > "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=30494" "--set" "monet_prompt=" "--trace" "--forcemito" "--set" "mal_listing=2" "--dbname=mTests_extras_jaql" "transform02.mal" +# 17:33:19 > + +# 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 = 30494 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbname = mTests_extras_jaql + +# 17:33:19 > +# 17:33:19 > "Done." +# 17:33:19 > + diff --git a/monetdb5/extras/jaql/Tests/transform02.stable.out b/monetdb5/extras/jaql/Tests/transform02.stable.out new file mode 100644 --- /dev/null +++ b/monetdb5/extras/jaql/Tests/transform02.stable.out @@ -0,0 +1,31 @@ +stdout of test 'transform02` in directory 'extras/jaql` itself: + + +# 17:33:19 > +# 17:33:19 > "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=30494" "--set" "monet_prompt=" "--trace" "--forcemito" "--set" "mal_listing=2" "--dbname=mTests_extras_jaql" "transform02.mal" +# 17:33:19 > + +# MonetDB 5 server v11.8.0 "jacqueline-480797554eb5" +# 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:30494/ +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded +# MonetDB/DataCell module not loaded: MALException:jaql.context:JAQL environment not found +function user.main():void; + jaql.x("[{\"a\":1,\"b\":3},{\"b\":2},{\"a\":4,\"b\":5}] -> transform {$.*};"); + jaql.x("[{\"b\":3},{\"a\":3.5,\"b\":2}] -> transform {$.*};"); + jaql.x("[{\"x\":{\"b\":3}},{\"x\":{\"a\":3.5,\"b\":2}}] -> transform {$.x.*};"); +end main; +[ { "a": 1, "b": 3 }, { "b": 2 }, { "a": 4, "b": 5 } ] +[ { "b": 3 }, { "a": 3.500000, "b": 2 } ] +[ { "b": 3 }, { "a": 3.500000, "b": 2 } ] + +# 17:33:19 > +# 17:33:19 > "Done." +# 17:33:19 > + diff --git a/monetdb5/extras/jaql/jaqlgencode.c b/monetdb5/extras/jaql/jaqlgencode.c --- a/monetdb5/extras/jaql/jaqlgencode.c +++ b/monetdb5/extras/jaql/jaqlgencode.c @@ -2841,6 +2841,60 @@ dumpvariabletransformation(MalBlkPtr mb, return a; } case j_pair: + if (t->sval == NULL) { + tree *w; + assert(t->tval1->type == j_var); + for (w = t; w->tval1->tval1 != NULL; w = w->tval1) + ; + assert(w->tval1->sval == NULL); + GDKfree(w->tval1); + w->tval1 = NULL; + + /* find all possible array member names */ + a = dumprefvar(mb, t->tval1, elems, j1, j5, j6, j7); + q = newInstruction(mb, ASSIGNsymbol); + setModuleId(q, algebraRef); + setFunctionId(q, semijoinRef); + q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + q = pushArgument(mb, q, *j1); + q = pushArgument(mb, q, a); + c = getArg(q, 0); + pushInstruction(mb, q); + q = newInstruction(mb, ASSIGNsymbol); + setModuleId(q, algebraRef); + setFunctionId(q, uselectRef); + q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + q = pushArgument(mb, q, c); + q = pushBte(mb, q, 'o'); + c = getArg(q, 0); + pushInstruction(mb, q); + q = newInstruction(mb, ASSIGNsymbol); + setModuleId(q, algebraRef); + setFunctionId(q, semijoinRef); + q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + q = pushArgument(mb, q, *j6); + q = pushArgument(mb, q, c); + c = getArg(q, 0); + pushInstruction(mb, q); + q = newInstruction(mb, ASSIGNsymbol); + setModuleId(q, batRef); + setFunctionId(q, reverseRef); + q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + q = pushArgument(mb, q, c); + c = getArg(q, 0); + pushInstruction(mb, q); + q = newInstruction(mb, ASSIGNsymbol); + setModuleId(q, algebraRef); + setFunctionId(q, joinRef); + q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); + q = pushArgument(mb, q, c); + q = pushArgument(mb, q, a); + a = getArg(q, 0); + pushInstruction(mb, q); + + return a; + } + b = dumpvariabletransformation(mb, t->tval1, elems, j1, j2, j3, j4, j5, j6, j7); /* only need to copy if tval1 is a var, otherwise we have a _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list