Changeset: 4c9dfea79f79 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4c9dfea79f79
Modified Files:
        gdk/gdk_imprints.c
        gdk/gdk_private.h
        gdk/gdk_select.c
Branch: Jul2021
Log Message:

Better check before calling BATimprints.


diffs (85 lines):

diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -447,18 +447,7 @@ BATimprints(BAT *b)
        lng t0 = GDKusec();
 
        /* we only create imprints for types that look like types we know */
-       switch (ATOMbasetype(b->ttype)) {
-       case TYPE_bte:
-       case TYPE_sht:
-       case TYPE_int:
-       case TYPE_lng:
-#ifdef HAVE_HGE
-       case TYPE_hge:
-#endif
-       case TYPE_flt:
-       case TYPE_dbl:
-               break;
-       default:                /* type not supported */
+       if (!imprintable(b->ttype)) {
                /* doesn't look enough like base type: do nothing */
                GDKerror("unsupported type\n");
                return GDK_FAIL;
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -273,6 +273,25 @@ void VIEWdestroy(BAT *b)
 BAT *virtualize(BAT *bn)
        __attribute__((__visibility__("hidden")));
 
+static inline bool
+imprintable(int tpe)
+{
+       switch (ATOMbasetype(tpe)) {
+       case TYPE_bte:
+       case TYPE_sht:
+       case TYPE_int:
+       case TYPE_lng:
+#ifdef HAVE_HGE
+       case TYPE_hge:
+#endif
+       case TYPE_flt:
+       case TYPE_dbl:
+               return true;
+       default:                /* type not supported */
+               return false;
+       }
+}
+
 /* calculate the integer 2 logarithm (i.e. position of highest set
  * bit) of the argument (with a slight twist: 0 gives 0, 1 gives 1,
  * 0x8 to 0xF give 4, etc.) */
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1899,14 +1899,14 @@ BATselect(BAT *b, BAT *s, const void *tl
                 * iii) is not var-sized.
                 */
                tmp = NULL;
-               bool use_imprints = !equi &&
-                       !b->tvarsized &&
-                       (!b->batTransient ||
-                        (parent != 0 &&
-                         (tmp = BBP_cache(parent)) != NULL &&
-                         !tmp->batTransient));
                Imprints *imprints = NULL;
-               if (use_imprints && BATimprints(b) == GDK_SUCCEED) {
+               if (!equi &&
+                   imprintable(b->ttype) &&
+                   (!b->batTransient ||
+                    (parent != 0 &&
+                     (tmp = BBP_cache(parent)) != NULL &&
+                     !tmp->batTransient)) &&
+                   BATimprints(b) == GDK_SUCCEED) {
                        if (tmp != NULL) {
                                MT_lock_set(&tmp->batIdxLock);
                                imprints = tmp->timprints;
@@ -2252,6 +2252,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                cnt = BATcount(r1);
                assert(r2 == NULL || BATcount(r1) == BATcount(r2));
        } else if (!anti && !symmetric &&
+                  imprintable(l->ttype) &&
                   (BATcount(rl) > 2 ||
                    !l->batTransient ||
                    (VIEWtparent(l) != 0 &&
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to