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

Reply via email to