Changeset: bcfff9312cdf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bcfff9312cdf
Modified Files:
monetdb5/extras/jaql/Tests/plan00.stable.out
monetdb5/extras/jaql/jaql.c
Branch: jacqueline
Log Message:
expand: transform unroll into an operation of its own
since expand unroll is very different from expand, make it a different
statement from expand, to ease code generation.
diffs (70 lines):
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
@@ -45,7 +45,7 @@ e as $ -> filter: ( ( $.mgr == true ) ||
[ {id:1, dept:1, income:12000},{id:2, dept:1, income:13000} ] as $ -> filter:
( $.dept == 1 ) => <result>
[ [3,65,8,72], [5,98,2,65] ] as arr -> expand: arr => <result>
[ {"name":"Jon Doe", "movie_ids":[3,65,8,72]}, {"name":"Jane
Dean","movie_ids":[5,98,2]} ] as $ -> expand: $.movie_ids => <result>
-[ {"name":"Jon Doe", "movie_ids":[3,65,8,72]}, {"name":"Jane
Dean","movie_ids":[5,98,2]} ] as $ -> expand: unroll $.movie_ids => <result>
+[ {"name":"Jon Doe", "movie_ids":[3,65,8,72]}, {"name":"Jane
Dean","movie_ids":[5,98,2]} ] as $ -> unroll: $.movie_ids => <result>
A as $ -> expand: $ as $ -> transform: ( $ * 2 )
A as $ -> expand: $.ids => <result>
[1,2,3] as $ -> transform: { "value": $ }
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
@@ -271,6 +271,16 @@ make_jaql_expand(tree *var, tree *expr)
res->next = expr->next;
expr->next = NULL;
}
+
+ if (expr->type == j_unroll) {
+ /* since unroll is quite different from expand, promote it as
+ * top operation, forgetting about the expand */
+ res->type = j_unroll;
+ res->tval2 = expr->tval1;
+ expr->tval1 = NULL;
+ freetree(expr);
+ return res;
+ }
res->tval2 = expr;
@@ -791,6 +801,20 @@ printtree(tree *t, int level, char op)
printtree(t->tval2, level + step, op);
}
break;
+ case j_unroll:
+ if (op) {
+ printf("j_unroll( ");
+ printtree(t->tval1, level + step, op);
+ printf(", ");
+ printtree(t->tval2, level + step, op);
+ printf(") ");
+ } else {
+ printf("as ");
+ printtree(t->tval1, level + step, op);
+ printf("-> expand unroll: ");
+ printtree(t->tval2, level + step, op);
+ }
+ break;
case j_sort:
if (op) {
printf("j_sort( ");
@@ -857,16 +881,6 @@ printtree(tree *t, int level, char op)
break;
}
break;
- case j_unroll:
- if (op) {
- printf("j_unroll( ");
- printtree(t->tval1, level + step, op);
- printf(") ");
- } else {
- printf("unroll ");
- printtree(t->tval1, level + step, op);
- }
- break;
case j_pred:
if (op) {
printf("j_pred( ");
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list