Changeset: 411c2c2b849a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/411c2c2b849a
Modified Files:
        sql/include/sql_catalog.h
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: iso
Log Message:

merged with jul2021


diffs (truncated from 719 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2358,7 +2358,7 @@ decref(bat i, bool logical, bool release
                        }
                }
        }
-       if (b && b->batCount > b->batInserted) {
+       if (b && b->batCount > b->batInserted && !isVIEW(b)) {
                /* if batCount is larger than batInserted and the dirty
                 * bits are off, it may be that a (sub)commit happened
                 * in parallel to an update; we must undo the turning
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -1069,7 +1069,7 @@ HASHprobe(const Hash *h, const void *v)
        }
 }
 
-inline void
+void
 HASHappend_locked(BAT *b, BUN i, const void *v)
 {
        Hash *h = b->thash;
@@ -1140,7 +1140,7 @@ HASHappend(BAT *b, BUN i, const void *v)
 }
 
 /* insert value v at position p into the hash table of b */
-inline void
+void
 HASHinsert_locked(BAT *b, BUN p, const void *v)
 {
        Hash *h = b->thash;
@@ -1223,7 +1223,7 @@ HASHinsert(BAT *b, BUN p, const void *v)
 }
 
 /* delete value v at position p from the hash table of b */
-inline void
+void
 HASHdelete_locked(BAT *b, BUN p, const void *v)
 {
        Hash *h = b->thash;
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -168,9 +168,6 @@ gdk_return GDKunlink(int farmid, const c
        __attribute__((__visibility__("hidden")));
 void HASHappend(BAT *b, BUN i, const void *v)
        __attribute__((__visibility__("hidden")));
-#ifdef _MSC_VER
-inline
-#endif
 void HASHappend_locked(BAT *b, BUN i, const void *v)
        __attribute__((__visibility__("hidden")));
 void HASHfree(BAT *b)
@@ -179,16 +176,10 @@ bool HASHgonebad(BAT *b, const void *v)
        __attribute__((__visibility__("hidden")));
 void HASHdelete(BAT *b, BUN p, const void *v)
        __attribute__((__visibility__("hidden")));
-#ifdef _MSC_VER
-inline
-#endif
 void HASHdelete_locked(BAT *b, BUN p, const void *v)
        __attribute__((__visibility__("hidden")));
 void HASHinsert(BAT *b, BUN p, const void *v)
        __attribute__((__visibility__("hidden")));
-#ifdef _MSC_VER
-inline
-#endif
 void HASHinsert_locked(BAT *b, BUN p, const void *v)
        __attribute__((__visibility__("hidden")));
 BUN HASHmask(BUN cnt)
diff --git a/sql/common/sql_changeset.c b/sql/common/sql_changeset.c
--- a/sql/common/sql_changeset.c
+++ b/sql/common/sql_changeset.c
@@ -32,21 +32,21 @@ cs_destroy(changeset * cs, void *data)
 }
 
 void
-cs_add(changeset * cs, void *elm, int flags)
+cs_add(changeset * cs, void *elm, bool isnew)
 {
        if (!cs->set)
                cs->set = list_new(cs->sa, cs->destroy);
        list_append(cs->set, elm);
-       if (newFlagSet(flags) && !cs->nelm)
+       if (isnew && !cs->nelm)
                cs->nelm = cs->set->t;
 }
 
 void
-cs_del(changeset * cs, void *gdata, node *elm, int flags)
+cs_del(changeset * cs, void *gdata, node *elm, bool isnew)
 {
        if (cs->nelm == elm)
                cs->nelm = elm->next;
-       if (newFlagSet(flags)) {        /* remove just added */
+       if (isnew) {    /* remove just added */
                list_remove_node(cs->set, gdata, elm);
        } else {
                if (!cs->dset)
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -156,11 +156,11 @@ bool is_commutative(const char *fnm)
 }
 
 void
-base_init(sql_allocator *sa, sql_base * b, sqlid id, int flags, const char 
*name)
+base_init(sql_allocator *sa, sql_base * b, sqlid id, bool isnew, const char 
*name)
 {
        *b = (sql_base) {
                .id = id,
-               .flags = flags,
+               .new = isnew,
                .refcnt = 1,
                .name = (name) ? SA_STRDUP(sa, name) : NULL,
        };
@@ -603,7 +603,7 @@ sql_create_type(sql_allocator *sa, const
 {
        sql_type *t = SA_ZNEW(sa, sql_type);
 
-       base_init(sa, &t->base, local_id++, 0, sqlname);
+       base_init(sa, &t->base, local_id++, false, sqlname);
        t->impl = sa_strdup(sa, impl);
        t->digits = digits;
        t->scale = scale;
@@ -653,7 +653,7 @@ sql_create_func_(sql_allocator *sa, cons
        }
        if (res)
                fres = create_arg(sa, NULL, sql_create_subtype(sa, res, 0, 0), 
ARG_OUT);
-       base_init(sa, &t->base, local_id++, 0, name);
+       base_init(sa, &t->base, local_id++, false, name);
 
        t->imp = sa_strdup(sa, imp);
        t->mod = sa_strdup(sa, mod);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -87,9 +87,6 @@ typedef enum sql_dependency {
 #define INOUT          6       /* output type equals input type */
 #define SCALE_EQ       7       /* user defined functions need equal scales */
 
-/* Warning TR flags is a bitmask */
-#define TR_NEW 1
-
 #define RDONLY 0
 #define RD_INS 1
 #define RD_UPD_ID 2
@@ -196,20 +193,17 @@ typedef int sqlid;
 typedef void *sql_store;
 
 typedef struct sql_base {
-       int flags;                      /* todo change into bool new */
-       unsigned char
+       unsigned int
                new:1,
-               deleted:1;
-       int refcnt;
+               deleted:1,
+               refcnt:30;
        sqlid id;
        char *name;
 } sql_base;
 
-#define newFlagSet(x)     (((x) & TR_NEW) == TR_NEW)
-#define removeNewFlag(x)  ((x)->base.flags &= ~TR_NEW)
-#define isNew(x)          (newFlagSet((x)->base.flags))
+#define isNew(x)          ((x)->base.new)
 
-extern void base_init(sql_allocator *sa, sql_base * b, sqlid id, int flags, 
const char *name);
+extern void base_init(sql_allocator *sa, sql_base * b, sqlid id, bool isnew, 
const char *name);
 
 typedef struct changeset {
        sql_allocator *sa;
@@ -275,8 +269,8 @@ extern node *ol_rehash(objlist *ol, cons
 
 extern void cs_new(changeset * cs, sql_allocator *sa, fdestroy destroy);
 extern void cs_destroy(changeset * cs, void *data);
-extern void cs_add(changeset * cs, void *elm, int flag);
-extern void cs_del(changeset * cs, void *gdata, node *elm, int flag);
+extern void cs_add(changeset * cs, void *elm, bool isnew);
+extern void cs_del(changeset * cs, void *gdata, node *elm, bool isnew);
 extern int cs_size(changeset * cs);
 extern node *cs_find_id(changeset * cs, sqlid id);
 
diff --git a/sql/server/sql_qc.c b/sql/server/sql_qc.c
--- a/sql/server/sql_qc.c
+++ b/sql/server/sql_qc.c
@@ -158,7 +158,7 @@ qc_insert(qc *cache, sql_allocator *sa, 
                .ops = params,
                .res = res,
        };
-       base_init(sa, &f->base, 0, TR_NEW, NULL);
+       base_init(sa, &f->base, 0, true, NULL);
        f->base.new = 1;
        f->base.id = n->id;
        f->base.name = f->imp = name;
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -969,6 +969,16 @@ cs_update_bat( sql_trans *tr, column_sto
                if (!otids)
                        return LOG_ERR;
        }
+       if (updates && (updates->ttype == TYPE_msk || mask_cand(updates))) {
+               oupdates = BATunmask(updates);
+               if (!oupdates)
+                       return LOG_ERR;
+       }
+       if (updates && updates->ttype == TYPE_void) { /* dense later use 
optimized log structure */
+               oupdates = COLcopy(updates, TYPE_oid, true /* make sure we get 
a oid col */, TRANSIENT);
+               if (!oupdates)
+                       return LOG_ERR;
+       }
        /* When we go to smaller grained update structures we should check for 
concurrent updates on this column ! */
        /* currently only one update delta is possible */
        lock_table(tr->store, t->base.id);
@@ -985,8 +995,11 @@ cs_update_bat( sql_trans *tr, column_sto
                        if (otids != tids)
                                bat_destroy(otids);
                        otids = sorted;
-                       oupdates = BATproject(order, oupdates);
+                       BAT *noupdates = BATproject(order, oupdates);
                        bat_destroy(order);
+                       if (oupdates != updates)
+                               bat_destroy(oupdates);
+                       oupdates = noupdates;
                        if (!oupdates) {
                                bat_destroy(otids);
                                unlock_table(tr->store, t->base.id);
@@ -1255,6 +1268,7 @@ cs_update_val( sql_trans *tr, column_sto
                if (cs_real_update_bats(cs, &ui, &uv) != LOG_OK)
                        return LOG_ERR;
 
+               assert(uv->ttype);
                assert(BATcount(ui) == BATcount(uv));
                if (BUNappend(ui, (ptr) &rid, true) != GDK_SUCCEED ||
                    BUNappend(uv, (ptr) upd, true) != GDK_SUCCEED) {
@@ -2187,7 +2201,7 @@ static int
 commit_create_col_( sql_trans *tr, sql_column *c, ulng commit_ts, ulng oldest)
 {
        int ok = LOG_OK;
-       (void)tr; (void)oldest;
+       (void)oldest;
 
        if(!isTempTable(c->t)) {
                sql_delta *delta = ATOMIC_PTR_GET(&c->data);
@@ -2198,7 +2212,8 @@ commit_create_col_( sql_trans *tr, sql_c
                if (!delta->cs.alter)
                        ok = merge_delta(delta);
                delta->cs.alter = 0;
-               c->base.flags = 0;
+               if (!tr->parent)
+                       c->base.new = 0;
        }
        return ok;
 }
@@ -2207,7 +2222,8 @@ static int
 commit_create_col( sql_trans *tr, sql_change *change, ulng commit_ts, ulng 
oldest)
 {
        sql_column *c = (sql_column*)change->obj;
-       c->base.flags = 0;
+       if (!tr->parent)
+               c->base.new = 0;
        return commit_create_col_( tr, c, commit_ts, oldest);
 }
 
@@ -2287,7 +2303,7 @@ static int
 commit_create_idx_( sql_trans *tr, sql_idx *i, ulng commit_ts, ulng oldest)
 {
        int ok = LOG_OK;
-       (void)tr; (void)oldest;
+       (void)oldest;
 
        if(!isTempTable(i->t)) {
                sql_delta *delta = ATOMIC_PTR_GET(&i->data);
@@ -2296,7 +2312,8 @@ commit_create_idx_( sql_trans *tr, sql_i
 
                assert(delta->next == NULL);
                ok = merge_delta(delta);
-               i->base.flags = 0;
+               if (!tr->parent)
+                       i->base.new = 0;
        }
        return ok;
 }
@@ -2305,7 +2322,8 @@ static int
 commit_create_idx( sql_trans *tr, sql_change *change, ulng commit_ts, ulng 
oldest)
 {
        sql_idx *i = (sql_idx*)change->obj;
-       i->base.flags = 0;
+       if (!tr->parent)
+               i->base.new = 0;
        return commit_create_idx_(tr, i, commit_ts, oldest);
 }
 
@@ -2514,10 +2532,12 @@ commit_create_del( sql_trans *tr, sql_ch
                                                ok = commit_create_idx_(tr, i, 
commit_ts, oldest);
                                }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to