Changeset: 8bcfb991548a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8bcfb991548a
Modified Files:
        clients/Tests/MAL-signatures_all.stable.out
        clients/Tests/MAL-signatures_all.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_logger.c
        gdk/gdk_logger.h
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/kernel/bat5.h
        monetdb5/modules/kernel/bat5.mal
        monetdb5/modules/kernel/logger.c
        monetdb5/modules/mal/Tests/inspect05.stable.out
        monetdb5/modules/mal/Tests/inspect05.stable.out.int128
        sql/backends/monet5/sql.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_storage.h
        sql/storage/bat/bat_table.c
        sql/test/leaks/Tests/check1_bam.stable.out.int128
Branch: default
Log Message:

Made some more code headless, ie BATreplace and logging of sql updates.


diffs (truncated from 1158 to 300 lines):

diff --git a/clients/Tests/MAL-signatures_all.stable.out 
b/clients/Tests/MAL-signatures_all.stable.out
--- a/clients/Tests/MAL-signatures_all.stable.out
+++ b/clients/Tests/MAL-signatures_all.stable.out
@@ -31330,11 +31330,11 @@ command bat.reuse(b:bat[:oid,:any_1],del
 address BKCreuseBAT;
 comment Shuffle the values around to restore a dense representation of buns.
 
-command 
bat.replace(b:bat[:oid,:any_1],src:bat[:oid,:any_1],force:bit):bat[:oid,:any_1] 
+command 
bat.replace(b:bat[:oid,:any_1],rid:bat[:oid,:oid],val:bat[:oid,:any_1],force:bit):bat[:oid,:any_1]
 
 address BKCbat_inplace_force;
 comment Perform replace for all BUNs of the second BAT into the first.
 
-command bat.replace(b:bat[:oid,:any_1],src:bat[:oid,:any_1]):bat[:oid,:any_1] 
+command 
bat.replace(b:bat[:oid,:any_1],rid:bat[:oid,:oid],val:bat[:oid,:any_1]):bat[:oid,:any_1]
 
 address BKCbat_inplace;
 comment Perform replace for all BUNs of the second BAT into the first.
 
diff --git a/clients/Tests/MAL-signatures_all.stable.out.int128 
b/clients/Tests/MAL-signatures_all.stable.out.int128
--- a/clients/Tests/MAL-signatures_all.stable.out.int128
+++ b/clients/Tests/MAL-signatures_all.stable.out.int128
@@ -40375,11 +40375,11 @@ command bat.reuse(b:bat[:oid,:any_1],del
 address BKCreuseBAT;
 comment Shuffle the values around to restore a dense representation of buns.
 
-command 
bat.replace(b:bat[:oid,:any_1],src:bat[:oid,:any_1],force:bit):bat[:oid,:any_1] 
+command 
bat.replace(b:bat[:oid,:any_1],rid:bat[:oid,:oid],val:bat[:oid,:any_1],force:bit):bat[:oid,:any_1]
 
 address BKCbat_inplace_force;
 comment Perform replace for all BUNs of the second BAT into the first.
 
-command bat.replace(b:bat[:oid,:any_1],src:bat[:oid,:any_1]):bat[:oid,:any_1] 
+command 
bat.replace(b:bat[:oid,:any_1],rid:bat[:oid,:oid],val:bat[:oid,:any_1]):bat[:oid,:any_1]
 
 address BKCbat_inplace;
 comment Perform replace for all BUNs of the second BAT into the first.
 
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -169,7 +169,7 @@ gdk_return BATprintf(stream *f, BAT *b);
 gdk_return BATprod(void *res, int tp, BAT *b, BAT *s, int skip_nils, int 
abort_on_error, int nil_if_empty);
 BAT *BATproject(BAT *l, BAT *r);
 BAT *BATrangejoin(BAT *l, BAT *rl, BAT *rh, bit li, bit hi);
-gdk_return BATreplace(BAT *b, BAT *n, bit force);
+gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force);
 gdk_return BATrevert(BAT *b);
 void BATroles(BAT *b, const char *hnme, const char *tnme);
 BAT *BATsample(BAT *b, BUN n);
@@ -417,7 +417,7 @@ int log_bat(logger *lg, BAT *b, const ch
 int log_bat_clear(logger *lg, const char *n);
 int log_bat_persists(logger *lg, BAT *b, const char *n);
 int log_bat_transient(logger *lg, const char *n);
-int log_delta(logger *lg, BAT *b, const char *n);
+int log_delta(logger *lg, BAT *uid, BAT *uval, const char *n);
 int log_sequence(logger *lg, int seq, lng id);
 int log_tend(logger *lg);
 int log_tstart(logger *lg);
@@ -486,7 +486,7 @@ int strNil(const char *s);
 int strToStr(str *dst, int *len, const char *src);
 const char str_nil[2];
 gdk_return void_inplace(BAT *b, oid id, const void *val, bit force);
-BUN void_replace_bat(BAT *b, BAT *u, bit force);
+BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force);
 int win_mkdir(const char *, const int mode);
 int win_rename(const char *, const char *);
 int win_rmdir(const char *);
@@ -859,8 +859,8 @@ str BKCappend_val_force_wrap(bat *r, con
 str BKCappend_val_wrap(bat *r, const bat *bid, const void *u);
 str BKCappend_wrap(bat *r, const bat *bid, const bat *uid);
 str BKCattach(bat *ret, const int *tt, const char *const *heapfile);
-str BKCbat_inplace(bat *r, const bat *bid, const bat *rid);
-str BKCbat_inplace_force(bat *r, const bat *bid, const bat *rid, const bit 
*force);
+str BKCbat_inplace(bat *r, const bat *bid, const bat *rid, const bat *uid);
+str BKCbat_inplace_force(bat *r, const bat *bid, const bat *rid, const bat 
*uid, const bit *force);
 str BKCbun_inplace(bat *r, const bat *bid, const oid *id, const void *t);
 str BKCbun_inplace_force(bat *r, const bat *bid, const oid *id, const void *t, 
const bit *force);
 char *BKCdelete(bat *r, const bat *bid, const oid *h);
@@ -2366,7 +2366,7 @@ int log_bat_clear_wrap(logger *L, str nm
 int log_bat_persists_wrap(logger *L, BAT *b, str nme);
 int log_bat_transient_wrap(logger *L, str nme);
 int log_bat_wrap(logger *L, BAT *b, str nme);
-int log_delta_wrap(logger *L, BAT *b, str nme);
+int log_delta_wrap(logger *L, BAT *uid, BAT *b, str nme);
 int log_tend_wrap(logger *L);
 int log_tstart_wrap(logger *L);
 int logger_add_bat_wrap(int *bid, logger *L, BAT *b, str nme);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1317,7 +1317,7 @@ gdk_export gdk_return BATdel(BAT *b, BAT
 
 gdk_export gdk_return BUNreplace(BAT *b, const void *left, const void *right, 
bit force);
 gdk_export gdk_return BUNinplace(BAT *b, BUN p, const void *left, const void 
*right, bit force);
-gdk_export gdk_return BATreplace(BAT *b, BAT *n, bit force);
+gdk_export gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force);
 
 gdk_export BUN BUNfnd(BAT *b, const void *right);
 
@@ -2496,7 +2496,7 @@ gdk_export int GDKsyserror(_In_z_ _Print
 #include "gdk_utils.h"
 
 /* functions defined in gdk_bat.c */
-gdk_export BUN void_replace_bat(BAT *b, BAT *u, bit force);
+gdk_export BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force);
 gdk_export gdk_return void_inplace(BAT *b, oid id, const void *val, bit force);
 gdk_export BAT *BATattach(int tt, const char *heapfile, int role);
 
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1675,15 +1675,16 @@ void_inplace(BAT *b, oid id, const void 
 }
 
 BUN
-void_replace_bat(BAT *b, BAT *u, bit force)
+void_replace_bat(BAT *b, BAT *p, BAT *u, bit force)
 {
        BUN nr = 0;
        BUN r, s;
-       BATiter ui = bat_iterator(u);
+       BATiter uii = bat_iterator(p);
+       BATiter uvi = bat_iterator(u);
 
        BATloop(u, r, s) {
-               oid updid = *(oid *) BUNhead(ui, r);
-               const void *val = BUNtail(ui, r);
+               oid updid = *(oid *) BUNtail(uii, r);
+               const void *val = BUNtail(uvi, r);
 
                if (void_inplace(b, updid, val, force) == GDK_FAIL)
                        return BUN_NONE;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -911,14 +911,12 @@ BATdel(BAT *b, BAT *n, bit force)
  */
 #define BUNreplace_force(a,b,c) BUNreplace(a,b,c,force)
 gdk_return
-BATreplace(BAT *b, BAT *n, bit force)
+BATreplace(BAT *b, BAT *p, BAT *n, bit force)
 {
-       if (b == NULL || n == NULL || BATcount(n) == 0) {
+       if (b == NULL || p == NULL || n == NULL || BATcount(n) == 0) {
                return GDK_SUCCEED;
        }
-       BATcompatible(b, n, GDK_FAIL, "BATreplace");
-       updateloop(b, n, BUNreplace_force);
-
+       void_replace_bat(b, p, n, force);
        return GDK_SUCCEED;
 }
 
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -313,7 +313,11 @@ log_read_updates(logger *lg, trans *tr, 
                        }
                }
        }
+       assert( (ht == TYPE_void && l->flag == LOG_INSERT) ||
+               (ht == TYPE_void && l->flag == LOG_DELETE) || 
+               ((ht == TYPE_oid || !ht) && l->flag == LOG_UPDATE) );
        if (ht >= 0 && tt >= 0) {
+               BAT *uid = NULL;
                BAT *r;
                void *(*rt) (ptr, stream *, size_t) = BATatoms[tt].atomRead;
                void *tv = ATOMnil(tt);
@@ -323,7 +327,13 @@ log_read_updates(logger *lg, trans *tr, 
                        rt = BATatoms[TYPE_int].atomRead;
 #endif
                assert(l->nr <= (lng) BUN_MAX);
-               r = BATnew(ht, tt, (BUN) l->nr, PERSISTENT);
+               if (l->flag == LOG_UPDATE) {
+                       uid = BATnew(TYPE_void, ht, (BUN) l->nr, PERSISTENT);
+                       r = BATnew(TYPE_void, tt, (BUN) l->nr, PERSISTENT);
+               } else {
+                       assert(ht == TYPE_void);
+                       r = BATnew(TYPE_void, tt, (BUN) l->nr, PERSISTENT);
+               }
 
                if (hseq)
                        BATseqbase(r, 0);
@@ -338,18 +348,37 @@ log_read_updates(logger *lg, trans *tr, 
                                        res = LOG_ERR;
                                        break;
                                }
-                               if (l->flag == LOG_INSERT) {
 #if SIZEOF_OID == 8
-                                       if (tt == TYPE_oid && lg->read32bitoid) 
{
-                                               int vi = * (int *) t;
-                                               if (vi == int_nil)
-                                                       * (oid *) t = oid_nil;
-                                               else
-                                                       * (oid *) t = vi;
-                                       }
+                               if (tt == TYPE_oid && lg->read32bitoid) {
+                                       int vi = * (int *) t;
+                                       if (vi == int_nil)
+                                               * (oid *) t = oid_nil;
+                                       else
+                                               * (oid *) t = vi;
+                               }
 #endif
-                                       BUNappend(r, t, TRUE);
+                               BUNappend(r, t, TRUE);
+                               if (t != tv)
+                                       GDKfree(t);
+                       }
+               } else if (ht == TYPE_void && l->flag == LOG_DELETE) {
+                       for (; l->nr > 0; l->nr--) {
+                               void *t = rt(tv, lg->log, 1);
+
+                               if (!t) {
+                                       res = LOG_ERR;
+                                       break;
                                }
+#if SIZEOF_OID == 8
+                               if (tt == TYPE_oid && lg->read32bitoid) {
+                                       int vi = * (int *) t;
+                                       if (vi == int_nil)
+                                               * (oid *) t = oid_nil;
+                                       else
+                                               * (oid *) t = vi;
+                               }
+#endif
+                               BUNappend(r, t, TRUE);
                                if (t != tv)
                                        GDKfree(t);
                        }
@@ -388,9 +417,8 @@ log_read_updates(logger *lg, trans *tr, 
                                        }
                                }
 #endif
-                               BUNins(r, h, t, TRUE);
-                               if (h != hv)
-                                       GDKfree(h);
+                               BUNappend(uid, h, TRUE);
+                               BUNappend(r, t, TRUE);
                                if (t != tv)
                                        GDKfree(t);
                        }
@@ -406,6 +434,7 @@ log_read_updates(logger *lg, trans *tr, 
                        tr->changes[tr->nr].tt = tt;
                        tr->changes[tr->nr].name = GDKstrdup(name);
                        tr->changes[tr->nr].b = r;
+                       tr->changes[tr->nr].uid = uid;
                        tr->nr++;
                }
        } else {
@@ -447,32 +476,30 @@ la_bat_updates(logger *lg, logaction *la
                        else if (la->type == LOG_DELETE)
                                BATdel(b, la->b, TRUE);
                        else if (la->type == LOG_UPDATE) {
-                               BATiter bi = bat_iterator(la->b);
+                               BATiter vi = bat_iterator(la->b);
+                               BATiter ii = bat_iterator(la->uid);
                                BUN p, q;
 
                                BATloop(la->b, p, q) {
-                                       const void *h = BUNhead(bi, p);
-                                       const void *t = BUNtail(bi, p);
+                                       const void *h = BUNtail(ii, p);
+                                       const void *t = BUNtail(vi, p);
 
+                                       assert(b->htype == TYPE_void);
                                        if (BUNfnd(BATmirror(b), h) == 
BUN_NONE) {
                                                /* if value doesn't
                                                 * exist, insert it if
                                                 * b void headed,
                                                 * maintain that by
                                                 * inserting nils */
-                                               if (b->htype == TYPE_void) {
-                                                       if (b->batCount == 0 && 
*(const oid *) h != oid_nil)
-                                                               b->hseqbase = 
*(const oid *) h;
-                                                       if (b->hseqbase != 
oid_nil && *(const oid *) h != oid_nil) {
-                                                               const void *tv 
= ATOMnilptr(b->ttype);
+                                               if (b->batCount == 0 && *(const 
oid *) h != oid_nil)
+                                                       b->hseqbase = *(const 
oid *) h;
+                                               if (b->hseqbase != oid_nil && 
*(const oid *) h != oid_nil) {
+                                                       const void *tv = 
ATOMnilptr(b->ttype);
 
-                                                               while 
(b->hseqbase + b->batCount < *(const oid *) h)
-                                                                       
BUNappend(b, tv, TRUE);
-                                                       }
-                                                       BUNappend(b, t, TRUE);
-                                               } else {
-                                                       BUNins(b, h, t, TRUE);
+                                                       while (b->hseqbase + 
b->batCount < *(const oid *) h)
+                                                               BUNappend(b, 
tv, TRUE);
                                                }
+                                               BUNappend(b, t, TRUE);
                                        } else {
                                                BUNreplace(b, h, t, TRUE);
                                        }
@@ -1779,37 +1806,39 @@ log_bat_transient(logger *lg, const char
 }
 
 int
-log_delta(logger *lg, BAT *b, const char *name)
+log_delta(logger *lg, BAT *uid, BAT *uval, const char *name)
 {
        int ok = GDK_SUCCEED;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to