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

fixed a small bug, point selection on dimensions work


diffs (119 lines):

diff --git a/gdk/gdk_arrays.c b/gdk/gdk_arrays.c
--- a/gdk/gdk_arrays.c
+++ b/gdk/gdk_arrays.c
@@ -80,7 +80,7 @@ static dim_node* findNode(gdk_cells *cel
        return n;
 }
 
-static gdk_return freeDimension(gdk_dimension *dim) {
+gdk_return freeDimension(gdk_dimension *dim) {
        GDKfree(dim->min);
        GDKfree(dim->max);
        GDKfree(dim->step);
diff --git a/gdk/gdk_arrays.h b/gdk/gdk_arrays.h
--- a/gdk/gdk_arrays.h
+++ b/gdk/gdk_arrays.h
@@ -193,6 +193,7 @@ do {\
     })
 
 
+gdk_export gdk_return freeDimension(gdk_dimension *dim);
 BUN dimension_void_replace_bat(BAT *resBAT, BAT *oidsBAT, BAT *dimensionBAT, 
bit force);
 
 //BAT* projectDimension(sql_dimension *oidsDim, sql_dimension *valuesDim);
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
@@ -17,7 +17,7 @@ static gdk_cells* sizesToDimensions(gdk_
        gdk_cells *resDims = cells_new();
        int i=0;
        
-       for(i=1; i<array->dimsNum; i++) {
+       for(i=0; i<array->dimsNum; i++) {
                gdk_dimension *dim = createDimension_oid(i, array->dimSizes[i], 
0, array->dimSizes[i]-1, 1);
                resDims = cells_add_dimension(resDims, dim);
        }
@@ -58,10 +58,10 @@ static gdk_cells* mergeCandidateDimensio
 }
 
 static BUN oidToIdx(oid oidVal, int currentDimNum, BUN skipCells, gdk_array 
*dims) {
-       if(currentDimNum == dims->dimsNum)
+       if(currentDimNum == dims->dimsNum-1)
                return oidVal%skipCells;
        else {
-               if(currentDimNum == 1)
+               if(currentDimNum == 0)
                        return oidToIdx(oidVal, currentDimNum+1, 
skipCells*dims->dimSizes[currentDimNum], dims);
                return oidToIdx(oidVal, currentDimNum+1, 
skipCells*dims->dimSizes[currentDimNum], dims)%skipCells;
        }
@@ -79,7 +79,7 @@ static BUN qualifyingOIDs(int dimNum, in
        for(n=oidDims->h; n && n->data->dimNum<dimNum; n = n->next);
        oidsDim = n->data;
 
-       if(dimNum == oidDims->dimsNum) {
+       if(dimNum == oidDims->dimsNum-1) { //last dimension
                qOIDS = GDKmalloc(sizeof(oid)*oidsDim->elementsNum);
                for(io=*(oid*)oidsDim->min, sz=0; io<=*(oid*)oidsDim->max; 
io+=*(oid*)oidsDim->step, sz++) {
                        qOIDS[sz] = skipSize*io;
@@ -89,7 +89,7 @@ fprintf(stderr, "%u = %u\n", (unsigned i
        } else {
                oid *resOIDs_local = NULL;
                BUN addedEls = qualifyingOIDs(dimNum+1, 
skipSize*oidsDim->initialElementsNum, oidDims, &resOIDs_local);
-               if(dimNum == 1)
+               if(dimNum == 0)
                        qOIDS = *resOIDs;
                else
                        qOIDS = 
GDKmalloc(sizeof(oid)*oidsDim->elementsNum*addedEls);
@@ -120,7 +120,7 @@ do { \
 \
        BATloop(candsBAT, p, q) { \
        oid qOid = *(oid *) BUNtail(candsIter, p); \
-               BUN idx = oidToIdx(qOid, 1, 1, array); \
+               BUN idx = oidToIdx(qOid, 0, 1, array); \
                *vals++ = min +idx*step; \
 fprintf(stderr, "%d - %d - %d\n", (int)qOid, (int)idx, (int)vals[-1]); \
     } \
@@ -170,6 +170,9 @@ str ALGdimensionLeftfetchjoin(bat *resul
        BATseqbase(resBAT, 0);
     *result = resBAT->batCacheid;
     BBPkeepref(*result);
+
+       //free the space occupied by the dimension
+       freeDimension(dimension);
     return MAL_SUCCEED;
 
 }
@@ -245,7 +248,7 @@ str ALGdimensionSubselect2(ptr *dimsRes,
                //find the idx of the value
                oid qualifyingOID = equalIdx(dimension, low); 
                //the dimension comes from the original this the elemenst and 
initial elements num is the same
-               gdk_dimension *resDimension = createDimension_oid(1, 
dimension->initialElementsNum, qualifyingOID, qualifyingOID, 1); //step cannot 
be 0 or infinite loop
+               gdk_dimension *resDimension = 
createDimension_oid(dimension->dimNum, dimension->initialElementsNum, 
qualifyingOID, qualifyingOID, 1); //step cannot be 0 or infinite loop
                
                //merge the dimension in the candidates with the result of this 
operation
                dimensionsResult = 
mergeCandidateDimensions(dimensionsCandidates, resDimension);                
@@ -349,7 +352,7 @@ fprintf(stderr, "size = %u\n", (unsigned
        if(!(resBAT = BATnew(TYPE_void, TYPE_oid, resSize, TRANSIENT)))
                throw(MAL, "algebra.cellsProject", "Problem allocating new 
array");
        resOIDs = (oid*)Tloc(resBAT, BUNfirst(resBAT));
-       resSize = qualifyingOIDs(1, 1, candidatesDimensions, &resOIDs);
+       resSize = qualifyingOIDs(0, 1, candidatesDimensions, &resOIDs);
        BATsetcount(resBAT, resSize);
        BATseqbase(resBAT, 0);
     *result = resBAT->batCacheid;
diff --git a/sql/backends/monet5/sql_arrays.c b/sql/backends/monet5/sql_arrays.c
--- a/sql/backends/monet5/sql_arrays.c
+++ b/sql/backends/monet5/sql_arrays.c
@@ -561,10 +561,9 @@ str mvc_get_dimension(Client cntxt, MalB
        if (dim == NULL)
                throw(SQL, "sql.get_dimension", "unable to find %s.%s(%s)", 
*sname, *tname, *dname);
 
-       cells->dimsNum = t->dimensions.set->cnt+1; //dimensions start from 1
+       cells->dimsNum = t->dimensions.set->cnt;
        cells->dimSizes = GDKmalloc(sizeof(BUN)*cells->dimsNum);
-       cells->dimSizes[0] = 0;
-       for(i=1, n=t->dimensions.set->h; n; n=n->next, i++) {
+       for(i=0, n=t->dimensions.set->h; n; n=n->next, i++) {
                sql_dimension *dim_sql = (sql_dimension*)n->data;
                gdk_dimension *dim_gdk = generaliseDimension(dim_sql);
        
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to