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(>cat->schemas, sname);
+ return tr_find_name(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 = >base;
+ s->base.newer = >base;
+ trans_add(tr, >base, NULL, _gc_schema, _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(>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"), >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 = >base;
- s->base.newer = >base;
- trans_add(tr, >base, NULL, _gc_schema, _commit_schema);
- list_update_data(tr->cat->schemas.set, n, ds);
+ s = new_schema(tr, s, n);
+ s->base.deleted = 1;
//cs_del(>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