Changeset: 71b7852e735d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/71b7852e735d
Modified Files:
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_updates.c
Branch: nested
Log Message:
fix delete from composite/multiset tables
diffs (46 lines):
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -4542,3 +4542,15 @@ free_exp(allocator *sa, sql_exp *e)
}
_free_exp_internal(sa, e);
}
+
+list *
+filter_exps_by_localtype(list *res, list *exps, int8_t localtype)
+{
+ for (node *n = exps->h; n; n=n->next) {
+ sql_exp *e = n->data;
+ sql_subtype *t = exp_subtype(e);
+ if (t->type->localtype == localtype)
+ list_append(res, e);
+ }
+ return res;
+}
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -250,5 +250,6 @@ extern void free_exps(allocator *sa, lis
extern int exp_is_rename(sql_exp *e);
extern int exp_is_useless_rename(sql_exp *e);
+extern list *filter_exps_by_localtype(list *res, list *exps, int8_t localtype);
#endif /* _REL_EXP_H_ */
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
@@ -1410,7 +1410,12 @@ delete_table(sql_query *query, dlist *qn
if (!(r = rel_logical_exp(query, r, opt_where,
sql_where)))
return NULL;
e = exp_column(sql->sa, rel_name(r), TID,
sql_fetch_localtype(TYPE_oid), CARD_MULTI, 0, 1, 1);
- e->nid = rel_base_nid(bt, NULL);
+ if (t->multiset || t->composite) {
+ sql_exp *te =
list_fetch(filter_exps_by_localtype(sa_list(sql->sa), ((sql_rel*)r->l)->exps,
TYPE_oid), 0);
+ e->nid = te? te->nid : rel_base_nid(bt, NULL);
+ } else {
+ e->nid = rel_base_nid(bt, NULL);
+ }
e->alias.label = e->nid;
r = rel_project(sql->sa, r,
list_append(new_exp_list(sql->sa), e));
r = rel_delete(sql->sa, rel_dup(bt), r);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]