Changeset: f397d9a9be2a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f397d9a9be2a
Modified Files:
sql/storage/store.c
Branch: Jul2021
Log Message:
Propagate transaction errors while dropping all dependencies
diffs (190 lines):
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3397,13 +3397,14 @@ sql_trans_drop_all_dependencies(sql_tran
sht dep_type = 0;
list *dep = sql_trans_get_dependencies(tr, id, type, NULL);
node *n;
+ int res = 0;
if (!dep)
- return DEPENDENCY_CHECK_ERROR;
+ return -1;
n = dep->h;
- while (n) {
+ while (n && !res) {
dep_id = *(sqlid*) n->data;
dep_type = (sql_dependency) *(sht*) n->next->data;
@@ -3411,61 +3412,55 @@ sql_trans_drop_all_dependencies(sql_tran
switch (dep_type) {
case SCHEMA_DEPENDENCY:
- if (sql_trans_drop_schema(tr, dep_id,
DROP_CASCADE))
- return DEPENDENCY_CHECK_ERROR;
+ res = sql_trans_drop_schema(tr, dep_id,
DROP_CASCADE);
break;
case TABLE_DEPENDENCY:
case VIEW_DEPENDENCY: {
-
sql_table *t = sql_trans_find_table(tr, dep_id);
-
if (t && sql_trans_drop_table_id(tr, t->s, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
- }
break;
+ sql_table *t = sql_trans_find_table(tr,
dep_id);
+ if (t)
+ res =
sql_trans_drop_table_id(tr, t->s, dep_id, DROP_CASCADE);
+ } break;
case COLUMN_DEPENDENCY: {
-
if ((t_id = sql_trans_get_dependency_type(tr, dep_id,
TABLE_DEPENDENCY)) > 0) {
-
sql_table *t = sql_trans_find_table(tr, dep_id);
-
if (t && sql_trans_drop_column(tr, t, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
-
}
-
} break;
+ if ((t_id =
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY)) > 0) {
+ sql_table *t =
sql_trans_find_table(tr, dep_id);
+ if (t)
+ res =
sql_trans_drop_column(tr, t, dep_id, DROP_CASCADE);
+ }
+ } break;
case TRIGGER_DEPENDENCY: {
-
sql_trigger *t = sql_trans_find_trigger(tr, dep_id);
-
if (t && !list_find_id(tr->dropped, t->t->base.id) && /* table not jet
dropped */
-
sql_trans_drop_trigger(tr, t->t->s, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
-
} break;
+ sql_trigger *t =
sql_trans_find_trigger(tr, dep_id);
+ if (t && !list_find_id(tr->dropped,
t->t->base.id)) /* table not yet dropped */
+ res =
sql_trans_drop_trigger(tr, t->t->s, dep_id, DROP_CASCADE);
+ } break;
case KEY_DEPENDENCY:
case FKEY_DEPENDENCY: {
-
sql_key *k = sql_trans_find_key(tr, dep_id);
-
if (k && !list_find_id(tr->dropped, k->t->base.id) && /* table not jet
dropped */
-
sql_trans_drop_key(tr, k->t->s, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
- }
break;
+ sql_key *k = sql_trans_find_key(tr,
dep_id);
+ if (k && !list_find_id(tr->dropped,
k->t->base.id)) /* table not yet dropped */
+ res = sql_trans_drop_key(tr,
k->t->s, dep_id, DROP_CASCADE);
+ } break;
case INDEX_DEPENDENCY: {
-
sql_idx *i = sql_trans_find_idx(tr, dep_id);
-
if (i && !list_find_id(tr->dropped, i->t->base.id) && /* table not jet
dropped */
-
sql_trans_drop_idx(tr, i->t->s, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
- }
break;
+ sql_idx *i = sql_trans_find_idx(tr,
dep_id);
+ if (i && !list_find_id(tr->dropped,
i->t->base.id)) /* table not yet dropped */
+ res = sql_trans_drop_idx(tr,
i->t->s, dep_id, DROP_CASCADE);
+ } break;
case PROC_DEPENDENCY:
case FUNC_DEPENDENCY: {
-
sql_func *f = sql_trans_find_func(tr, dep_id);
-
if (sql_trans_drop_func(tr, f->s, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
- }
break;
+ sql_func *f = sql_trans_find_func(tr,
dep_id);
+ res = sql_trans_drop_func(tr, f->s,
dep_id, DROP_CASCADE);
+ } break;
case TYPE_DEPENDENCY: {
-
sql_type *t = sql_trans_find_type(tr, NULL, dep_id);
-
if (sql_trans_drop_type(tr, t->s, dep_id, DROP_CASCADE))
-
return DEPENDENCY_CHECK_ERROR;
- }
break;
+ sql_type *t = sql_trans_find_type(tr,
NULL, dep_id);
+ res = sql_trans_drop_type(tr, t->s,
dep_id, DROP_CASCADE);
+ } break;
case USER_DEPENDENCY: /*TODO schema and users
dependencies*/
- break;
+ break;
}
}
n = n->next->next;
}
list_destroy(dep);
- return DEPENDENCY_CHECK_OK;
+ return res;
}
static int
@@ -3538,8 +3533,8 @@ sys_drop_idx(sql_trans *tr, sql_idx * i,
if ((res = sql_trans_drop_dependencies(tr, i->base.id)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, i->base.id,
INDEX_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
i->base.id, INDEX_DEPENDENCY)))
+ return res;
return 0;
}
@@ -3592,8 +3587,8 @@ sys_drop_key(sql_trans *tr, sql_key *k,
if ((res = sql_trans_drop_dependencies(tr, k->base.id)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, k->base.id, (k->type ==
fkey) ? FKEY_DEPENDENCY : KEY_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
k->base.id, (k->type == fkey) ? FKEY_DEPENDENCY : KEY_DEPENDENCY)))
+ return res;
return 0;
}
@@ -3631,8 +3626,8 @@ sys_drop_sequence(sql_trans *tr, sql_seq
return res;
if ((res = sql_trans_drop_any_comment(tr, seq->base.id)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, seq->base.id,
SEQ_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
seq->base.id, SEQ_DEPENDENCY)))
+ return res;
return 0;
}
@@ -3761,8 +3756,8 @@ sys_drop_column(sql_trans *tr, sql_colum
if ((res = sys_drop_statistics(tr, col)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, col->base.id,
COLUMN_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
col->base.id, COLUMN_DEPENDENCY)))
+ return res;
if (col->type.type->s && (res = sql_trans_drop_dependency(tr,
col->base.id, col->type.type->base.id, TYPE_DEPENDENCY)))
return res;
return 0;
@@ -3955,8 +3950,8 @@ sys_drop_table(sql_trans *tr, sql_table
if ((res = sys_drop_columns(tr, t, drop_action)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, t->base.id, !isView(t) ?
TABLE_DEPENDENCY : VIEW_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
t->base.id, !isView(t) ? TABLE_DEPENDENCY : VIEW_DEPENDENCY)))
+ return res;
return 0;
}
@@ -3978,8 +3973,8 @@ sys_drop_type(sql_trans *tr, sql_type *t
if ((res = sql_trans_drop_dependencies(tr, type->base.id)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, type->base.id,
TYPE_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
type->base.id, TYPE_DEPENDENCY)))
+ return res;
return 0;
}
@@ -4017,8 +4012,8 @@ sys_drop_func(sql_trans *tr, sql_func *f
if ((res = sql_trans_drop_obj_priv(tr, func->base.id)))
return res;
- if (drop_action)
- sql_trans_drop_all_dependencies(tr, func->base.id,
!IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY);
+ if (drop_action && (res = sql_trans_drop_all_dependencies(tr,
func->base.id, !IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY)))
+ return res;
return 0;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list