Changeset: a64f041b98b1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a64f041b98b1 Modified Files: sql/include/sql_catalog.h sql/storage/sql_catalog.c sql/storage/store.c Branch: nospare Log Message:
small cleanup diffs (127 lines): 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 @@ -221,6 +221,39 @@ typedef struct changeset { node *nelm; } changeset; +typedef void *sql_store; + +#if 0 +extern void (destroy_fptr*)(sql_store *store, sql_base *b); + +/* unordered object set */ +typedef struct objectset { + int refcnt; + sql_allocator *sa; + destroy_fptr destroy; + struct list *objs; + struct sql_hash *map; +} objectset; + +extern int /*ok, error (name existed) and conflict (added before) */ os_add(objectset *os, sql_trans *tr, const char *name, sql_base *b); +extern int os_del(objectset *os, sql_trans *tr, const char *name, sql_base *b); +extern int os_size(objectset *os, sql_trans *tr); +extern int os_empty(objectset *os, sql_trans *tr); +extern sql_base *os_find_name(objectset *os, sql_trans *tr, const char *name); +extern sql_base *os_find_id(objectset *os, sql_trans *tr, sqlid id); +/* iterating (for example for location functinos) */ +extern node *os_first(objectset *os, sql_trans *tr, const char *name); +extern node *os_next(objectset *os, sql_trans *tr, node *cur, const char *name); + +/* ordered object list */ +typedef struct objectlist { + sql_allocator *sa; + destroy_fptr destroy; + struct list *objs; + struct sql_hash *map; +} objectlist; +#endif + extern void cs_new(changeset * cs, sql_allocator *sa, fdestroy destroy); extern void cs_destroy(changeset * cs); extern void cs_add(changeset * cs, void *elm, int flag); @@ -239,8 +272,6 @@ extern void cs_remove_node(changeset * c typedef void *backend_code; typedef size_t backend_stack; -typedef void *sql_store; - typedef struct sql_schema { sql_base base; sqlid auth_id; 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 @@ -328,7 +328,7 @@ find_sql_schema(sql_trans *tr, const cha { if (tr->tmp && strcmp(sname, "tmp")==0) return tr->tmp; - return _cs_find_name(&tr->cat->schemas, sname); + return tr_find_name(tr, &tr->cat->schemas, sname); } sql_schema * diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -4453,6 +4453,22 @@ sql_trans_create_schema(sql_trans *tr, c return s; } +static sql_schema* +new_schema( sql_trans *tr, sql_schema *s, node *n) +{ + if (n && s->base.ts == tr->tid) + return s; + sql_schema *ds = SA_ZNEW(tr->sa, sql_schema); + *ds = *s; + ds->base.ts = tr->tid; + ds->base.older = &s->base; + s->base.newer = &ds->base; + trans_add(tr, &ds->base, NULL, &tc_gc_schema, &tc_commit_schema); + if (n) //n->data = ds; + list_update_data(tr->cat->schemas.set, n, ds); + return ds; +} + sql_schema* sql_trans_rename_schema(sql_trans *tr, sqlid id, const char *new_name) { @@ -4464,10 +4480,19 @@ sql_trans_rename_schema(sql_trans *tr, s assert(!strNil(new_name)); + /* delete schema, add schema */ + sql_schema *ds = new_schema(tr, s, n); + ds->base.deleted = 1; + sql_schema *ns = new_schema(tr, s, NULL); + ns->base.name = sa_strdup(tr->sa, new_name); + cs_add(&tr->cat->schemas, ns, 0); + +#if 0 list_hash_delete(tr->cat->schemas.set, s, NULL); /* has to re-hash the entry in the changeset */ s->base.name = sa_strdup(tr->sa, new_name); if (!list_hash_add(tr->cat->schemas.set, s, NULL)) return NULL; +#endif rid = store->table_api.column_find_row(tr, find_sql_column(sysschema, "id"), &s->base.id, NULL); assert(!is_oid_nil(rid)); @@ -4511,14 +4536,8 @@ sql_trans_drop_schema(sql_trans *tr, sql sql_trans_drop_any_comment(tr, s->base.id); sql_trans_drop_obj_priv(tr, s->base.id); - sql_schema *ds = SA_ZNEW(tr->sa, sql_schema); - *ds = *s; - ds->base.ts = tr->tid; - ds->base.deleted = 1; - ds->base.older = &s->base; - s->base.newer = &ds->base; - trans_add(tr, &ds->base, NULL, &tc_gc_schema, &tc_commit_schema); - list_update_data(tr->cat->schemas.set, n, ds); + s = new_schema(tr, s, n); + s->base.deleted = 1; //cs_del(&tr->cat->schemas, n, s->base.flags); if (drop_action == DROP_CASCADE_START && tr->dropped) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list