Changeset: 359ca4de22c6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=359ca4de22c6
Modified Files:
        gdk/gdk_bat.c
        gdk/gdk_join.c
        gdk/gdk_select.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
Branch: arrays
Log Message:

fixed some bugs


diffs (112 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2156,7 +2156,9 @@ BATsetcount(BAT *b, BUN cnt)
                b->hsorted = b->hrevsorted = ATOMlinear(b->htype) != 0;
                b->tsorted = b->trevsorted = ATOMlinear(b->ttype) != 0;
        }
-       assert(b->batCapacity >= cnt);
+       if(b->batCapacity < cnt) {
+               GDKerror("BATsetcount: batCapacity < batCount");
+       }
 }
 
 size_t
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3724,7 +3724,7 @@ BATmbrproject(BAT *b, BAT *oidsToProject
                }
                }
        }
-       BATsetcount(resBAT,BATcount(b));
+       BATsetcount(resBAT,BATcount(oidsToProjectBAT));
     BATseqbase(resBAT,0);
     BATderiveProps(resBAT,FALSE);
        return resBAT;
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1943,7 +1943,7 @@ BATdimensionSubselect(BAT *dimensionBAT,
        //add the oids in the result
        for(j=0; j<groupRepeats; j++) {
                for(i=0; i<qualifyingElementsNum*elementRepeats; i++) {
-                       fprintf(stderr, "Added oid: %ld\n", element_oid);
+                       //fprintf(stderr, "Added oid: %ld\n", element_oid);
                        *res = element_oid;
                        res++;
                        element_oid++;
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -504,42 +504,45 @@ static int dimension_range(mvc *sql, sql
 
 
     if(!dim->unbounded_min && !dim->unbounded_max) {
-#define maxElement(min, step, elementsNum) \
+#define maxElement(min, max, step, elementsNum) \
        ({ \
-               min+(elementsNum-1)*step; \
+               /*make sure the upper bound is included*/ \
+               if(min+(*elementsNum-1)*step < max) \
+                       (*elementsNum)++; \
+               min+(*elementsNum-1)*step;\
     })
        switch(dim->type.type->localtype) {
         case TYPE_bte:
                        dim->elementsNum = floor((dim->max->data.val.btval - 
dim->min->data.val.btval )/ dim->step->data.val.btval)+1;
-            dim->max->data.val.btval = maxElement(dim->min->data.val.btval, 
dim->step->data.val.btval, dim->elementsNum);
+            dim->max->data.val.btval = maxElement(dim->min->data.val.btval, 
dim->max->data.val.btval, dim->step->data.val.btval, &dim->elementsNum);
             break;
         case TYPE_sht:
             dim->elementsNum = floor((dim->max->data.val.shval - 
dim->min->data.val.shval )/ dim->step->data.val.shval)+1;
-            dim->max->data.val.shval = maxElement(dim->min->data.val.shval, 
dim->step->data.val.shval, dim->elementsNum);
+            dim->max->data.val.shval = maxElement(dim->min->data.val.shval, 
dim->max->data.val.shval, dim->step->data.val.shval, &dim->elementsNum);
             break;
         case TYPE_int:
             dim->elementsNum = floor((dim->max->data.val.ival - 
dim->min->data.val.ival )/ dim->step->data.val.ival)+1;
-            dim->max->data.val.ival = maxElement(dim->min->data.val.ival, 
dim->step->data.val.ival, dim->elementsNum);
+            dim->max->data.val.ival = maxElement(dim->min->data.val.ival, 
dim->max->data.val.ival, dim->step->data.val.ival, &dim->elementsNum);
             break;
         case TYPE_wrd:
             dim->elementsNum = floor((dim->max->data.val.wval - 
dim->min->data.val.wval )/ dim->step->data.val.wval)+1;
-            dim->max->data.val.wval = maxElement(dim->min->data.val.wval, 
dim->step->data.val.wval, dim->elementsNum);
+            dim->max->data.val.wval = maxElement(dim->min->data.val.wval, 
dim->max->data.val.wval, dim->step->data.val.wval, &dim->elementsNum);
             break;
         case TYPE_oid:
             dim->elementsNum = floor((dim->max->data.val.oval - 
dim->min->data.val.oval )/ dim->step->data.val.oval)+1;
-            dim->max->data.val.oval = maxElement(dim->min->data.val.oval, 
dim->step->data.val.oval, dim->elementsNum);
+            dim->max->data.val.oval = maxElement(dim->min->data.val.oval, 
dim->max->data.val.oval, dim->step->data.val.oval, &dim->elementsNum);
             break;
         case TYPE_lng:
             dim->elementsNum = floor((dim->max->data.val.lval - 
dim->min->data.val.lval )/ dim->step->data.val.lval)+1;
-            dim->max->data.val.lval = maxElement(dim->min->data.val.lval, 
dim->step->data.val.lval, dim->elementsNum);
+            dim->max->data.val.lval = maxElement(dim->min->data.val.lval, 
dim->max->data.val.lval, dim->step->data.val.lval, &dim->elementsNum);
             break;
         case TYPE_dbl:
             dim->elementsNum = floor((dim->max->data.val.dval - 
dim->min->data.val.dval )/ dim->step->data.val.dval)+1;
-            dim->max->data.val.dval = maxElement(dim->min->data.val.dval, 
dim->step->data.val.dval, dim->elementsNum);
+            dim->max->data.val.dval = maxElement(dim->min->data.val.dval, 
dim->max->data.val.dval, dim->step->data.val.dval, &dim->elementsNum);
             break;
         case TYPE_flt:
             dim->elementsNum = floor((dim->max->data.val.fval - 
dim->min->data.val.fval )/ dim->step->data.val.fval)+1;
-            dim->max->data.val.fval = maxElement(dim->min->data.val.fval, 
dim->step->data.val.fval, dim->elementsNum);
+            dim->max->data.val.fval = maxElement(dim->min->data.val.fval, 
dim->max->data.val.fval, dim->step->data.val.fval, &dim->elementsNum);
             break;
         default:
             fprintf(stderr, "Dimension of unknown type");
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -5405,7 +5405,10 @@ rel_select_exp(mvc *sql, sql_rel *rel, S
                                        sql_exp *exp = whereExpNode->data;
                                        append(r->exps, exp);
                                }
-                       } else {
+                       }
+               } else {
+                       sql_table *t = (sql_table*)rel->l;
+                       if(t && isArray(t)) {
                                fprintf(stderr, "Array but not basetable\n");
                                return NULL;
                        }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to