Changeset: 4c8f68e43348 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4c8f68e43348
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_aggr.c
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_bbp.c
gdk/gdk_group.c
gdk/gdk_hash.c
gdk/gdk_join.c
gdk/gdk_private.h
gdk/gdk_select.c
gdk/gdk_unique.c
Branch: default
Log Message:
Change interface of BATgetprop to return ValPtr, and export it.
diffs (truncated from 719 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -122,6 +122,7 @@ gdk_return BATextend(BAT *b, BUN newcap)
void BATfakeCommit(BAT *b);
gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps,
BUN n, bool asc, bool nilslast, bool distinct)
__attribute__((__warn_unused_result__));
restrict_t BATgetaccess(BAT *b);
+ValPtr BATgetprop(BAT *b, enum prop_t idx);
gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s,
BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__));
const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid
*maxp, BUN *ngrpp, struct canditer *ci, BUN *ncand);
gdk_return BATgroupavg(BAT **bnp, BAT **cntsp, BAT *b, BAT *g, BAT *e, BAT *s,
int tp, bool skip_nils, bool abort_on_error, int scale);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2124,6 +2124,7 @@ enum prop_t {
GDK_NUNIQUE, /* number of unique values */
GDK_UNIQUE_ESTIMATE, /* estimate of number of distinct values */
};
+gdk_export ValPtr BATgetprop(BAT *b, enum prop_t idx);
/*
* @- BAT relational operators
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -82,13 +82,13 @@ BATgroupaggrinit(BAT *b, BAT *g, BAT *e,
ngrp = 1;
} else if (e == NULL) {
/* we need to find out the min and max of g */
- PROPrec *prop;
+ const ValRecord *prop;
prop = BATgetprop(g, GDK_MAX_VALUE);
if (prop) {
- assert(prop->v.vtype == TYPE_oid);
+ assert(prop->vtype == TYPE_oid);
min = 0; /* just assume it starts at 0 */
- max = prop->v.val.oval;
+ max = prop->val.oval;
} else {
min = oid_nil; /* note that oid_nil > 0! (unsigned) */
max = 0;
@@ -3541,7 +3541,7 @@ BATgroupmin(BAT *b, BAT *g, BAT *e, BAT
void *
BATmin_skipnil(BAT *b, void *aggr, bit skipnil)
{
- PROPrec *prop;
+ const ValRecord *prop;
const void *res;
size_t s;
BATiter bi;
@@ -3558,7 +3558,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
if (BATcount(b) == 0) {
res = ATOMnilptr(b->ttype);
} else if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL) {
- res = VALptr(&prop->v);
+ res = VALptr(prop);
} else {
oid pos;
BAT *pb = NULL;
@@ -3655,7 +3655,7 @@ BATgroupmax(BAT *b, BAT *g, BAT *e, BAT
void *
BATmax_skipnil(BAT *b, void *aggr, bit skipnil)
{
- PROPrec *prop;
+ const ValRecord *prop;
const void *res;
size_t s;
BATiter bi;
@@ -3670,7 +3670,7 @@ BATmax_skipnil(BAT *b, void *aggr, bit s
if (BATcount(b) == 0) {
res = ATOMnilptr(b->ttype);
} else if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) {
- res = VALptr(&prop->v);
+ res = VALptr(prop);
} else {
oid pos;
BAT *pb = NULL;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1101,7 +1101,7 @@ setcolprops(BAT *b, const void *x)
}
return;
} else if (ATOMlinear(b->ttype)) {
- PROPrec *prop;
+ const ValRecord *prop;
bi = bat_iterator(b);
pos = BUNlast(b);
@@ -1132,7 +1132,7 @@ setcolprops(BAT *b, const void *x)
}
} else if (!isnil &&
(prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL &&
- ATOMcmp(b->ttype, VALptr(&prop->v), x) < 0) {
+ ATOMcmp(b->ttype, VALptr(prop), x) < 0) {
BATsetprop(b, GDK_MAX_VALUE, b->ttype, x);
BATsetprop(b, GDK_MAX_POS, TYPE_oid,
&(oid){BATcount(b)});
}
@@ -1148,7 +1148,7 @@ setcolprops(BAT *b, const void *x)
* smallest non-nil so far */
if (!b->tnonil && !isnil &&
(prop = BATgetprop(b, GDK_MIN_VALUE)) !=
NULL &&
- ATOMcmp(b->ttype, VALptr(&prop->v), x) > 0)
{
+ ATOMcmp(b->ttype, VALptr(prop), x) > 0) {
BATsetprop(b, GDK_MIN_VALUE, b->ttype,
x);
BATsetprop(b, GDK_MIN_POS, TYPE_oid,
&(oid){BATcount(b)});
}
@@ -1159,7 +1159,7 @@ setcolprops(BAT *b, const void *x)
}
} else if (!isnil &&
(prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL &&
- ATOMcmp(b->ttype, VALptr(&prop->v), x) > 0) {
+ ATOMcmp(b->ttype, VALptr(prop), x) > 0) {
BATsetprop(b, GDK_MIN_VALUE, b->ttype, x);
BATsetprop(b, GDK_MIN_POS, TYPE_oid,
&(oid){BATcount(b)});
}
@@ -1274,7 +1274,7 @@ BUNdelete(BAT *b, oid o)
BUN p;
BATiter bi = bat_iterator(b);
const void *val;
- PROPrec *prop;
+ const ValRecord *prop;
assert(!is_oid_nil(b->hseqbase) || BATcount(b) == 0);
if (o < b->hseqbase || o >= b->hseqbase + BATcount(b)) {
@@ -1292,12 +1292,12 @@ BUNdelete(BAT *b, oid o)
if (ATOMlinear(b->ttype) &&
ATOMcmp(b->ttype, ATOMnilptr(b->ttype), val) != 0) {
if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL
- && ATOMcmp(b->ttype, VALptr(&prop->v), val) >= 0) {
+ && ATOMcmp(b->ttype, VALptr(prop), val) >= 0) {
BATrmprop(b, GDK_MAX_VALUE);
BATrmprop(b, GDK_MAX_POS);
}
if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL
- && ATOMcmp(b->ttype, VALptr(&prop->v), val) <= 0) {
+ && ATOMcmp(b->ttype, VALptr(prop), val) <= 0) {
BATrmprop(b, GDK_MIN_VALUE);
BATrmprop(b, GDK_MIN_POS);
}
@@ -1397,17 +1397,17 @@ BUNinplacemulti(BAT *b, const oid *posit
}
HASHdelete(b, p, val); /* first delete old value from hash */
if (b->ttype != TYPE_void && ATOMlinear(b->ttype)) {
- PROPrec *prop;
+ const ValRecord *prop;
if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) {
if (ATOMcmp(b->ttype, t, ATOMnilptr(b->ttype))
!= 0 &&
- ATOMcmp(b->ttype, VALptr(&prop->v), t) < 0)
{
+ ATOMcmp(b->ttype, VALptr(prop), t) < 0) {
/* new value is larger than previous
* largest */
BATsetprop(b, GDK_MAX_VALUE, b->ttype,
t);
BATsetprop(b, GDK_MAX_POS, TYPE_oid,
&(oid){p});
} else if (ATOMcmp(b->ttype, t, val) != 0 &&
- ATOMcmp(b->ttype, VALptr(&prop->v),
val) == 0) {
+ ATOMcmp(b->ttype, VALptr(prop), val)
== 0) {
/* old value is equal to largest and
* new value is smaller (see above),
* so we don't know anymore which is
@@ -1418,13 +1418,13 @@ BUNinplacemulti(BAT *b, const oid *posit
}
if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL) {
if (ATOMcmp(b->ttype, t, ATOMnilptr(b->ttype))
!= 0 &&
- ATOMcmp(b->ttype, VALptr(&prop->v), t) > 0)
{
+ ATOMcmp(b->ttype, VALptr(prop), t) > 0) {
/* new value is smaller than previous
* smallest */
BATsetprop(b, GDK_MIN_VALUE, b->ttype,
t);
BATsetprop(b, GDK_MIN_POS, TYPE_oid,
&(oid){p});
} else if (ATOMcmp(b->ttype, t, val) != 0 &&
- ATOMcmp(b->ttype, VALptr(&prop->v),
val) <= 0) {
+ ATOMcmp(b->ttype, VALptr(prop), val)
<= 0) {
/* old value is equal to smallest and
* new value is larger (see above), so
* we don't know anymore which is the
@@ -2516,29 +2516,29 @@ BATassertProps(BAT *b)
}
PROPDEBUG { /* only do a scan if property checking is requested */
- PROPrec *prop;
+ const ValRecord *prop;
const void *maxval = NULL;
const void *minval = NULL;
bool seenmax = false, seenmin = false;
bool seennil = false;
if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL)
- maxval = VALptr(&prop->v);
+ maxval = VALptr(prop);
if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL)
- minval = VALptr(&prop->v);
+ minval = VALptr(prop);
if ((prop = BATgetprop(b, GDK_MAX_POS)) != NULL) {
if (maxval) {
- assert(prop->v.vtype == TYPE_oid);
- assert(prop->v.val.oval < b->batCount);
- valp = BUNtail(bi, prop->v.val.oval);
+ assert(prop->vtype == TYPE_oid);
+ assert(prop->val.oval < b->batCount);
+ valp = BUNtail(bi, prop->val.oval);
assert(cmpf(maxval, valp) == 0);
}
}
if ((prop = BATgetprop(b, GDK_MIN_POS)) != NULL) {
if (minval) {
- assert(prop->v.vtype == TYPE_oid);
- assert(prop->v.val.oval < b->batCount);
- valp = BUNtail(bi, prop->v.val.oval);
+ assert(prop->vtype == TYPE_oid);
+ assert(prop->val.oval < b->batCount);
+ valp = BUNtail(bi, prop->val.oval);
assert(cmpf(minval, valp) == 0);
}
}
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -704,7 +704,7 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool
struct canditer ci;
BUN cnt;
BUN r;
- PROPrec *prop = NULL, *nprop;
+ const ValRecord *prop = NULL, *nprop;
oid hseq = n->hseqbase;
char buf[64];
lng t0 = 0;
@@ -754,11 +754,11 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool
OIDXdestroy(b);
if (BATcount(b) == 0 || (prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) {
if ((nprop = BATgetprop(n, GDK_MAX_VALUE)) != NULL) {
- if (BATcount(b) == 0 || ATOMcmp(b->ttype,
VALptr(&prop->v), VALptr(&nprop->v)) < 0) {
+ if (BATcount(b) == 0 || ATOMcmp(b->ttype, VALptr(prop),
VALptr(nprop)) < 0) {
if (s == NULL) {
- BATsetprop(b, GDK_MAX_VALUE, b->ttype,
VALptr(&nprop->v));
+ BATsetprop(b, GDK_MAX_VALUE, b->ttype,
VALptr(nprop));
if ((nprop = BATgetprop(n,
GDK_MAX_POS)) != NULL)
- BATsetprop(b, GDK_MAX_POS,
TYPE_oid, &(oid){nprop->v.val.oval + BATcount(b)});
+ BATsetprop(b, GDK_MAX_POS,
TYPE_oid, &(oid){nprop->val.oval + BATcount(b)});
else
BATrmprop(b, GDK_MAX_POS);
} else {
@@ -773,11 +773,11 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool
}
if (BATcount(b) == 0 || (prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL) {
if ((nprop = BATgetprop(n, GDK_MIN_VALUE)) != NULL) {
- if (BATcount(b) == 0 || ATOMcmp(b->ttype,
VALptr(&prop->v), VALptr(&nprop->v)) > 0) {
+ if (BATcount(b) == 0 || ATOMcmp(b->ttype, VALptr(prop),
VALptr(nprop)) > 0) {
if (s == NULL) {
- BATsetprop(b, GDK_MIN_VALUE, b->ttype,
VALptr(&nprop->v));
+ BATsetprop(b, GDK_MIN_VALUE, b->ttype,
VALptr(nprop));
if ((nprop = BATgetprop(n,
GDK_MIN_POS)) != NULL)
- BATsetprop(b, GDK_MIN_POS,
TYPE_oid, &(oid){nprop->v.val.oval + BATcount(b)});
+ BATsetprop(b, GDK_MIN_POS,
TYPE_oid, &(oid){nprop->val.oval + BATcount(b)});
else
BATrmprop(b, GDK_MIN_POS);
} else {
@@ -1135,8 +1135,8 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
b->tkey = false;
b->tnokey[0] = b->tnokey[1] = 0;
- const PROPrec *maxprop = BATgetprop(b, GDK_MAX_VALUE);
- const PROPrec *minprop = BATgetprop(b, GDK_MIN_VALUE);
+ const ValRecord *maxprop = BATgetprop(b, GDK_MAX_VALUE);
+ const ValRecord *minprop = BATgetprop(b, GDK_MIN_VALUE);
int (*atomcmp)(const void *, const void *) = ATOMcompare(b->ttype);
const void *nil = ATOMnilptr(b->ttype);
oid hseqend = b->hseqbase + BATcount(b);
@@ -1175,12 +1175,12 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
b->tnil |= isnil;
if (maxprop) {
if (!isnil &&
- atomcmp(VALptr(&maxprop->v), new) < 0) {
+ atomcmp(VALptr(maxprop), new) < 0) {
/* new value is larger than
* previous largest */
maxprop = BATsetprop(b, GDK_MAX_VALUE,
b->ttype, new);
BATsetprop(b, GDK_MAX_POS, TYPE_oid,
&(oid){updid});
- } else if (atomcmp(VALptr(&maxprop->v), old) ==
0 &&
+ } else if (atomcmp(VALptr(maxprop), old) == 0 &&
atomcmp(new, old) != 0) {
/* old value is equal to
* largest and new value is
@@ -1194,12 +1194,12 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool
}
if (minprop) {
if (!isnil &&
- atomcmp(VALptr(&minprop->v), new) > 0) {
+ atomcmp(VALptr(minprop), new) > 0) {
/* new value is smaller than
* previous smallest */
minprop = BATsetprop(b, GDK_MIN_VALUE,
b->ttype, new);
BATsetprop(b, GDK_MIN_POS, TYPE_oid,
&(oid){updid});
- } else if (atomcmp(VALptr(&minprop->v), old) ==
0 &&
+ } else if (atomcmp(VALptr(minprop), old) == 0 &&
atomcmp(new, old) != 0) {
/* old value is equal to
* smallest and new value is
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list