Changeset: becb08c16790 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=becb08c16790
Modified Files:
        monetdb5/extras/jaql/Tests/transform00.mal
        monetdb5/extras/jaql/Tests/transform00.stable.out
        monetdb5/extras/jaql/jaqlgencode.c
Branch: jacqueline
Log Message:

transform: fix misc issues involving mixed int/dbl operations

we now properly upcast and keep the order of answers such that the final
output is in the same order as the input (as expected)


diffs (276 lines):

diff --git a/monetdb5/extras/jaql/Tests/transform00.mal 
b/monetdb5/extras/jaql/Tests/transform00.mal
--- a/monetdb5/extras/jaql/Tests/transform00.mal
+++ b/monetdb5/extras/jaql/Tests/transform00.mal
@@ -1,4 +1,5 @@
 jaql.x("[1,2,3] -> transform 2 * 2;");
-jaql.x("[{\"a\": 1}, {\"a\": 2}] -> transform $.a;");
-jaql.x("[1,2,3] -> transform 2 * $;");
-jaql.x("[{\"a\": 1}, {\"a\": 2}] -> transform $.a + $.a;");
+jaql.x("[{\"a\": 1}, {\"a\": 2.6}] -> transform $.a;");
+jaql.x("[1,2.2,3] -> transform 2 * $;");
+jaql.x("[{\"a\": 1}, {\"a\": 2.5}] -> transform $.a + $.a;");
+jaql.x("[{\"a\": 1, \"b\": 3.4}, {\"a\": 2.5, \"b\": 4}] -> transform $.a + 
$.b;");
diff --git a/monetdb5/extras/jaql/Tests/transform00.stable.out 
b/monetdb5/extras/jaql/Tests/transform00.stable.out
--- a/monetdb5/extras/jaql/Tests/transform00.stable.out
+++ b/monetdb5/extras/jaql/Tests/transform00.stable.out
@@ -18,14 +18,16 @@ stdout of test 'transform00` in director
 # MonetDB/DataCell module not loaded: MALException:jaql.context:JAQL 
environment not found
 function user.main():void;
     jaql.x("[1,2,3] -> transform 2 * 2;");
-    jaql.x("[{\"a\": 1}, {\"a\": 2}] -> transform $.a;");
-    jaql.x("[1,2,3] -> transform 2 * $;");
-    jaql.x("[{\"a\": 1}, {\"a\": 2}] -> transform $.a + $.a;");
+    jaql.x("[{\"a\": 1}, {\"a\": 2.6}] -> transform $.a;");
+    jaql.x("[1,2.2,3] -> transform 2 * $;");
+    jaql.x("[{\"a\": 1}, {\"a\": 2.5}] -> transform $.a + $.a;");
+    jaql.x("[{\"a\": 1, \"b\": 3.4}, {\"a\": 2.5, \"b\": 4}] -> transform $.a 
+ $.b;");
 end main;
 [ 4, 4, 4 ]
-[ 1, 2 ]
-[ 2, 4, 6 ]
-[ 2, 4 ]
+[ 1, 2.600000 ]
+[ 2, 4.400000, 6 ]
+[ 2, 5.000000 ]
+[ 4.400000, 6.500000 ]
 
 # 21:27:13 >  
 # 21:27:13 >  "Done."
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
@@ -670,7 +670,7 @@ dumpvariabletransformation(MalBlkPtr mb,
                }
                case j_operation: {
                        int r, s;
-                       int u, v, w;
+                       int u, v;
                        int h, i, j, k, l;
                        InstrPtr p;
                        switch (t->tval1->type) {
@@ -779,6 +779,13 @@ dumpvariabletransformation(MalBlkPtr mb,
                                q = pushArgument(mb, q, d);
                                s = 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, s);
+                               k = getArg(q, 0);
+                               pushInstruction(mb, q);
 
                                q = newInstruction(mb, ASSIGNsymbol);
                                setModuleId(q, algebraRef);
@@ -789,13 +796,6 @@ dumpvariabletransformation(MalBlkPtr mb,
                                u = 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, u);
-                               w = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
                                setModuleId(q, algebraRef);
                                setFunctionId(q, semijoinRef);
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
@@ -808,14 +808,14 @@ dumpvariabletransformation(MalBlkPtr mb,
                                setFunctionId(q, reverseRef);
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
                                q = pushArgument(mb, q, v);
-                               v = getArg(q, 0);
+                               l = v = 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, r);
+                               q = pushArgument(mb, q, s);
                                q = pushArgument(mb, q, v);
                                s = getArg(q, 0);
                                pushInstruction(mb, q);
@@ -876,7 +876,7 @@ dumpvariabletransformation(MalBlkPtr mb,
                        q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
                        q = pushArgument(mb, q, s);
                        q = pushArgument(mb, q, v);
-                       s = getArg(q, 0);
+                       h = getArg(q, 0);
                        pushInstruction(mb, q);
                        p = copyInstruction(q); /* reuse for dbl case below */
 
@@ -885,7 +885,7 @@ dumpvariabletransformation(MalBlkPtr mb,
                        setFunctionId(q, joinRef);
                        q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
                        q = pushArgument(mb, q, j);
-                       q = pushArgument(mb, q, s);
+                       q = pushArgument(mb, q, h);
                        h = getArg(q, 0);
                        pushInstruction(mb, q);
                        q = newInstruction(mb, ASSIGNsymbol);
@@ -917,11 +917,18 @@ dumpvariabletransformation(MalBlkPtr mb,
                                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, v);
+                               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, j);
-                               q = pushArgument(mb, q, v);
+                               q = pushArgument(mb, q, k);
+                               q = pushArgument(mb, q, c);
                                k = getArg(q, 0);
                                pushInstruction(mb, q);
                                q = newInstruction(mb, ASSIGNsymbol);
@@ -931,20 +938,13 @@ dumpvariabletransformation(MalBlkPtr mb,
                                q = pushArgument(mb, q, k);
                                k = getArg(q, 0);
                                pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, putName("kunion", 6));
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, s);
-                               q = pushArgument(mb, q, k);
-                               k = 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, d);
-                               q = pushArgument(mb, q, s);
+                               q = pushArgument(mb, q, k);
                                i = getArg(q, 0);
                                pushInstruction(mb, q);
                                q = newInstruction(mb, ASSIGNsymbol);
@@ -973,10 +973,26 @@ dumpvariabletransformation(MalBlkPtr mb,
 
                                q = newInstruction(mb, ASSIGNsymbol);
                                setModuleId(q, algebraRef);
+                               setFunctionId(q, putName("kunion", 6));
+                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
+                               q = pushArgument(mb, q, s);
+                               q = pushArgument(mb, q, k);
+                               k = 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, s);
+                               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, w);
-                               q = pushArgument(mb, q, s);
+                               q = pushArgument(mb, q, l);
+                               q = pushArgument(mb, q, c);
                                l = getArg(q, 0);
                                pushInstruction(mb, q);
                                q = newInstruction(mb, ASSIGNsymbol);
@@ -986,20 +1002,13 @@ dumpvariabletransformation(MalBlkPtr mb,
                                q = pushArgument(mb, q, l);
                                l = getArg(q, 0);
                                pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, putName("kunion", 6));
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, v);
-                               q = pushArgument(mb, q, l);
-                               l = 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, f);
-                               q = pushArgument(mb, q, u);
+                               q = pushArgument(mb, q, l);
                                i = getArg(q, 0);
                                pushInstruction(mb, q);
                                q = newInstruction(mb, ASSIGNsymbol);
@@ -1026,6 +1035,15 @@ dumpvariabletransformation(MalBlkPtr mb,
                                *j4 = getArg(q, 0);
                                pushInstruction(mb, q);
 
+                               q = newInstruction(mb, ASSIGNsymbol);
+                               setModuleId(q, algebraRef);
+                               setFunctionId(q, putName("kunion", 6));
+                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
+                               q = pushArgument(mb, q, v);
+                               q = pushArgument(mb, q, l);
+                               l = getArg(q, 0);
+                               pushInstruction(mb, q);
+
                                s = k;
                                v = l;
 
@@ -1040,7 +1058,7 @@ dumpvariabletransformation(MalBlkPtr mb,
                                setModuleId(q, algebraRef);
                                setFunctionId(q, joinRef);
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, r);
+                               q = pushArgument(mb, q, s);
                                q = pushArgument(mb, q, v);
                                s = getArg(q, 0);
                                pushInstruction(mb, q);
@@ -1051,21 +1069,35 @@ dumpvariabletransformation(MalBlkPtr mb,
                                q = pushArgument(mb, q, s);
                                v = getArg(q, 0);
                                pushInstruction(mb, q);
-
                                q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
+                               setModuleId(q, batRef);
+                               setFunctionId(q, mirrorRef);
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, e);
                                q = pushArgument(mb, q, s);
                                s = getArg(q, 0);
                                pushInstruction(mb, q);
                                q = newInstruction(mb, ASSIGNsymbol);
+                               setModuleId(q, batRef);
+                               setFunctionId(q, mirrorRef);
+                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
+                               q = pushArgument(mb, q, v);
+                               v = getArg(q, 0);
+                               pushInstruction(mb, q);
+
+                               q = newInstruction(mb, ASSIGNsymbol);
                                setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
+                               setFunctionId(q, joinRef);
                                q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
+                               q = pushArgument(mb, q, s);
+                               q = pushArgument(mb, q, e);
+                               s = 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, v);
                                q = pushArgument(mb, q, g);
-                               q = pushArgument(mb, q, v);
                                v = getArg(q, 0);
                                pushInstruction(mb, q);
                        } else {
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to