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

Reply via email to