Changeset: 65a69b965194 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=65a69b965194
Modified Files:
        monetdb5/modules/kernel/arrays.c
        monetdb5/modules/kernel/arrays.h
        monetdb5/modules/kernel/arrays.mal
        sql/backends/monet5/sql_gencode.c
Branch: arrays
Log Message:

mal plan generated correclty when selecting on a non-dimensional column and 
projecting the mbr of the qualifying cells
the C implementation of the functions are still missing


diffs (105 lines):

diff --git a/monetdb5/modules/kernel/arrays.c b/monetdb5/modules/kernel/arrays.c
--- a/monetdb5/modules/kernel/arrays.c
+++ b/monetdb5/modules/kernel/arrays.c
@@ -265,6 +265,24 @@ str ALGdimensionLeftfetchjoin1(bat *resu
 
 }
 
+str ALGdimensionLeftfetchjoin2(bat *result, const ptr *candDims, const ptr 
*dims, const ptr *dim) {
+       (void)*result;
+       (void)*candDims;
+       (void)*dims;
+       (void)*dim;
+       
+       return MAL_SUCCEED;
+}
+
+str ALGnonDimensionLeftfetchjoin(bat* result, const ptr* dimsCand, const bat 
*candBat, const bat *valsBat) {
+       (void)*result;
+       (void)*dimsCand;
+       (void)*candBat;
+       (void)*valsBat;
+
+       return MAL_SUCCEED;
+}
+
 static str emptyCandidateResults(ptr *candsRes_dims, bat* candsRes_bid) {
        BAT *candidatesBAT = NULL;
 
@@ -872,3 +890,8 @@ str ALGnonDimensionSubselect2(ptr *dimsR
        return MAL_SUCCEED;
 }
 
+str ALGnonDimensionSubselect1(ptr *dimsRes, bat* oidsRes, const bat* values,
+                        const void *low, const void *high, const bit *li, 
const bit *hi, const bit *anti) {
+       return ALGnonDimensionSubselect2(dimsRes, oidsRes, values, NULL, NULL, 
low, high, li, hi, anti);
+}
+
diff --git a/monetdb5/modules/kernel/arrays.h b/monetdb5/modules/kernel/arrays.h
--- a/monetdb5/modules/kernel/arrays.h
+++ b/monetdb5/modules/kernel/arrays.h
@@ -14,7 +14,8 @@
 
 algebra_export str ALGdimensionLeftfetchjoin1(bat* result, const bat* cands, 
const ptr *dims, const ptr *dim) ;
 algebra_export str ALGdimensionLeftfetchjoin2(bat* result, const ptr* 
dimsCand, const ptr *dims, const ptr *dim) ;
-algebra_export str ALGnonDimensionLeftfetchjoin(bat *result, const bat *lid, 
const bat *rid);
+algebra_export str ALGnonDimensionLeftfetchjoin(bat* result, const ptr* 
dimsCand, const bat *candBat, const bat *valsBat);
+//algebra_export str ALGnonDimensionLeftfetchjoin(bat *result, const bat *lid, 
const bat *rid);
 //algebra_export str ALGdimensionLeftfetchjoin(bat *result, const bat *lid, 
const bat *rid);
 
 algebra_export str ALGdimensionSubselect2(ptr *dimsRes, bat* oidsRes, const 
ptr *dims, const ptr* dim, const ptr *dimsCand, const bat* oidsCand,
@@ -27,6 +28,8 @@ algebra_export str ALGdimensionThetasubs
 
 algebra_export str ALGnonDimensionSubselect2(ptr *dimsRes, bat* oidsRes, const 
bat* values, const ptr *dimsCand, const bat* oidsCand, 
                             const void *low, const void *high, const bit *li, 
const bit *hi, const bit *anti);
+algebra_export str ALGnonDimensionSubselect1(ptr *dimsRes, bat* oidsRes, const 
bat* values, 
+                            const void *low, const void *high, const bit *li, 
const bit *hi, const bit *anti);
 
 algebra_export str ALGmbrsubselect(bat *result, const ptr *dims, const ptr* 
dim, const bat *sid, const bat *cid);
 algebra_export str ALGmbrsubselect2(bat *result, const ptr *dims, const ptr* 
dim, const bat *sid);
diff --git a/monetdb5/modules/kernel/arrays.mal 
b/monetdb5/modules/kernel/arrays.mal
--- a/monetdb5/modules/kernel/arrays.mal
+++ b/monetdb5/modules/kernel/arrays.mal
@@ -1,9 +1,13 @@
 #leftfetch join when having a dimension from an array
+#It gets the candidates and projects the dimensions
 command algebra.leftfetchjoin(candsBAT:bat[:oid,:oid], dims:ptr, dim:ptr ) 
:bat[:oid,:any]
 address ALGdimensionLeftfetchjoin1;
-#it is called after a selection on a non-dimensional column and is the mbr of 
the qualifying cells
+#it is called after a selection on a non-dimensional column when projecting a 
dimensional column and is the mbr of the qualifying cells
 command algebra.leftfetchjoin(dimsCand:ptr, dims:ptr, dim:ptr ) :bat[:oid,:any]
 address ALGdimensionLeftfetchjoin2;
+#it is called after a selection on a non-dimensional column when projecting a 
non-dimensional column and is the mbr of the qualifying cells
+command algebra.leftfetchjoin(dimsCand:ptr, candBat:bat[:oid,:oid], 
valsBat:bat[:oid,:any] ) :bat[:oid,:any]
+address ALGnonDimensionLeftfetchjoin;
 
 command algebra.mbrsubselect(b:bat[:oid,:any], s:bat[:oid, :oid], c:bat[:oid, 
:oid]) :bat[:oid,:oid]
 address ALGmbrsubselect;
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
@@ -1844,12 +1844,18 @@ static int
                                        q = newStmt1(mb, algebraRef, 
"leftfetchjoin");
                                else
                                        q = newStmt2(mb, algebraRef, 
leftjoinRef);
-//                             if(s->op2->type == st_bat) {
-//                                     sql_table *t = 
(sql_table*)s->op2->op4.cval->t;
-//                                     if(!isArray(t))
-//                                             q = pushArgument(mb, q, l);
-//                             } else
-                                       q = pushArgument(mb, q, l);
+                               q = pushArgument(mb, q, l);
+                               /*if the second argument is a BAT and the first 
has two variables then
+                               * it is a subselect on a non-dimensional column 
that produces an MBR */ 
+                               if(getVarType(mb, r) == TYPE_bat || 
getVarType(mb, r) == TYPE_any) {
+                                       char nme[SMALLBUFSIZ];
+                    int uval = -1;
+
+                    snprintf(nme, SMALLBUFSIZ, "Y_%d", l);
+                    uval = findVariable(mb, nme);
+                    if(uval >= 0)
+                                               q = pushArgument(mb, q, uval);
+                               }
                                q = pushArgument(mb, q, r);
                                if(s->op2->type == st_dimension) {
                                        char nme[SMALLBUFSIZ];
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to