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