Changeset: 8c91071e8de6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c91071e8de6
Modified Files:
gdk/gdk.h
gdk/gdk_align.c
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_bbp.c
gdk/gdk_calc.c
gdk/gdk_cross.c
gdk/gdk_firstn.c
gdk/gdk_group.c
gdk/gdk_join.c
gdk/gdk_project.c
gdk/gdk_sample.c
gdk/gdk_select.c
monetdb5/extras/rapi/converters.c.h
monetdb5/modules/kernel/algebra.c
monetdb5/modules/kernel/bat5.c
monetdb5/modules/kernel/microbenchmark.c
monetdb5/modules/mal/pcre.c
monetdb5/modules/mal/tablet.c
sql/backends/monet5/sql_fround_impl.h
sql/backends/monet5/sql_round_impl.h
Branch: default
Log Message:
Make it so that the tdense property is equivalent to tseqbase not being oid_nil.
diffs (truncated from 1098 to 300 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1478,14 +1478,15 @@ gdk_export void GDKqsort_rev(void *restr
do { \
assert(!is_oid_nil((b)->hseqbase)); \
(b)->batDirtydesc = 1; /* likely already set */ \
- /* the other head properties should already be correct */ \
+ assert(is_oid_nil((b)->tseqbase) || \
+ ATOMtype((b)->ttype) == TYPE_oid); \
if ((b)->ttype == TYPE_void) { \
if (is_oid_nil((b)->tseqbase)) { \
+ (b)->tdense = false; \
(b)->tnonil = (b)->batCount == 0; \
(b)->tnil = !(b)->tnonil; \
(b)->trevsorted = 1; \
(b)->tkey = (b)->batCount <= 1; \
- (b)->tdense = 0; \
} else { \
(b)->tdense = 1; \
(b)->tnonil = 1; \
@@ -1521,6 +1522,8 @@ gdk_export void GDKqsort_rev(void *restr
} \
(b)->tseqbase = sqbs; \
} \
+ } else if ((b)->ttype == TYPE_oid) { \
+ (b)->tdense = !is_oid_nil((b)->tseqbase); \
} \
if (!ATOMlinear((b)->ttype)) { \
(b)->tsorted = 0; \
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -169,7 +169,7 @@ BATmaterialize(BAT *b)
assert(cnt >= q - p);
ALGODEBUG fprintf(stderr, "#BATmaterialize(%d);\n", (int)
b->batCacheid);
- if (!BATtdense(b) || tt != TYPE_void) {
+ if (tt != TYPE_void) {
/* no voids */
return GDK_SUCCEED;
}
@@ -193,16 +193,19 @@ BATmaterialize(BAT *b)
b->batDirtydesc = TRUE;
b->theap.dirty = TRUE;
- /* set the correct dense info */
- b->tdense = TRUE;
-
/* So now generate [t..t+cnt-1] */
t = b->tseqbase;
x = (oid *) b->theap.base;
- for (; p < q; p++)
- *x++ = t++;
- cnt = t - b->tseqbase;
- BATsetcount(b, cnt);
+ if (is_oid_nil(t)) {
+ assert(!b->tdense);
+ while (p < q)
+ x[p++] = oid_nil;
+ } else {
+ assert(b->tdense);
+ while (p < q)
+ x[p++] = t++;
+ }
+ BATsetcount(b, b->batCount);
/* cleanup the old heaps */
HEAPfree(&tail, 0);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -93,7 +93,7 @@ BATcreatedesc(oid hseq, int tt, int heap
bn->tnil = FALSE;
bn->tsorted = bn->trevsorted = ATOMlinear(tt) != 0;
bn->tident = BATstring_t;
- bn->tseqbase = (tt == TYPE_void) ? oid_nil : 0;
+ bn->tseqbase = oid_nil;
bn->tprops = NULL;
bn->batRole = role;
@@ -377,6 +377,7 @@ BATattach(int tt, const char *heapfile,
bn->tnonil = cap == 0;
bn->tnil = 0;
bn->tdense = 0;
+ bn->tseqbase = oid_nil;
if (cap > 1) {
bn->tsorted = 0;
bn->trevsorted = 0;
@@ -540,7 +541,7 @@ BATclear(BAT *b, int force)
b->batInserted = 0;
BATsetcount(b,0);
BAThseqbase(b, 0);
- BATtseqbase(b, 0);
+ BATtseqbase(b, ATOMtype(b->ttype) == TYPE_oid ? 0 : oid_nil);
b->batDirty = TRUE;
BATsettrivprop(b);
b->tnosorted = b->tnorevsorted = 0;
@@ -797,20 +798,11 @@ COLcopy(BAT *b, int tt, int writable, in
}
/* set properties (note that types may have changed in the copy) */
if (ATOMtype(tt) == ATOMtype(b->ttype)) {
- if (BATtvoid(b)) {
- /* b is either dense or has a void(nil) tail */
- if (bn->ttype != TYPE_void)
- bn->tdense = TRUE;
- else if (is_oid_nil(b->tseqbase))
- bn->tnonil = FALSE;
+ if (ATOMtype(tt) == TYPE_oid) {
BATtseqbase(bn, b->tseqbase);
- } else if (bn->ttype != TYPE_void) {
- /* b is not dense, so set bn not dense */
- bn->tdense = FALSE;
+ } else {
BATtseqbase(bn, oid_nil);
- bn->tnonil = b->tnonil;
- } else if (BATtkey(b))
- BATtseqbase(bn, 0);
+ }
BATkey(bn, BATtkey(b));
bn->tsorted = BATtordered(b);
bn->trevsorted = BATtrevordered(b);
@@ -823,15 +815,18 @@ COLcopy(BAT *b, int tt, int writable, in
bn->tnokey[0] = bn->tnokey[1] = 0;
}
bn->tnosorted = b->tnosorted;
+ bn->tnonil = b->tnonil;
+ bn->tnil = b->tnil;
} else if (ATOMstorage(tt) == ATOMstorage(b->ttype) &&
ATOMcompare(tt) == ATOMcompare(b->ttype)) {
BUN h = BUNlast(b);
bn->tsorted = b->tsorted;
bn->trevsorted = b->trevsorted;
- bn->tdense = b->tdense && ATOMtype(bn->ttype) == TYPE_oid;
+ bn->tdense = false;
if (b->tkey)
BATkey(bn, true);
bn->tnonil = b->tnonil;
+ bn->tnil = b->tnil;
if (b->tnosorted > 0 && b->tnosorted < h)
bn->tnosorted = b->tnosorted;
else
@@ -850,7 +845,7 @@ COLcopy(BAT *b, int tt, int writable, in
}
} else {
bn->tsorted = bn->trevsorted = 0; /* set based on count later */
- bn->tdense = bn->tnonil = 0;
+ bn->tdense = bn->tnonil = bn->tnil = false;
bn->tnosorted = bn->tnorevsorted = 0;
bn->tnokey[0] = bn->tnokey[1] = 0;
}
@@ -931,6 +926,7 @@ setcolprops(BAT *b, const void *x)
if (x) {
b->tseqbase = * (const oid *) x;
}
+ b->tdense = !is_oid_nil(b->tseqbase);
b->tnil = is_oid_nil(b->tseqbase);
b->tnonil = !b->tnil;
} else {
@@ -991,7 +987,9 @@ setcolprops(BAT *b, const void *x)
b->tnorevsorted = pos;
}
if (b->tdense && (cmp >= 0 || * (const oid *) prv + 1 != *
(const oid *) x)) {
+ assert(b->ttype == TYPE_oid);
b->tdense = 0;
+ b->tseqbase = oid_nil;
}
if (isnil) {
b->tnonil = 0;
@@ -1187,12 +1185,15 @@ BUNinplace(BAT *b, BUN p, const void *t,
if (prv != BUN_NONE &&
1 + * (oid *) BUNtloc(bi, prv) != * (oid *) t) {
b->tdense = FALSE;
+ b->tseqbase = oid_nil;
} else if (nxt != BUN_NONE &&
* (oid *) BUNtloc(bi, nxt) != 1 + * (oid *)
t) {
b->tdense = FALSE;
+ b->tseqbase = oid_nil;
} else if (prv == BUN_NONE &&
nxt == BUN_NONE) {
b->tseqbase = * (oid *) t;
+ b->tdense = !is_oid_nil(b->tseqbase);
}
}
} else if (b->tnosorted >= p)
@@ -1445,9 +1446,10 @@ BATkey(BAT *b, bool flag)
if (b->tkey != flag)
b->batDirtydesc = TRUE;
b->tkey = flag;
- if (!flag)
+ if (!flag) {
b->tdense = 0;
- else
+ b->tseqbase = oid_nil;
+ } else
b->tnokey[0] = b->tnokey[1] = 0;
if (flag && VIEWtparent(b)) {
/* if a view is key, then so is the parent if the two
@@ -1480,29 +1482,26 @@ BAThseqbase(BAT *b, oid o)
void
BATtseqbase(BAT *b, oid o)
{
+ assert(o <= oid_nil);
if (b == NULL)
return;
- assert(o <= oid_nil);
assert(is_oid_nil(o) || o + BATcount(b) <= GDK_oid_max);
assert(b->batCacheid > 0);
+ if (b->tseqbase != o) {
+ b->batDirtydesc = true;
+ }
if (ATOMtype(b->ttype) == TYPE_oid) {
- if (b->tseqbase != o) {
- b->batDirtydesc = TRUE;
- }
b->tseqbase = o;
- if (is_oid_nil(o)) {
- b->tdense = 0;
- } else if (b->ttype == TYPE_void) {
- b->tdense = 1;
- }
+ b->tdense = !is_oid_nil(o);
/* adapt keyness */
if (BATtvoid(b)) {
+ b->tsorted = true;
if (is_oid_nil(o)) {
b->tkey = b->batCount <= 1;
b->tnonil = b->batCount == 0;
b->tnil = b->batCount > 0;
- b->tsorted = b->trevsorted = 1;
+ b->trevsorted = true;
b->tnosorted = b->tnorevsorted = 0;
if (!b->tkey) {
b->tnokey[0] = 0;
@@ -1517,12 +1516,15 @@ BATtseqbase(BAT *b, oid o)
}
b->tnonil = 1;
b->tnil = 0;
- b->tsorted = 1;
b->trevsorted = b->batCount <= 1;
if (!b->trevsorted)
b->tnorevsorted = 1;
}
}
+ } else {
+ assert(o == oid_nil);
+ b->tseqbase = oid_nil;
+ b->tdense = false;
}
}
@@ -2053,6 +2055,10 @@ BATassertProps(BAT *b)
assert(* (oid *) BUNtail(bi, 0) == b->tseqbase);
}
}
+ /* dense checks */
+ assert(!b->tdense || ATOMtype(b->ttype) == TYPE_oid);
+ assert(b->tdense == !is_oid_nil(b->tseqbase));
+ assert(!b->tdense || b->tsorted);
/* a column cannot both have and not have NILs */
assert(!b->tnil || !b->tnonil);
if (b->ttype == TYPE_void) {
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -645,18 +645,22 @@ BATappend(BAT *b, BAT *n, BAT *s, bit fo
b->tsorted = n->tsorted;
b->trevsorted = n->trevsorted;
- b->tdense = n->tdense && cand == NULL;
+ b->tdense = false;
+ b->tseqbase = oid_nil;
b->tnonil = n->tnonil;
b->tnil = n->tnil && cnt == BATcount(n);
b->tseqbase = oid_nil;
if (cand == NULL) {
b->tnosorted = start <= n->tnosorted && n->tnosorted <
end ? n->tnosorted - start : 0;
b->tnorevsorted = start <= n->tnorevsorted &&
n->tnorevsorted < end ? n->tnorevsorted - start : 0;
- if (n->tdense && n->ttype == TYPE_oid)
+ if (n->tdense && n->ttype == TYPE_oid) {
b->tseqbase = *(oid *) BUNtail(ni, start);
- else if (n->ttype == TYPE_void &&
- !is_oid_nil(n->tseqbase))
+ b->tdense = true;
+ } else if (n->ttype == TYPE_void &&
+ !is_oid_nil(n->tseqbase)) {
b->tseqbase = n->tseqbase + start;
+ b->tdense = true;
+ }
} else {
b->tnosorted = 0;
b->tnorevsorted = 0;
@@ -679,6 +683,7 @@ BATappend(BAT *b, BAT *n, BAT *s, bit fo
b->tnosorted = 0;
if (b->tdense) {
b->tdense = FALSE;
+ b->tseqbase = oid_nil;
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list