Changeset: 433cb0b7918e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=433cb0b7918e
Modified Files:
monetdb5/modules/kernel/arrays.mal
sql/backends/monet5/sql_gencode.c
Branch: arrays
Log Message:
MAL functiosn for subselection on non-dimensional columns + sbslect gets two
inputs if previous command had two outputs
diffs (52 lines):
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
@@ -18,6 +18,11 @@ address ALGdimensionThetasubselect1;
command algebra.thetasubselect(dim:ptr, dims:ptr, candDims:ptr,
candBat:bat[:oid,:oid], val:any, op:str) (:ptr, :bat[:oid,:oid])
address ALGdimensionThetasubselect2;
+#subselection in dimensions
+command algebra.subselect(vals:bat[:oid,:any], dims:ptr, low:any, high:any,
li:bit, hi:bit, anti:bit) (:ptr, :bat[:oid,:oid])
+address ALGnonDimensionSubselect1;
+command algebra.subselect(vals:bat[:oid,:oid], dims:ptr, candDims:ptr,
candBat:bat[:oid,:oid], low:any, high:any, li:bit, hi:bit, anti:bit) (:ptr,
:bat[:oid, :oid])
+address ALGnonDimensionSubselect2;
#command algebra.mbrsubselect(dims:ptr, dim:ptr, s:bat[:oid, :oid],
c:bat[:oid, :oid]) :bat[:oid,:oid]
#address ALGmbrsubselect;
@@ -33,6 +38,7 @@ address ALGdimensionThetasubselect2;
#command algebra.subselect(dims:ptr, valsBat:bat[:oid,:any], candDims:ptr,
candBat:bat[:oid,:oid], low:any, high:any, li:bit, hi:bit, anti:bit) (:ptr,
:bat[:oid, :oid])
#address ALGnonDimensionSubselect2;
+#Creates a BAT that contains all cells that satisfied a series of selections
on dimensions
command algebra.cellsProject(candDims:ptr, candBAT:bat[:oid,:oid])
:bat[:oid,:oid]
address ALGproject;
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
@@ -1446,17 +1446,18 @@ static int
case cmp_notequal: {
q = newStmt2(mb, algebraRef,
cmd);
- if(s->op1->type == st_dimension) { //selection over a
dimension, two outputs
- snprintf(nme,
SMALLBUFSIZ, "Y_%d", l);
- uval = findVariable(mb, nme);
+//NOT NEEDED if(s->op1->type == st_dimension) {
//selection over a dimension, two outputs
+ //check if the first argument
has two outputs (in such a case it is related to the array processing)
+ snprintf(nme, SMALLBUFSIZ,
"Y_%d", l);
+ uval = findVariable(mb, nme);
- assert(uval >=0);
-
+ if(uval >=0) {
+ //two outputs
setVarType(mb,
getArg(q, 0), TYPE_ptr);
setVarUDFtype(mb,
getArg(q, 0));
q = pushReturn(mb, q,
newTmpVariable(mb, newBatType(TYPE_oid, TYPE_oid)));
- q = pushArgument(mb, q,
l); //all the dimensions
- q = pushArgument(mb, q,
uval); //the current dimension
+ q = pushArgument(mb, q,
l); //the dimension or the non-dimension
+ q = pushArgument(mb, q,
uval); //all the dimensions
/*NOT NEEDED } else if(s->op1->type
== st_join && s->op1->op2->type == st_bat && isArray(s->op1->op2->op4.cval->t))
{ //seelctio over non-dimensional column of an array
setVarType(mb,
getArg(q, 0), TYPE_ptr);
setVarUDFtype(mb,
getArg(q, 0));
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list