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