Changeset: c1296de1bef6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1296de1bef6
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: arrays
Log Message:

combine selections over dimensions and non-dimensions


diffs (88 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2850,9 +2850,19 @@ rel2bin_select( mvc *sql, sql_rel *rel, 
        while(pushDimensionSelections(&sel));
        if(sel->op1->type == st_join && sel->op1->op1->type == st_tid && 
                isArray(sel->op1->op1->op4.tval) && sel->op1->op2->type == 
st_bat) {
-       
-               sel = stmt_mbr(sql->sa, sel, sel->op1->op1);
-               //clearJoins(&(sel->op1));              
+
+               /*find where the selections over dimensions start*/
+               stmt *selDims = sel;
+               while(selDims && selDims->op1->type != st_dimension)
+                       selDims = selDims->op3; 
+               if(selDims)
+                       sel = stmt_mbr(sql->sa, sel, selDims, sel->op1->op1);
+               else
+                       sel = stmt_mbr(sql->sa, sel, sel->op1->op1, NULL);
+
+               /*We could split the selections in two groups those over 
non-dimensions and
+               * those over dimensions. Anyway, the two do not interact with 
each other
+               * but only through the MBR */ 
        }
        ////if it is an array we need to project the cells
        //sel = addCells(sql, sel);
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -2142,19 +2142,24 @@ static int
                        break;
                }
                case st_mbr: {
-                       int l, r;
+                       int l, r, m;
 
                        if ((l = _dumpstmt(sql, mb, s->op1)) < 0)
                return -1;
                        if ((r = _dumpstmt(sql, mb, s->op2)) < 0)
                 return -1;
+                       if(s->op3 && (m = _dumpstmt(sql, mb, s->op3)) < 0)
+                               return -1;
 
                        q = newStmt2(mb, algebraRef, "mbr");
-                       q = pushArgument(mb, q, l); //the dimsResult
-                       snprintf(nme, SMALLBUFSIZ, "Y_%d", l);
-            if((arraySecondVar = findVariable(mb, nme)) >= 0)
-                               q = pushArgument(mb, q, arraySecondVar); //the 
oids result
-                       q = pushArgument(mb, q, r); //the array
+                       q = pushArgument(mb, q, l); //the oids
+//                     snprintf(nme, SMALLBUFSIZ, "Y_%d", l);
+//            if((arraySecondVar = findVariable(mb, nme)) >= 0)
+//                             q = pushArgument(mb, q, arraySecondVar); //the 
oids result
+                       q = pushArgument(mb, q, r); //the array or the candDims
+                       if(s->op3)
+                               q = pushArgument(mb, q, m); //the array
+
                        
                        if (q == NULL)
                                return -1;
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1256,10 +1256,11 @@ stmt *stmt_left_join(sql_allocator *sa, 
        return s;
 }
 
-stmt *stmt_mbr(sql_allocator *sa, stmt *op1, stmt *op2) {
+stmt *stmt_mbr(sql_allocator *sa, stmt *op1, stmt *op2, stmt *op3) {
        stmt *s = stmt_create(sa, st_mbr);
     s->op1 = op1;
     s->op2 = op2;
+       s->op3 = op3;
 
        return s;
 }
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -245,7 +245,7 @@ extern stmt *stmt_aggr(sql_allocator *sa
 extern stmt *stmt_alias(sql_allocator *sa, stmt *op1, char *tname, char *name);
 
 extern stmt *stmt_materialise(sql_allocator *sa, stmt *selectStmt, stmt* 
joinStmt);
-extern stmt *stmt_mbr(sql_allocator *sa, stmt *op1, stmt *op2);
+extern stmt *stmt_mbr(sql_allocator *sa, stmt *op1, stmt *op2, stmt *op3);
 extern stmt *stmt_left_join(sql_allocator *sq, stmt *op1, stmt *op2);
 
 extern stmt *stmt_output(sql_allocator *sa, stmt *l);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to