Changeset: 8f671cadccdd for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8f671cadccdd Modified Files: gdk/gdk_group.c Branch: Feb2013 Log Message:
keep track of sortedness of the group IDs we issue
diffs (189 lines):
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -109,9 +109,13 @@
assert(hs->link[hb] == BUN_NONE \
|| hs->link[hb] < hb); \
if (w[p] == w[hb]) { \
- ngrps[p - r] = ngrps[hb - r]; \
+ oid grp = ngrps[hb - r]; \
+ ngrps[p - r] = grp; \
if (histo) \
- cnts[ngrps[hb - r]]++; \
+ cnts[grp]++; \
+ if (gn->tsorted && \
+ grp != ngrp - 1) \
+ gn->tsorted = 0; \
break; \
} \
} \
@@ -126,9 +130,13 @@
hb = hs->link[hb]) { \
if (grps[hb - r] == grps[p - r] && \
w[p] == w[hb]) { \
- ngrps[p - r] = ngrps[hb - r]; \
+ oid grp = ngrps[hb - r]; \
+ ngrps[p - r] = grp; \
if (histo) \
- cnts[ngrps[hb - r]]++; \
+ cnts[grp]++; \
+ if (gn->tsorted && \
+ grp != ngrp - 1) \
+ gn->tsorted = 0; \
break; \
} \
} \
@@ -138,9 +146,13 @@
hb != BUN_NONE; \
hb = hs->link[hb]) { \
if (w[p] == w[hb]) { \
- ngrps[p - r] = ngrps[hb - r]; \
+ oid grp = ngrps[hb - r]; \
+ ngrps[p - r] = grp; \
if (histo) \
- cnts[ngrps[hb - r]]++; \
+ cnts[grp]++; \
+ if (gn->tsorted && \
+ grp != ngrp - 1) \
+ gn->tsorted = 0; \
break; \
} \
} \
@@ -414,7 +426,8 @@ BATgroup_internal(BAT **groups, BAT **ex
ngrps[p - r] = grp;
if (histo)
cnts[grp]++;
- if (grp != ngrp - 1)
+ if (gn->tsorted &&
+ grp != ngrp - 1)
gn->tsorted = 0;
break;
}
@@ -449,6 +462,7 @@ BATgroup_internal(BAT **groups, BAT **ex
h ? BATgetId(h) : "NULL", h ? BATcount(h) : 0,
subsorted, gc ? " (g clustered)" : "");
hs = b->T->hash;
+ gn->tsorted = 1; /* be optimistic */
for (r = BUNfirst(b), p = r, q = r + BATcount(b); p < q; p++) {
v = BUNtail(bi, p);
/* this loop is similar, but not equal, to
@@ -474,9 +488,13 @@ BATgroup_internal(BAT **groups, BAT **ex
assert(hs->link[hb] == BUN_NONE
|| hs->link[hb] < hb);
if (cmp(v, BUNtail(bi, hb)) == 0) {
- ngrps[p - r] = ngrps[hb - r];
+ oid grp = ngrps[hb - r];
+ ngrps[p - r] = grp;
if (histo)
- cnts[ngrps[hb - r]]++;
+ cnts[grp]++;
+ if (gn->tsorted &&
+ grp != ngrp - 1)
+ gn->tsorted = 0;
break;
}
}
@@ -488,9 +506,13 @@ BATgroup_internal(BAT **groups, BAT **ex
hb = hs->link[hb]) {
if (grps[hb - r] == grps[p - r] &&
cmp(v, BUNtail(bi, hb)) == 0) {
- ngrps[p - r] = ngrps[hb - r];
+ oid grp = ngrps[hb - r];
+ ngrps[p - r] = grp;
if (histo)
- cnts[ngrps[hb - r]]++;
+ cnts[grp]++;
+ if (gn->tsorted &&
+ grp != ngrp - 1)
+ gn->tsorted = 0;
break;
}
}
@@ -499,9 +521,13 @@ BATgroup_internal(BAT **groups, BAT **ex
hb != BUN_NONE;
hb = hs->link[hb]) {
if (cmp(v, BUNtail(bi, hb)) == 0) {
- ngrps[p - r] = ngrps[hb - r];
+ oid grp = ngrps[hb - r];
+ ngrps[p - r] = grp;
if (histo)
- cnts[ngrps[hb - r]]++;
+ cnts[grp]++;
+ if (gn->tsorted &&
+ grp != ngrp - 1)
+ gn->tsorted = 0;
break;
}
}
@@ -510,7 +536,6 @@ BATgroup_internal(BAT **groups, BAT **ex
GRPnotfound();
}
}
- gn->tsorted = BATcount(gn) <= 1;
} else {
bit gc = g && (g->tsorted || g->trevsorted);
const char *nme;
@@ -565,6 +590,7 @@ BATgroup_internal(BAT **groups, BAT **ex
goto error;
}
+ gn->tsorted = 1; /* be optimistic */
switch (ATOMstorage(hs->type)) {
case TYPE_bte:
GRPhashloop(bte);
@@ -595,9 +621,13 @@ BATgroup_internal(BAT **groups, BAT **ex
assert(hs->link[hb] == BUN_NONE
|| hs->link[hb] < hb);
if (cmp(v, BUNtail(bi, hb)) ==
0) {
- ngrps[p - r] = ngrps[hb
- r];
+ oid grp = ngrps[hb - r];
+ ngrps[p - r] = grp;
if (histo)
- cnts[ngrps[hb -
r]]++;
+ cnts[grp]++;
+ if (gn->tsorted &&
+ grp != ngrp - 1)
+ gn->tsorted = 0;
break;
}
}
@@ -612,9 +642,13 @@ BATgroup_internal(BAT **groups, BAT **ex
hb = hs->link[hb]) {
if (grps[hb - r] == grps[p - r]
&&
cmp(v, BUNtail(bi, hb)) ==
0) {
- ngrps[p - r] = ngrps[hb
- r];
+ oid grp = ngrps[hb - r];
+ ngrps[p - r] = grp;
if (histo)
- cnts[ngrps[hb -
r]]++;
+ cnts[grp]++;
+ if (gn->tsorted &&
+ grp != ngrp - 1)
+ gn->tsorted = 0;
break;
}
}
@@ -624,9 +658,13 @@ BATgroup_internal(BAT **groups, BAT **ex
hb != BUN_NONE;
hb = hs->link[hb]) {
if (cmp(v, BUNtail(bi, hb)) ==
0) {
- ngrps[p - r] = ngrps[hb
- r];
+ oid grp = ngrps[hb - r];
+ ngrps[p - r] = grp;
if (histo)
- cnts[ngrps[hb -
r]]++;
+ cnts[grp]++;
+ if (gn->tsorted &&
+ grp != ngrp - 1)
+ gn->tsorted = 0;
break;
}
}
@@ -646,7 +684,6 @@ BATgroup_internal(BAT **groups, BAT **ex
GDKfree(hp);
GDKfree(hs);
GDKfree(ext);
- gn->tsorted = BATcount(gn) <= 1;
}
if (extents) {
BATsetcount(en, (BUN) ngrp);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list
