Changeset: 5df834e4133c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5df834e4133c
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/include/sql_catalog.h
        sql/server/sql_semantic.c
        sql/storage/bat/bat_storage.c
        sql/storage/objectset.c
        sql/storage/sql_catalog.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        testing/Mtest.py.in
Branch: nospare
Log Message:

cleanup base structure .


diffs (truncated from 980 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1347,7 +1347,7 @@ stmt_col( backend *be, sql_column *c, st
        stmt *sc = stmt_bat(be, c, RDONLY, part);
 
        if (isTable(c->t) && c->t->access != TABLE_READONLY &&
-          (!isNew(c) || !inTransaction(tr, c) || !isNew(c->t) /* alter */) &&
+          (!isNew(c) || !inTransaction(tr, c->t) || !isNew(c->t) /* alter */) 
&&
           (c->t->persistence == SQL_PERSIST || c->t->s) && 
!c->t->commit_action) {
                stmt *i = stmt_bat(be, c, RD_INS, 0);
                stmt *u = stmt_bat(be, c, RD_UPD_ID, part);
@@ -1367,7 +1367,7 @@ stmt_idx( backend *be, sql_idx *i, stmt 
        stmt *sc = stmt_idxbat(be, i, RDONLY, part);
 
        if (isTable(i->t) && i->t->access != TABLE_READONLY &&
-          (!isNew(i) || !inTransaction(tr, i) || !isNew(i->t)/* alter */) &&
+          (!isNew(i) || !inTransaction(tr, i->t) || !isNew(i->t)/* alter */) &&
           (i->t->persistence == SQL_PERSIST || i->t->s) && 
!i->t->commit_action) {
                stmt *ic = stmt_idxbat(be, i, RD_INS, 0);
                stmt *u = stmt_idxbat(be, i, RD_UPD_ID, part);
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
@@ -197,14 +197,10 @@ typedef enum commit_action_t {
 typedef int sqlid;
 
 typedef struct sql_base {
-       int deleted;
-       int flags;
+       int flags;                      /* todo change into bool new */
        int refcnt;
        sqlid id;
        char *name;
-       ulng ts;                                /* transaction start timestamp 
*/
-       struct sql_base *older; /* older versions */
-       struct sql_base *newer; /* newer version */
 } sql_base;
 
 #define newFlagSet(x)     ((x & TR_NEW) == TR_NEW)
@@ -247,6 +243,7 @@ extern sql_base *os_find_id(struct objec
 /* iterating (for example for location functinos) */
 extern struct os_iter *os_iterator(struct objectset *os, struct sql_trans *tr, 
const char *name /*optional*/);
 extern sql_base *oi_next(struct os_iter *oi);
+extern bool os_obj_intransaction(struct objectset *os, struct sql_trans *tr, 
sql_base *b);
 
 extern void cs_new(changeset * cs, sql_allocator *sa, fdestroy destroy);
 extern changeset* cs_dup(changeset * cs);
@@ -742,7 +739,7 @@ typedef struct sql_session {
        backend_stack stk;
 } sql_session;
 
-#define sql_base_loop(l, n) for (n=l->h; n; n=n->next) if 
(!((sql_base*)n->data)->deleted)
+#define sql_base_loop(l, n) for (n=l->h; n; n=n->next)
 
 //extern void schema_destroy(sql_schema *s);
 //extern void table_destroy(sql_table *t);
@@ -750,8 +747,6 @@ extern void column_destroy(sql_column *c
 extern void key_destroy(sql_key *k);
 extern void idx_destroy(sql_idx * i);
 
-extern int tr_version_of_parent(sql_trans *tr, ulng ts);
-
 extern int base_key(sql_base *b);
 extern node *list_find_name(list *l, const char *name);
 extern node *list_find_id(list *l, sqlid id);
@@ -764,8 +759,7 @@ extern sql_idx *find_sql_idx(sql_table *
 extern sql_idx *sql_trans_find_idx(sql_trans *tr, sqlid id);
 
 extern sql_column *find_sql_column(sql_table *t, const char *cname);
-
-extern sql_part *find_sql_part_id(sql_trans *tr, sql_table *t, sqlid id);
+extern sql_part *find_sql_part_id(sql_table *t, sqlid id);
 
 extern sql_table *find_sql_table(sql_trans *tr, sql_schema *s, const char 
*tname);
 extern sql_table *find_sql_table_id(sql_trans *tr, sql_schema *s, sqlid id);
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -420,7 +420,7 @@ sql_bind_member_internal(mvc *sql, list 
                for (; n; n = n->next) {
                        sql_func *f = n->data;
 
-                       if (f->base.deleted || (!f->res && !IS_FILT(f)))
+                       if (!f->res && !IS_FILT(f))
                                continue;
                        if (strcmp(f->base.name, fname) == 0 && f->type == type 
&& list_length(f->ops) == nrargs) {
                                sql_subtype *ft = &((sql_arg *) 
f->ops->h->data)->type;
@@ -724,7 +724,7 @@ sql_find_funcs_internal(mvc *sql, list *
                        for (sql_hash_e *he = 
ff->ht->buckets[key&(ff->ht->size-1)]; he; he = he->chain) {
                                sql_func *f = he->value;
 
-                               if (f->base.deleted || (f->type != type && 
f->type != filt))
+                               if (f->type != type && f->type != filt)
                                        continue;
                                if ((fres = func_cmp(sql->sa, f, fname, nrargs 
)) != NULL) {
                                        if (!res)
@@ -807,7 +807,7 @@ sql_find_funcs_by_name_internal(mvc *sql
                        for (sql_hash_e *he = 
ff->ht->buckets[key&(ff->ht->size-1)]; he; he = he->chain) {
                                sql_func *f = he->value;
 
-                               if (f->base.deleted || f->type != type)
+                               if (f->type != type)
                                        continue;
                                if (strcmp(f->base.name, fname) == 0) {
                                        if (!res)
@@ -820,7 +820,7 @@ sql_find_funcs_by_name_internal(mvc *sql
                        sql_base_loop( ff, n) {
                                sql_func *f = n->data;
 
-                               if (f->base.deleted || f->type != type)
+                               if (f->type != type)
                                        continue;
                                if (strcmp(f->base.name, fname) == 0) {
                                        if (!res)
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
@@ -18,9 +18,21 @@ static int log_update_del( sql_trans *tr
 static int tc_gc_col( sql_store Store, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int tc_gc_idx( sql_store Store, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int tc_gc_del( sql_store Store, sql_change *c, ulng commit_ts, ulng 
oldest);
+static int log_create_col(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
+static int log_create_idx(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
+static int log_create_del(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
 
 static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
 
+static int
+tr_version_of_parent(sql_trans *tr, ulng ts)
+{
+       for( tr = tr->parent; tr; tr = tr->parent)
+               if (tr->tid == ts)
+                       return 1;
+       return 0;
+}
+
 sql_delta *
 timestamp_delta( sql_trans *tr, sql_delta *d)
 {
@@ -1438,11 +1450,12 @@ copyBat (bat i, int type, oid seq)
 static int
 create_col(sql_trans *tr, sql_column *c)
 {
-       int ok = LOG_OK;
+       int ok = LOG_OK, new = 0;
        int type = c->type.type->localtype;
        sql_delta *bat = c->data;
 
        if (!bat) {
+               new = 1;
                c->data = bat = ZNEW(sql_delta);
                if(!bat)
                        return LOG_ERR;
@@ -1454,7 +1467,7 @@ create_col(sql_trans *tr, sql_column *c)
                        ok = LOG_ERR;
        }
 
-       if (inTransaction(tr, c) && !isTempTable(c->t))
+       if (new && !isTempTable(c->t))
                bat->ts = tr->tid;
 
        if (!isNew(c) && !isTempTable(c->t)){
@@ -1502,6 +1515,8 @@ create_col(sql_trans *tr, sql_column *c)
                                bat_destroy(b);
                        }
                }
+               if (new && !isTempTable(c->t) && !isNew(c->t) /* alter */)
+                       trans_add(tr, &c->base, bat, &tc_gc_col, 
&log_create_col);
        }
        return ok;
 }
@@ -1544,7 +1559,7 @@ log_create_col(sql_trans *tr, sql_change
 static int
 create_idx(sql_trans *tr, sql_idx *ni)
 {
-       int ok = LOG_OK;
+       int ok = LOG_OK, new = 0;
        sql_delta *bat = ni->data;
        int type = TYPE_lng;
 
@@ -1552,6 +1567,7 @@ create_idx(sql_trans *tr, sql_idx *ni)
                type = TYPE_oid;
 
        if (!bat) {
+               new = 1;
                ni->data = bat = ZNEW(sql_delta);
                if(!bat)
                        return LOG_ERR;
@@ -1563,7 +1579,7 @@ create_idx(sql_trans *tr, sql_idx *ni)
                        ok = LOG_ERR;
        }
 
-       if (inTransaction(tr, ni) && !isTempTable(ni->t))
+       if (new && !isTempTable(ni->t))
                bat->ts = tr->tid;
 
        if (!isNew(ni) && !isTempTable(ni->t)){
@@ -1607,6 +1623,8 @@ create_idx(sql_trans *tr, sql_idx *ni)
                        if(bat->uvbid == BID_NIL)
                                ok = LOG_ERR;
                }
+               if (new && !isTempTable(ni->t) && !isNew(ni->t) /* alter */)
+                       trans_add(tr, &ni->base, bat, &tc_gc_idx, 
&log_create_idx);
        }
        return ok;
 }
@@ -1664,11 +1682,12 @@ create_del(sql_trans *tr, sql_table *t)
 {
        sqlstore *store = tr->store;
 
-       int ok = LOG_OK;
+       int ok = LOG_OK, new = 0;
        BAT *b;
        sql_dbat *bat = t->data;
 
        if (!bat) {
+               new = 1;
                t->data = bat = ZNEW(sql_dbat);
                if(!bat)
                        return LOG_ERR;
@@ -1700,6 +1719,8 @@ create_del(sql_trans *tr, sql_table *t)
                } else {
                        ok = LOG_ERR;
                }
+               if (new && !isTempTable(t))
+                       trans_add(tr, &t->base, bat, &tc_gc_del, 
&log_create_del);
        }
        return ok;
 }
@@ -1929,7 +1950,6 @@ log_destroy_del(sql_trans *tr, sql_chang
        sql_dbat *dbat = t->data;
        if (dbat->ts < tr->ts) /* no changes ? */
                return ok;
-       assert(dbat->ts == tr->tid || t->base.ts == tr->tid || (t->base.ts == 
commit_ts && commit_ts == oldest));
        dbat->ts = commit_ts;
        ok = log_destroy_dbat(tr, t->data, t->bootstrap?0:LOG_TAB, t->base.id);
 
@@ -2438,7 +2458,6 @@ tc_gc_del( sql_store Store, sql_change *
                        t->data = d->next;
                        d->next = NULL;
                } else {
-                       assert(0); /* no data left ?? */
                        t->data = NULL;
                }
                _destroy_dbat(d);
@@ -2477,10 +2496,6 @@ bat_storage_init( store_functions *sf)
        sf->create_idx = (create_idx_fptr)&create_idx;
        sf->create_del = (create_del_fptr)&create_del;
 
-       sf->log_create_col = (log_create_col_fptr)&log_create_col;
-       sf->log_create_idx = (log_create_idx_fptr)&log_create_idx;
-       sf->log_create_del = (log_create_del_fptr)&log_create_del;
-
        sf->upgrade_col = (upgrade_col_fptr)&upgrade_col;
        sf->upgrade_idx = (upgrade_idx_fptr)&upgrade_idx;
        sf->upgrade_del = (upgrade_del_fptr)&upgrade_del;
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -590,3 +590,16 @@ oi_next(os_iter *oi)
        }
        return b;
 }
+
+bool
+os_obj_intransaction(objectset *os, struct sql_trans *tr, sql_base *b)
+{
+       object_node *n = find_id(os, b->id);
+
+       if (n) {
+                objectversion *ov = get_valid_object(tr, n->data);
+                if (ov && !ov->deleted && ov->ts == tr->tid)
+                        return true;
+       }
+       return false;
+}
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -62,7 +62,7 @@ static void *
                        sql_base *b = n->data;
 
                        /* check if names match */
-                       if (name[0] == b->name[0] && strcmp(name, b->name) == 0 
&& !b->deleted) {
+                       if (name[0] == b->name[0] && strcmp(name, b->name) == 
0) {
                                return b;
                        }
                }
@@ -70,32 +70,6 @@ static void *
        return NULL;
 }
 
-static sql_base *
-tr_get_object(sql_trans *tr, sql_base *b)
-{
-       while (b) {
-               if (b->ts == tr->tid || b->ts < tr->ts)
-                       return b;
-               else
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to