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