Changeset: 8337179592ac for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/8337179592ac Modified Files: sql/server/rel_optimizer.c sql/storage/store.c Branch: mangled Log Message:
Merge with default. diffs (252 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -665,7 +665,6 @@ order_joins(visitor *v, list *rels, list top = rel_crossproduct(v->sql->sa, l, r, op_join); if (rsingle) set_single(r); - set_processed(top); rel_join_add_exp(v->sql->sa, top, cje); /* all other join expressions on these 2 relations */ @@ -735,7 +734,6 @@ order_joins(visitor *v, list *rels, list top = rel_crossproduct(v->sql->sa, top, r, op_join); if (rsingle) set_single(r); - set_processed(top); rel_join_add_exp(v->sql->sa, top, cje); /* all join expressions on these tables */ @@ -772,7 +770,6 @@ order_joins(visitor *v, list *rels, list top = rel_crossproduct(v->sql->sa, top, nr, op_join); if (rsingle) set_single(nr); - set_processed(top); } else top = nr; } @@ -876,7 +873,6 @@ push_in_join_down(mvc *sql, list *rels, sql_rel *nr = rel_crossproduct(sql->sa, l, r, op_join); if (rsingle) set_single(r); - set_processed(nr); rel_join_add_exp(sql->sa, nr, je); list_append(rels, nr); list_remove_data(rels, NULL, l); diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -1035,7 +1035,6 @@ update_generate_assignments(sql_query *q } r = rel_crossproduct(sql->sa, r, rel_val, op_left); set_dependent(r); - set_processed(r); if (single) { v = exp_column(sql->sa, NULL, exp_name(v), exp_subtype(v), v->card, has_nil(v), is_unique(v), is_intern(v)); rel_val = NULL; @@ -1163,7 +1162,6 @@ update_table(sql_query *query, dlist *qn return NULL; if (fnd && tables) { tables = rel_crossproduct(sql->sa, tables, fnd, op_join); - set_processed(tables); } else { tables = fnd; } @@ -1172,7 +1170,6 @@ update_table(sql_query *query, dlist *qn return NULL; res = rel_crossproduct(sql->sa, res, tables, op_join); set_single(res); - set_processed(res); } if (opt_where) { if (!(r = rel_logical_exp(query, res, opt_where, sql_where))) @@ -1344,7 +1341,6 @@ merge_into_table(sql_query *query, dlist join_rel = rel_crossproduct(sql->sa, bt, joined, op_left); if (!(join_rel = rel_logical_exp(query, join_rel, search_cond, sql_where | sql_join | sql_merge))) return NULL; - set_processed(join_rel); } extra_project = rel_project(sql->sa, join_rel, rel_projections(sql, join_rel, NULL, 1, 1)); @@ -1358,7 +1354,6 @@ merge_into_table(sql_query *query, dlist join_rel = rel_crossproduct(sql->sa, bt, joined, op_left); if (!(join_rel = rel_logical_exp(query, join_rel, search_cond, sql_where | sql_join | sql_merge))) return NULL; - set_processed(join_rel); } extra_project = rel_project(sql->sa, join_rel, list_append(new_exp_list(sql->sa), exp_column(sql->sa, bt_name, TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1, 1))); @@ -1382,7 +1377,6 @@ merge_into_table(sql_query *query, dlist join_rel = rel_crossproduct(sql->sa, bt, joined, op_left); if (!(join_rel = rel_logical_exp(query, join_rel, search_cond, sql_where | sql_join | sql_merge))) return NULL; - set_processed(join_rel); } extra_project = rel_project(sql->sa, join_rel, rel_projections(sql, joined, NULL, 1, 0)); diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -1076,7 +1076,7 @@ mvc_drop_type(mvc *m, sql_schema *s, sql { TRC_DEBUG(SQL_TRANS, "Drop type: %s %s\n", s->base.name, t->base.name); if (t) - return sql_trans_drop_type(m->session->tr, s, t->base.id, drop_action); + return sql_trans_drop_type(m->session->tr, s, t->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); return 0; } diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3713,6 +3713,8 @@ sql_trans_destroy(sql_trans *tr) } store_unlock(store); MT_lock_destroy(&tr->lock); + if (!list_empty(tr->dropped)) + list_destroy(tr->dropped); _DELETE(tr); return res; } @@ -4839,10 +4841,31 @@ sql_trans_drop_type(sql_trans *tr, sql_s sql_type *t = sql_trans_find_type(tr, s, id); int res = LOG_OK; + if (drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) { + sqlid* local_id = MNEW(sqlid); + if (!local_id) + return -1; + + if (!tr->dropped) { + tr->dropped = list_create((fdestroy) &id_destroy); + if (!tr->dropped) { + _DELETE(local_id); + return -1; + } + } + *local_id = t->base.id; + list_append(tr->dropped, local_id); + } + if ((res = sys_drop_type(tr, t, drop_action))) return res; if ((res = os_del(s->types, tr, t->base.name, dup_base(&t->base)))) return res; + + if (drop_action == DROP_CASCADE_START && tr->dropped) { + list_destroy(tr->dropped); + tr->dropped = NULL; + } return res; } @@ -4992,22 +5015,17 @@ build_drop_func_list_item(sql_trans *tr, int sql_trans_drop_all_func(sql_trans *tr, sql_schema *s, list *list_func, int drop_action) { - node *n = NULL; - sql_func *func = NULL; - list* to_drop = NULL; + list *to_drop = NULL; int res = LOG_OK; (void) drop_action; - - if (!tr->dropped) { - tr->dropped = list_create((fdestroy) &id_destroy); - if (!tr->dropped) - return -1; - } - for (n = list_func->h; n ; n = n->next ) { - func = (sql_func *) n->data; - - if (! list_find_id(tr->dropped, func->base.id)){ + if (!tr->dropped && !(tr->dropped = list_create((fdestroy) &id_destroy))) + return -1; + + for (node *n = list_func->h; n ; n = n->next ) { + sql_func *func = (sql_func *) n->data; + + if (!list_find_id(tr->dropped, func->base.id)) { sqlid *local_id = MNEW(sqlid); if (!local_id) { list_destroy(tr->dropped); @@ -5016,33 +5034,32 @@ sql_trans_drop_all_func(sql_trans *tr, s list_destroy(to_drop); return -1; } - if (!to_drop) { - to_drop = list_create(NULL); - if (!to_drop) { - list_destroy(tr->dropped); - return -1; - } + if (!to_drop && !(to_drop = list_create(NULL))) { + list_destroy(tr->dropped); + tr->dropped = NULL; + return -1; } *local_id = func->base.id; list_append(tr->dropped, local_id); list_append(to_drop, func); - //sql_trans_drop_func(tr, s, func->base.id, drop_action ? DROP_CASCADE : DROP_RESTRICT); } } if (to_drop) { - for (n = to_drop->h; n ; n = n->next ) { - func = (sql_func *) n->data; - if ((res = build_drop_func_list_item(tr, s, func->base.id))) + for (node *n = to_drop->h; n ; n = n->next ) { + sql_func *func = (sql_func *) n->data; + if ((res = build_drop_func_list_item(tr, s, func->base.id))) { + list_destroy(tr->dropped); + tr->dropped = NULL; + list_destroy(to_drop); return res; + } } list_destroy(to_drop); } - if ( tr->dropped) { - list_destroy(tr->dropped); - tr->dropped = NULL; - } + list_destroy(tr->dropped); + tr->dropped = NULL; return res; } @@ -6819,10 +6836,31 @@ sql_trans_drop_sequence(sql_trans *tr, s { int res = LOG_OK; + if (drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) { + sqlid* local_id = MNEW(sqlid); + if (!local_id) + return -1; + + if (!tr->dropped) { + tr->dropped = list_create((fdestroy) &id_destroy); + if (!tr->dropped) { + _DELETE(local_id); + return -1; + } + } + *local_id = seq->base.id; + list_append(tr->dropped, local_id); + } + if ((res = sys_drop_sequence(tr, seq, drop_action))) return res; if ((res = os_del(s->seqs, tr, seq->base.name, dup_base(&seq->base)))) return res; + + if (drop_action == DROP_CASCADE_START && tr->dropped) { + list_destroy(tr->dropped); + tr->dropped = NULL; + } return res; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list