Changeset: 910cef737669 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=910cef737669
Modified Files:
sql/storage/bat/bat_storage.c
Branch: properties
Log Message:
Look for deltas min/max/null values for statistics
diffs (115 lines):
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1305,10 +1305,20 @@ nonil_col(sql_trans *tr, sql_column *col
col = col->po;
if (col && col->data) {
- BAT *b = bind_col(tr, col, QUICK);
-
- if (b)
+ BAT *b = bind_col(tr, col, QUICK), *c;
+
+ if (b) {
nonil = b->tnonil && !b->tnil; /* check deltas as well
*/
+
+ if ((c = bind_col(tr, col, RD_INS))) {
+ nonil &= c->tnonil && !c->tnil;
+ BBPunfix(c->batCacheid);
+ }
+ if ((c = bind_col(tr, col, RD_UPD_VAL))) {
+ nonil &= c->tnonil && !c->tnil;
+ BBPunfix(c->batCacheid);
+ }
+ }
}
return nonil;
}
@@ -1326,11 +1336,38 @@ col_min_value(sql_trans *tr, sql_column
col = col->po;
if (col && col->data) {
- BAT *b = bind_col(tr, col, QUICK);
- PROPrec *prop = NULL;
-
- if (b && (prop = BATgetprop(b, GDK_MIN_VALUE)))
- res = &(prop->v);
+ BAT *b = bind_col(tr, col, QUICK), *c;
+ PROPrec *prop1 = NULL, *prop2 = NULL;
+
+ if (b && (prop1 = BATgetprop(b, GDK_MIN_VALUE))) {
+ ValRecord cp;
+ res = &(prop1->v);
+
+ if ((c = bind_col(tr, col, RD_INS))) {
+ if ((prop2 = BATgetprop(c, GDK_MIN_VALUE))) {
+ if (VARcalcgt(&cp, res, &(prop2->v)) !=
GDK_SUCCEED) {
+ BBPunfix(c->batCacheid);
+ return NULL;
+ }
+ res = cp.val.btval == 1 ? &(prop2->v) :
res;
+ } else if (BATcount(c) > 0) {
+ res = NULL;
+ }
+ BBPunfix(c->batCacheid);
+ }
+ if (res && (c = bind_col(tr, col, RD_UPD_VAL))) {
+ if ((prop2 = BATgetprop(c, GDK_MIN_VALUE))) {
+ if (VARcalcgt(&cp, res, &(prop2->v)) !=
GDK_SUCCEED) {
+ BBPunfix(c->batCacheid);
+ return NULL;
+ }
+ res = cp.val.btval == 1 ? &(prop2->v) :
res;
+ } else if (BATcount(c) > 0) {
+ res = NULL;
+ }
+ BBPunfix(c->batCacheid);
+ }
+ }
}
return res;
}
@@ -1348,11 +1385,38 @@ col_max_value(sql_trans *tr, sql_column
col = col->po;
if (col && col->data) {
- BAT *b = bind_col(tr, col, QUICK);
- PROPrec *prop = NULL;
-
- if (b && (prop = BATgetprop(b, GDK_MAX_VALUE)))
- res = &(prop->v);
+ BAT *b = bind_col(tr, col, QUICK), *c;
+ PROPrec *prop1 = NULL, *prop2 = NULL;
+
+ if (b && (prop1 = BATgetprop(b, GDK_MAX_VALUE))) {
+ ValRecord cp;
+ res = &(prop1->v);
+
+ if ((c = bind_col(tr, col, RD_INS))) {
+ if ((prop2 = BATgetprop(c, GDK_MAX_VALUE))) {
+ if (VARcalclt(&cp, res, &(prop2->v)) !=
GDK_SUCCEED) {
+ BBPunfix(c->batCacheid);
+ return NULL;
+ }
+ res = cp.val.btval == 1 ? &(prop2->v) :
res;
+ } else if (BATcount(c) > 0) {
+ res = NULL;
+ }
+ BBPunfix(c->batCacheid);
+ }
+ if (res && (c = bind_col(tr, col, RD_UPD_VAL))) {
+ if ((prop2 = BATgetprop(c, GDK_MAX_VALUE))) {
+ if (VARcalclt(&cp, res, &(prop2->v)) !=
GDK_SUCCEED) {
+ BBPunfix(c->batCacheid);
+ return NULL;
+ }
+ res = cp.val.btval == 1 ? &(prop2->v) :
res;
+ } else if (BATcount(c) > 0) {
+ res = NULL;
+ }
+ BBPunfix(c->batCacheid);
+ }
+ }
}
return res;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list