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