Changeset: 5f30127aeefe for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5f30127aeefe
Modified Files:
gdk/gdk_select.c
Branch: default
Log Message:
Some layout, and use candidate intersection instead of binary search.
diffs (84 lines):
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1431,8 +1431,8 @@ BATselect(BAT *b, BAT *s, const void *tl
!(b->tsorted || b->trevsorted) &&
(!s || (s && BATtdense(s))) &&
(BATcheckorderidx(b) ||
- (VIEWtparent(b) && BATcheckorderidx(BBPquickdesc(VIEWtparent(b),
0)))))
- {
+ (VIEWtparent(b) &&
+ BATcheckorderidx(BBPquickdesc(VIEWtparent(b), 0))))) {
BAT *view = NULL;
if (VIEWtparent(b) && !BATcheckorderidx(b)) {
view = b;
@@ -1441,8 +1441,7 @@ BATselect(BAT *b, BAT *s, const void *tl
/* Is query selective enough to use the ordered index ? */
/* TODO: Test if this heuristic works in practice */
/*if ((ORDERfnd(b, th) - ORDERfnd(b, tl)) < ((BUN)1000 <
b->batCount/1000 ? (BUN)1000: b->batCount/1000))*/
- if ((ORDERfnd(b, th) - ORDERfnd(b, tl)) < b->batCount/3)
- {
+ if ((ORDERfnd(b, th) - ORDERfnd(b, tl)) < b->batCount/3) {
use_orderidx = 1;
if (view) {
vwl = view->hseqbase;
@@ -1627,47 +1626,28 @@ BATselect(BAT *b, BAT *s, const void *tl
rbn = (oid *) Tloc((bn), 0);
- if (s && !BATtdense(s)) {
- const oid *rcand = (const oid *)
Tloc((s), 0);
- assert("should not use orderidx with
non dense cand list, too expensive");
-
- for (i = low; i < high; i++) {
- if (vwl <= ((*rs)&BUN_UNMSK) &&
((*rs)&BUN_UNMSK) < vwh) {
- if
(binsearchcand(rcand, 0, s->batCount, ((*rs)&BUN_UNMSK))) {
- *rbn++ =
((*rs)&BUN_UNMSK);
- cnt++;
- }
- }
- rs++;
+ for (i = low; i < high; i++) {
+ if (vwl <= ((*rs)&BUN_UNMSK) &&
((*rs)&BUN_UNMSK) < vwh) {
+ *rbn++ = ((*rs)&BUN_UNMSK);
+ cnt++;
}
- BATsetcount(bn, cnt);
-
- } else {
- if (s) {
- assert(BATtdense(s));
- if (vwl < s->tseqbase)
- vwl = s->tseqbase;
- if (s->tseqbase + BATcount(s) <
vwh)
- vwh = s->tseqbase +
BATcount(s);
- }
- for (i = low; i < high; i++) {
- if (vwl <= ((*rs)&BUN_UNMSK) &&
((*rs)&BUN_UNMSK) < vwh) {
- *rbn++ =
((*rs)&BUN_UNMSK);
- cnt++;
- }
- rs++;
- }
- BATsetcount(bn, cnt);
+ rs++;
}
+ BATsetcount(bn, cnt);
/* output must be sorted */
- GDKqsort((oid *) Tloc(bn, 0), NULL, NULL,
(size_t) bn->batCount, sizeof(oid), 0, TYPE_oid);
+ GDKqsort(Tloc(bn, 0), NULL, NULL, (size_t)
bn->batCount, sizeof(oid), 0, TYPE_oid);
bn->tsorted = 1;
bn->trevsorted = bn->batCount <= 1;
bn->tkey = 1;
bn->tseqbase = (bn->tdense = bn->batCount <= 1)
!= 0 ? 0 : oid_nil;
bn->tnil = 0;
bn->tnonil = 1;
+ if (s) {
+ s = BATintersectcand(bn, s);
+ BBPunfix(bn->batCacheid);
+ bn = s;
+ }
} else {
/* match: [low..high) */
if (s) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list