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