Changeset: 8ff7cb28d317 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8ff7cb28d317
Modified Files:
        sql/common/sql_list.c
        sql/include/sql_catalog.h
        sql/include/sql_list.h
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_utils.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: nospare
Log Message:

more cleanup
now handles drop table


diffs (truncated from 1070 to 300 lines):

diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -50,6 +50,14 @@ sa_list(sql_allocator *sa)
 }
 
 list *
+sa_list_append(sql_allocator *sa, list *l, void *data)
+{
+       if (!l)
+               l = sa_list(sa);
+       return list_append(l, data);
+}
+
+list *
 list_new(sql_allocator *sa, fdestroy destroy)
 {
        list *l = (sa)?SA_NEW(sa, list):MNEW(list);
@@ -760,6 +768,17 @@ list_flaten(list *l)
 }
 
 void
+list_update_data(list *l, node *n, void *data)
+{
+       MT_lock_set(&l->ht_lock);
+       hash_delete(l->ht, n->data);
+       n->data = data;
+       int nkey = l->ht->key(data);
+       hash_add(l->ht, nkey, data);
+       MT_lock_unset(&l->ht_lock);
+}
+
+void
 list_hash_delete(list *l, void *data, fcmp cmp)
 {
        if (l && data) {
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,13 +197,14 @@ typedef enum commit_action_t {
 typedef int sqlid;
 
 typedef struct sql_base {
-       int allocated;
+       int deleted;
        int flags;
        int refcnt;
        sqlid id;
        char *name;
        ulng ts;                                /* transaction start timestamp 
*/
-       struct sql_base *next;  /* older versions */
+       struct sql_base *older; /* older versions */
+       struct sql_base *newer; /* newer version */
 } sql_base;
 
 #define newFlagSet(x)     ((x & TR_NEW) == TR_NEW)
@@ -267,14 +268,15 @@ typedef struct sql_catalog {
 typedef struct sql_trans {
        char *name;
 
-       ulng ts;                /* transaction start timestamp */
-       ulng tid;               /* transaction id */
+       ulng ts;                        /* transaction start timestamp */
+       ulng tid;                       /* transaction id */
 
        sql_store store;        /* keep link into the global store */
-       list *changes;  /* list of changes */
+       list *changes;          /* list of changes */
 
-       int active;             /* active transaction */
-       int status;             /* status of the last query */
+       int active;                     /* is active transaction */
+       int status;                     /* status of the last query */
+
        list *dropped;          /* protection against recursive cascade action*/
        list *moved_tables;
 
@@ -723,7 +725,7 @@ typedef struct sql_session {
 } sql_session;
 
 extern void schema_destroy(sql_schema *s);
-extern void table_destroy(sql_table *t);
+//extern void table_destroy(sql_table *t);
 extern void column_destroy(sql_column *c);
 extern void key_destroy(sql_key *k);
 extern void idx_destroy(sql_idx * i);
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -38,6 +38,8 @@ extern list *list_create(fdestroy destro
 sql_export list *sa_list(sql_allocator *sa);
 extern list *list_new(sql_allocator *sa, fdestroy destroy);
 
+extern list *sa_list_append( sql_allocator *sa, list *l, void *data);
+
 extern void list_destroy(list *l);
 sql_export int list_length(list *l);
 extern int list_empty(list *l);
@@ -101,5 +103,6 @@ extern list *list_flaten(list *l);
 extern void list_hash_delete(list *l, void *data, fcmp cmp);
 extern void* list_hash_add(list *l, void *data, fcmp cmp);
 extern void list_hash_clear(list *l);
+extern void list_update_data(list *l, node *n, void *data);
 
 #endif /* LIST_H */
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
@@ -19,23 +19,9 @@
 static int log_update_col( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int log_update_idx( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
 static int log_update_del( sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_create_col(sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_create_idx(sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_create_del(sql_trans *tr, sql_change *c, ulng commit_ts, ulng 
oldest);
-static int log_destroy_col(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
-static int log_destroy_idx(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
-static int log_destroy_del(sql_trans *tr, sql_change *change, ulng commit_ts, 
ulng oldest);
 
 static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
 
-static list *
-sa_list_append(sql_allocator *sa, list *l, void *data)
-{
-       if (!l)
-               l = sa_list(sa);
-       return list_append(l, data);
-}
-
 static MT_Lock destroy_lock = MT_LOCK_INITIALIZER(destroy_lock);
 sql_dbat *tobe_destroyed_dbat = NULL;
 sql_delta *tobe_destroyed_delta = NULL;
@@ -634,7 +620,6 @@ update_col(sql_trans *tr, sql_column *c,
                return LOG_ERR;
 
        assert(delta && delta->ts == tr->tid);
-       ulng cnt = delta->cnt;
        if (tpe == TYPE_bat)
                ok = delta_update_bat(delta, tids, upd, isNew(c));
        else
@@ -642,10 +627,7 @@ update_col(sql_trans *tr, sql_column *c,
        if (!inTransaction(tr, c->t) && !isTempTable(c->t) && odelta != delta) {
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &c->base;
-               change->type = column_obj;
-               change->kind = kind_append;
                change->data = delta;
-               change->cnt = delta->cnt - cnt;
                change->log = &log_update_col;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
        }
@@ -692,7 +674,6 @@ update_idx(sql_trans *tr, sql_idx * i, v
                return LOG_ERR;
 
        assert(delta && delta->ts == tr->tid);
-       ulng cnt = delta->cnt;
        if (tpe == TYPE_bat)
                ok = delta_update_bat(delta, tids, upd, isNew(i));
        else
@@ -700,10 +681,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
        if (!inTransaction(tr, i->t) && !isTempTable(i->t) && odelta != delta) {
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &i->base;
-               change->type = column_obj;
-               change->kind = kind_append;
                change->data = delta;
-               change->cnt = delta->cnt - cnt;
                change->log = &log_update_idx;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
        }
@@ -843,7 +821,6 @@ append_col(sql_trans *tr, sql_column *c,
                return LOG_ERR;
 
        assert(delta && delta->ts == tr->tid);
-       ulng cnt = delta->cnt;
        if (tpe == TYPE_bat)
                ok = delta_append_bat(delta, i);
        else
@@ -851,10 +828,7 @@ append_col(sql_trans *tr, sql_column *c,
        if (!inTransaction(tr, c->t) && !isTempTable(c->t) && odelta != delta) {
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &c->base;
-               change->type = column_obj;
-               change->kind = kind_append;
                change->data = delta;
-               change->cnt = delta->cnt - cnt;
                change->log = &log_update_col;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
        }
@@ -875,7 +849,6 @@ append_idx(sql_trans *tr, sql_idx * i, v
                return LOG_ERR;
 
        assert(delta && delta->ts == tr->tid);
-       ulng cnt = delta->cnt;
        if (tpe == TYPE_bat)
                ok = delta_append_bat(delta, ib);
        else
@@ -883,10 +856,7 @@ append_idx(sql_trans *tr, sql_idx * i, v
        if (!inTransaction(tr, i->t) && !isTempTable(i->t) && odelta != delta) {
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &i->base;
-               change->type = idx_obj;
-               change->kind = kind_append;
                change->data = delta;
-               change->cnt = delta->cnt - cnt;
                change->log = &log_update_idx;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
        }
@@ -1005,7 +975,7 @@ bind_del_data(sql_trans *tr, sql_table *
        bat->ts = tr->tid;
        bat->next = obat;
        t->data = bat;
-       return LOG_OK;
+       return bat;
 }
 
 static int
@@ -1071,8 +1041,6 @@ delete_tab(sql_trans *tr, sql_table * t,
        if (!inTransaction(tr, t) && !isTempTable(t) && obat != bat) {
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &t->base;
-               change->type = table_obj;
-               change->kind = kind_delete;
                change->data = bat;
                change->log = &log_update_del;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
@@ -1488,12 +1456,12 @@ create_col(sql_trans *tr, sql_column *c)
        }
 
        if (inTransaction(tr, c) && !isTempTable(c->t)){
+       /*
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &c->base;
-               change->type = column_obj;
-               change->kind = kind_create;
                change->log = &log_create_col;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
+       */
                bat->ts = tr->tid;
        }
        if (!inTransaction(tr, c) && !isTempTable(c->t)){
@@ -1556,10 +1524,9 @@ upgrade_col(sql_trans *tr, sql_column *c
 }
 
 static int
-log_create_col(sql_trans *tr, sql_change *change, ulng commit_ts, ulng oldest)
+log_create_col_(sql_trans *tr, sql_column *c, ulng commit_ts, ulng oldest)
 {
        int ok = LOG_OK;
-       sql_column *c = (sql_column*)change->obj;
        assert(!isTempTable(c->t));
        sql_delta *delta = c->data;
        assert(delta->ts == tr->tid);
@@ -1574,6 +1541,12 @@ log_create_col(sql_trans *tr, sql_change
        return ok;
 }
 
+static int
+log_create_col(sql_trans *tr, sql_change *change, ulng commit_ts, ulng oldest)
+{
+       return log_create_col_(tr, (sql_column*)change->obj, commit_ts, oldest);
+}
+
 /* will be called for new idx's and when new index columns are created */
 static int
 create_idx(sql_trans *tr, sql_idx *ni)
@@ -1597,12 +1570,12 @@ create_idx(sql_trans *tr, sql_idx *ni)
        }
 
        if (inTransaction(tr, ni) && !isTempTable(ni->t)){
+       /*
                sql_change *change = SA_ZNEW(tr->sa, sql_change);
                change->obj = &ni->base;
-               change->type = idx_obj;
-               change->kind = kind_create;
                change->log = &log_create_idx;
                tr->changes = sa_list_append(tr->sa, tr->changes, change);
+       */
                bat->ts = tr->tid;
        }
        if (!inTransaction(tr, ni) && !isTempTable(ni->t)){
@@ -1661,10 +1634,9 @@ upgrade_idx(sql_trans *tr, sql_idx *i)
 }
 
 static int
-log_create_idx(sql_trans *tr, sql_change *change, ulng commit_ts, ulng oldest)
+log_create_idx_(sql_trans *tr, sql_idx *i, ulng commit_ts, ulng oldest)
 {
        int ok = LOG_OK;
-       sql_idx *i = (sql_idx*)change->obj;
        assert(!isTempTable(i->t));
        sql_delta *delta = i->data;
        assert(delta->ts == tr->tid);
@@ -1680,6 +1652,12 @@ log_create_idx(sql_trans *tr, sql_change
 }
 
 static int
+log_create_idx(sql_trans *tr, sql_change *change, ulng commit_ts, ulng oldest)
+{
+       return log_create_idx_(tr, (sql_idx*)change->obj, commit_ts, oldest);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to