Changeset: 6863d2830abc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6863d2830abc
Modified Files:
        gdk/ChangeLog
        gdk/gdk.h
        gdk/gdk_search.c
        monetdb5/modules/kernel/algebra.c
Branch: default
Log Message:

Cleanup: BUNtvar and BUNhvar macros no longer work for TYPE_void columns.


diffs (94 lines):

diff --git a/gdk/ChangeLog b/gdk/ChangeLog
--- a/gdk/ChangeLog
+++ b/gdk/ChangeLog
@@ -1,6 +1,9 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Wed Feb  4 2015 Sjoerd Mullender <[email protected]>
+- BUNtvar and BUNhvar macros no longer work for TYPE_void columns.
+
 * Mon Feb  2 2015 Sjoerd Mullender <[email protected]>
 - Changed interfaces of a lot of GDK-level functions.  When they modify a
   BAT, don't return the same BAT or NULL, but instead return GDK_SUCCEED
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1411,12 +1411,12 @@ typedef var_t stridx_t; /* TODO: should 
 
 #define BUNhloc(bi,p)  Hloc((bi).b,p)
 #define BUNtloc(bi,p)  Tloc((bi).b,p)
-#define BUNhpos(bi,p)  (Hpos(&(bi),p))
-#define BUNtpos(bi,p)  (Tpos(&(bi),p))
-#define BUNhvar(bi,p)  
((bi).b->htype?Hbase((bi).b)+BUNhvaroff(bi,p):BUNhpos(bi,p))
-#define BUNtvar(bi,p)  
((bi).b->ttype?Tbase((bi).b)+BUNtvaroff(bi,p):BUNtpos(bi,p))
-#define BUNhead(bi,p)  ((bi).b->hvarsized?BUNhvar(bi,p):BUNhloc(bi,p))
-#define BUNtail(bi,p)  ((bi).b->tvarsized?BUNtvar(bi,p):BUNtloc(bi,p))
+#define BUNhpos(bi,p)  Hpos(&(bi),p)
+#define BUNtpos(bi,p)  Tpos(&(bi),p)
+#define BUNhvar(bi,p)  (assert((bi).b->htype && (bi).b->hvarsized), 
Hbase((bi).b)+BUNhvaroff(bi,p))
+#define BUNtvar(bi,p)  (assert((bi).b->ttype && (bi).b->tvarsized), 
Tbase((bi).b)+BUNtvaroff(bi,p))
+#define BUNhead(bi,p)  
((bi).b->htype?(bi).b->hvarsized?BUNhvar(bi,p):BUNhloc(bi,p):BUNhpos(bi,p))
+#define BUNtail(bi,p)  
((bi).b->ttype?(bi).b->tvarsized?BUNtvar(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
 
 static inline BATiter
 bat_iterator(BAT *b)
diff --git a/gdk/gdk_search.c b/gdk/gdk_search.c
--- a/gdk/gdk_search.c
+++ b/gdk/gdk_search.c
@@ -602,7 +602,20 @@ SORTfndwhich(BAT *b, const void *v, enum
                cur = (BUN) (*(const oid *) v - b->tseqbase) + lo;
                return cur + (which == FIND_LAST);
        }
-
+       if (b->ttype == TYPE_void) {
+               assert(b->tseqbase == oid_nil);
+               switch (which) {
+               case FIND_FIRST:
+                       if (*(const oid *) v == oid_nil)
+                               return lo;
+               case FIND_LAST:
+                       return hi;
+               default:
+                       if (lo < hi && *(const oid *) v == oid_nil)
+                               return lo;
+                       return BUN_NONE;
+               }
+       }
        cmp = 1;
        cur = BUN_NONE;
        bi = bat_iterator(b);
diff --git a/monetdb5/modules/kernel/algebra.c 
b/monetdb5/modules/kernel/algebra.c
--- a/monetdb5/modules/kernel/algebra.c
+++ b/monetdb5/modules/kernel/algebra.c
@@ -171,22 +171,14 @@ CMDlike(BAT **ret, BAT *b, const char *s
        for (p = t; *p; p++, yy++)
                *p = tolower(*p);
 
-       if (b->hvarsized) {
-               BATloop(b, u, v)
-                       if (like(BUNtvar(bi, u), t, yy) &&
-                               BUNfastins(c, BUNhvar(bi, u), BUNtvar(bi, u)) 
== GDK_FAIL) {
-                               BBPreclaim(c);
-                               GDKfree(t);
-                               return GDK_FAIL;
-                       }
-       } else {
-               BATloop(b, u, v)
-                       if (like(BUNtvar(bi, u), t, yy) &&
-                               BUNfastins(c, BUNhloc(bi, u), BUNtvar(bi, u)) 
== GDK_FAIL) {
-                               BBPreclaim(c);
-                               GDKfree(t);
-                               return GDK_FAIL;
-                       }
+       BATloop(b, u, v) {
+               p = BUNtvar(bi, u);
+               if (like(p, t, yy) &&
+                       BUNfastins(c, BUNhead(bi, u), p) == GDK_FAIL) {
+                       BBPreclaim(c);
+                       GDKfree(t);
+                       return GDK_FAIL;
+               }
        }
        c->hsorted = BAThordered(b);
        c->hrevsorted = BAThrevordered(b);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to