Changeset: f2f0c9f97f5b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f2f0c9f97f5b Modified Files: gdk/gdk_imprints.c gdk/gdk_select.c Branch: Oct2014 Log Message:
Check min/max before starting imprints scan.
diffs (76 lines):
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -568,7 +568,7 @@ BATimprints(BAT *b)
{
BAT *o = NULL;
Imprints *imprints;
- lng t0 =0,t1=0;
+ lng t0 = 0, t1 = 0;
assert(BAThdense(b)); /* assert void head */
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -341,6 +341,28 @@ do {
\
} \
} while (0)
+#define checkMINMAX(B)
\
+do {
\
+ int ii;
\
+ BUN *imp_cnt = (BUN *) (((oid *)imprints->stats)+128);
\
+ imp_min = imp_max = nil;
\
+ for (ii = 0; ii < B; ii++) {
\
+ if ((imp_min == nil) && (imp_cnt[ii])) {
\
+ imp_min = src[((oid *)imprints->stats)[ii]];
\
+ }
\
+ if ((imp_max == nil) && (imp_cnt[B-1-ii])) {
\
+ imp_max = src[(((oid *)imprints->stats)+64)[B-1-ii]];
\
+ }
\
+ }
\
+ assert((imp_min != nil) && (imp_max != nil));
\
+ if (!s && VIEWtparent(b)) { /* no candidate list and no views*/
\
+ if ((vl > imp_max || vh < imp_min) ||
\
+ (anti && (vl < imp_min && vh > imp_max))) {
\
+ return BUN_NONE;
\
+ }
\
+ }
\
+} while (0)
\
+
/* choose number of bits */
#define bitswitch(CAND,TEST) \
do { \
@@ -352,10 +374,10 @@ do {
\
s && BATtdense(s) ? "(dense)" : "", \
anti, #TEST); \
switch (imprints->bits) { \
- case 8: impsmask(CAND,TEST,8); break; \
- case 16: impsmask(CAND,TEST,16); break; \
- case 32: impsmask(CAND,TEST,32); break; \
- case 64: impsmask(CAND,TEST,64); break; \
+ case 8: checkMINMAX(8); impsmask(CAND,TEST,8); break;
\
+ case 16: checkMINMAX(16); impsmask(CAND,TEST,16); break;
\
+ case 32: checkMINMAX(32); impsmask(CAND,TEST,32); break;
\
+ case 64: checkMINMAX(64); impsmask(CAND,TEST,64); break;
\
default: assert(0); break; \
} \
} while (0)
@@ -450,11 +472,13 @@ NAME##_##TYPE (BAT *b, BAT *s, BAT *bn,
{ \
TYPE vl = *(const TYPE *) tl; \
TYPE vh = *(const TYPE *) th; \
- TYPE v; \
- TYPE nil = TYPE##_nil; \
+ TYPE imp_min;
\
+ TYPE imp_max;
\
+ TYPE v;
\
+ TYPE nil = TYPE##_nil;
\
TYPE minval = MINVALUE##TYPE; \
TYPE maxval = MAXVALUE##TYPE; \
- const TYPE *src = (const TYPE *) Tloc(b, 0); \
+ const TYPE *src = (const TYPE *) Tloc(b, 0); \
oid o; \
BUN w, p = r; \
BUN pr_off = 0; \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
