Changeset: ce5824462568 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce5824462568
Modified Files:
monetdb5/extras/jaql/Tests/plan00.mal
monetdb5/extras/jaql/Tests/plan00.stable.out
monetdb5/extras/jaql/jaql.c
Branch: jacqueline
Log Message:
transform: optimise away "transform $"
It is easy to detect this useless transformation, and saves a lot of
work, so transform this statement into a noop.
diffs (49 lines):
diff --git a/monetdb5/extras/jaql/Tests/plan00.mal
b/monetdb5/extras/jaql/Tests/plan00.mal
--- a/monetdb5/extras/jaql/Tests/plan00.mal
+++ b/monetdb5/extras/jaql/Tests/plan00.mal
@@ -11,6 +11,7 @@ jaql.x("plan A -> expand -> transform $
jaql.x("plan A -> expand $.ids;");
jaql.x("plan [1,2,3] -> transform {\"value\":$};");
+jaql.x("plan [1,2,3] -> transform $;");
jaql.x("plan [1,2,3] -> transform $ * 2;");
jaql.x("plan [1,2,3] -> transform 2 * $;");
jaql.x("plan [1,2,3] -> transform 2 * 2;");
diff --git a/monetdb5/extras/jaql/Tests/plan00.stable.out
b/monetdb5/extras/jaql/Tests/plan00.stable.out
--- a/monetdb5/extras/jaql/Tests/plan00.stable.out
+++ b/monetdb5/extras/jaql/Tests/plan00.stable.out
@@ -28,6 +28,7 @@ function user.main():void;
jaql.x("plan A -> expand -> transform $ * 2;");
jaql.x("plan A -> expand $.ids;");
jaql.x("plan [1,2,3] -> transform {\"value\":$};");
+ jaql.x("plan [1,2,3] -> transform $;");
jaql.x("plan [1,2,3] -> transform $ * 2;");
jaql.x("plan [1,2,3] -> transform 2 * $;");
jaql.x("plan [1,2,3] -> transform 2 * 2;");
@@ -46,6 +47,7 @@ e as $ -> filter: ( $.mgr == true || $.i
A as $ -> expand: $ as $ -> transform: ( $ * 2 )
A as $ -> expand: $.ids => <result>
[1,2,3] as $ -> transform: { "value": $ }
+[1,2,3] => <result>
[1,2,3] as $ -> transform: ( $ * 2 )
[1,2,3] as $ -> transform: ( $ * 2 )
[1,2,3] as $ -> transform: 4
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
@@ -177,7 +177,14 @@ make_jaql_transform(tree *var, tree *tmp
if ((res = _check_exp_var(var->sval, tmpl)) != NULL) {
freetree(var);
freetree(tmpl);
- return(res);
+ return res;
+ }
+
+ if (tmpl->type == j_var && tmpl->tval1 == NULL) {
+ /* simple variable, hence not performing any change, so null-op
*/
+ freetree(var);
+ freetree(tmpl);
+ return NULL;
}
res = GDKzalloc(sizeof(tree));
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list