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 checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list