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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list