Changeset: feff66a5a094 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=feff66a5a094
Modified Files:
sql/include/sql_catalog.h
sql/server/rel_rel.c
sql/storage/store.c
Branch: nospare
Log Message:
initial idx dropping + some more cleanup
diffs (55 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
@@ -724,6 +724,8 @@ 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)
+
//extern void schema_destroy(sql_schema *s);
//extern void table_destroy(sql_table *t);
extern void column_destroy(sql_column *c);
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -802,7 +802,7 @@ rel_basetable(mvc *sql, sql_table *t, co
if (isRemote(t))
tname = mapiuri_table(t->query, sql->sa, tname);
- for (cn = t->columns.set->h; cn; cn = cn->next) {
+ sql_base_loop(t->columns.set, cn) {
sql_column *c = cn->data;
sql_exp *e = exp_alias(sa, atname, c->base.name, tname,
c->base.name, &c->type, CARD_MULTI, c->null, 0);
@@ -823,7 +823,7 @@ rel_basetable(mvc *sql, sql_table *t, co
append(rel->exps, exp_alias(sa, atname, TID, tname, TID,
sql_bind_localtype("oid"), CARD_MULTI, 0, 1));
if (t->idxs.set) {
- for (cn = t->idxs.set->h; cn; cn = cn->next) {
+ sql_base_loop(t->idxs.set, cn) {
sql_exp *e;
sql_idx *i = cn->data;
sql_subtype *t = sql_bind_localtype("lng"); /* hash
"lng" */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -5835,9 +5835,17 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc
if (!isTempTable(i->t))
sys_drop_idx(tr, i, drop_action);
+ sql_idx *di = SA_ZNEW(tr->sa, sql_idx);
+ *di = *i;
+ di->base.ts = tr->tid;
+ di->base.deleted = 1;
+ di->base.older = &i->base;
+ i->base.newer = &di->base;
+ trans_add(tr, &di->base, di->data, &tc_gc_idx, NULL);
n = cs_find_name(&i->t->idxs, i->base.name);
if (n)
- cs_del(&i->t->idxs, n, i->base.flags);
+ list_update_data(i->t->idxs.set, n, di);
+ //cs_del(&i->t->idxs, n, i->base.flags);
if (drop_action == DROP_CASCADE_START && tr->dropped) {
list_destroy(tr->dropped);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list