Changeset: 959e94e60f76 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=959e94e60f76
Modified Files:
sql/common/sql_list.c
sql/include/sql_catalog.h
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/sql_partition.c
sql/storage/sql_catalog.c
sql/storage/store.c
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out
Branch: Oct2020
Log Message:
Merged with Jun2020
diffs (219 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
@@ -732,7 +732,7 @@ extern sql_idx *sql_trans_find_idx(sql_t
extern sql_column *find_sql_column(sql_table *t, const char *cname);
-extern sql_part *find_sql_part(sql_table *t, const char *tname);
+extern sql_part *find_sql_part_id(sql_table *t, sqlid id);
extern sql_table *find_sql_table(sql_schema *s, const char *tname);
extern sql_table *find_sql_table_id(sql_schema *s, sqlid id);
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -81,7 +81,7 @@ static sql_rel *
rewrite_replica( mvc *sql, sql_rel *rel, sql_table *t, sql_part *pd, int
remote_prop)
{
node *n, *m;
- sql_table *p = find_sql_table(t->s, pd->base.name);
+ sql_table *p = find_sql_table_id(t->s, pd->base.id);
sql_rel *r = rel_basetable(sql, p, t->base.name);
for (n = rel->exps->h, m = r->exps->h; n && m; n = n->next, m =
m->next) {
@@ -197,7 +197,7 @@ replica(mvc *sql, sql_rel *rel, char *ur
/* replace by the replica which matches the uri
*/
for (n = t->members.set->h; n; n = n->next) {
sql_part *p = n->data;
- sql_table *pt = find_sql_table(t->s,
p->base.name);
+ sql_table *pt = find_sql_table_id(t->s,
p->base.id);
if (isRemote(pt) && strcmp(uri,
pt->query) == 0) {
rel = rewrite_replica(sql, rel,
t, p, 0);
@@ -210,7 +210,7 @@ replica(mvc *sql, sql_rel *rel, char *ur
sql_part *p;
for (n = t->members.set->h; n; n =
n->next) {
sql_part *p = n->data;
- sql_table *pt =
find_sql_table(t->s, p->base.name);
+ sql_table *pt =
find_sql_table_id(t->s, p->base.id);
if (!isRemote(pt)) {
fnd = 1;
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
@@ -8940,7 +8940,7 @@ rel_merge_table_rewrite(visitor *v, sql_
for (node *nt = t->members.set->h; nt;
nt = nt->next) {
sql_part *pd = nt->data;
- sql_table *pt =
find_sql_table(t->s, pd->base.name);
+ sql_table *pt =
find_sql_table_id(t->s, pd->base.id);
sql_rel *prel =
rel_basetable(v->sql, pt, tname), *bt = NULL;
int skip = 0;
list *exps = NULL;
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -268,7 +268,7 @@ propagate_validation_to_upper_tables(sql
{
mvc *sql = query->sql;
for (sql_table *prev = mt, *it = prev->p ; it && prev ; prev = it, it =
it->p) {
- sql_part *spt = find_sql_part(it, prev->base.name);
+ sql_part *spt = find_sql_part_id(it, prev->base.id);
if (spt) {
if (isRangePartitionTable(it)) {
int tpe = spt->tpe.type->localtype;
@@ -581,7 +581,7 @@ rel_generate_subdeletes(mvc *sql, sql_re
for (node *n = t->members.set->h; n; n = n->next) {
sql_part *pt = (sql_part *) n->data;
- sql_table *sub = find_sql_table(t->s, pt->base.name);
+ sql_table *sub = find_sql_table_id(t->s, pt->base.id);
sql_rel *s1, *dup = NULL;
if (!update_allowed(sql, sub, sub->base.name,
is_delete(rel->op) ? "DELETE": "TRUNCATE",
@@ -615,7 +615,7 @@ rel_generate_subupdates(mvc *sql, sql_re
for (node *n = t->members.set->h; n; n = n->next) {
sql_part *pt = (sql_part *) n->data;
- sql_table *sub = find_sql_table(t->s, pt->base.name);
+ sql_table *sub = find_sql_table_id(t->s, pt->base.id);
sql_rel *s1, *dup = NULL;
list *uexps = exps_copy(sql, rel->exps), *checked_updates =
new_exp_list(sql->sa);
@@ -681,7 +681,7 @@ rel_generate_subinserts(sql_query *query
for (node *n = t->members.set->h; n; n = n->next) {
sql_part *pt = (sql_part *) n->data;
- sql_table *sub = find_sql_table(t->s, pt->base.name);
+ sql_table *sub = find_sql_table_id(t->s, pt->base.id);
sql_rel *s1 = NULL, *dup = NULL;
sql_exp *le = NULL;
@@ -912,7 +912,7 @@ rel_subtable_insert(sql_query *query, sq
{
mvc *sql = query->sql;
sql_table *upper = t->p; //is part of a partition table and not been
used yet
- sql_part *pt = find_sql_part(upper, t->base.name);
+ sql_part *pt = find_sql_part_id(upper, t->base.id);
sql_rel *anti_dup = rel_create_common_relation(sql, rel, upper), *left
= rel->l;
sql_exp *anti_exp = NULL, *anti_le =
rel_generate_anti_insert_expression(sql, &anti_dup, upper), *aggr = NULL,
*exception = NULL, *anti_nils = NULL;
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -326,7 +326,7 @@ initialize_sql_parts(mvc *sql, sql_table
for (node *n = mt->members.set->h; n; n = n->next) {
sql_part *next = (sql_part*) n->data, *p =
SA_ZNEW(tr->sa, sql_part);
- sql_table *pt = find_sql_table(mt->s, next->base.name);
+ sql_table *pt = find_sql_table_id(mt->s, next->base.id);
base_init(tr->sa, &p->base, pt->base.id, TR_NEW,
pt->base.name);
p->t = mt;
@@ -409,7 +409,7 @@ initialize_sql_parts(mvc *sql, sql_table
cs_del(&mt->members, n, 0);
for (node *n = new->h; n; n = n->next) {
sql_part *next = (sql_part*) n->data;
- sql_table *pt = find_sql_table(mt->s, next->base.name);
+ sql_table *pt = find_sql_table_id(mt->s, next->base.id);
sql_part *err = NULL;
pt->p = mt;
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -210,9 +210,11 @@ find_sql_column(sql_table *t, const char
}
sql_part *
-find_sql_part(sql_table *t, const char *tname)
+find_sql_part_id(sql_table *t, sqlid id)
{
- return _cs_find_name(&t->members, tname);
+ node *n = cs_find_id(&t->members, id);
+
+ return n ? n->data : NULL;
}
sql_table *
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1177,7 +1177,7 @@ set_members(changeset *ts)
if (t->members.set)
for (m = t->members.set->h; m; m = m->next) {
sql_part *p = m->data;
- sql_table *pt = find_sql_table(t->s,
p->base.name);
+ sql_table *pt = find_sql_table_id(t->s,
p->base.id);
pt->p = t;
}
@@ -3231,7 +3231,7 @@ sql_trans_copy_part( sql_trans *tr, sql_
sql_table *sysic = find_sql_table(syss, "objects");
sql_part *npt = SA_ZNEW(tr->sa, sql_part);
- base_init(tr->sa, &npt->base, pt->base.id, TR_NEW, npt->base.name);
+ base_init(tr->sa, &npt->base, pt->base.id, TR_NEW, pt->base.name);
if (isRangePartitionTable(t) || isListPartitionTable(t))
dup_sql_type(tr, t->s, &(pt->tpe), &(npt->tpe));
@@ -3349,7 +3349,7 @@ part_dup(sql_trans *tr, int flags, sql_p
{
sql_allocator *sa = (newFlagSet(flags))?tr->parent->sa:tr->sa;
sql_part *p = SA_ZNEW(sa, sql_part);
- sql_table *pt = find_sql_table(mt->s, op->base.name);
+ sql_table *pt = find_sql_table_id(mt->s, op->base.id);
base_init(sa, &p->base, op->base.id, tr_flag(&op->base, flags),
op->base.name);
if (isRangePartitionTable(mt) || isListPartitionTable(mt))
@@ -4200,7 +4200,7 @@ rollforward_create_part(sql_trans *tr, s
(void) tr;
if (mode == R_APPLY) {
sql_table *mt = p->t;
- sql_table *pt = find_sql_table(mt->s, p->base.name);
+ sql_table *pt = find_sql_table_id(mt->s, p->base.id);
assert(isMergeTable(mt) || isReplicaTable(mt));
if (pt)
@@ -5464,15 +5464,16 @@ sys_drop_columns(sql_trans *tr, sql_tabl
static void
sys_drop_parts(sql_trans *tr, sql_table *t, int drop_action)
{
- node *n;
-
if (cs_size(&t->members)) {
- for (n = t->members.set->h; n; ) {
+ for (node *n = t->members.set->h; n; ) {
sql_part *pt = n->data;
- sql_table *tt = find_sql_table(t->s, pt->base.name);
n = n->next;
- sql_trans_del_table(tr, t, tt, drop_action);
+ if ((drop_action == DROP_CASCADE_START || drop_action
== DROP_CASCADE) &&
+ tr->dropped && list_find_id(tr->dropped,
pt->base.id))
+ continue;
+
+ sql_trans_del_table(tr, t, find_sql_table_id(t->s,
pt->base.id), drop_action);
}
}
}
@@ -6030,7 +6031,7 @@ sql_trans_add_range_partition(sql_trans
p->t = mt;
dup_sql_type(tr, mt->s, &tpe, &(p->tpe));
} else {
- p = find_sql_part(mt, pt->base.name);
+ p = find_sql_part_id(mt, pt->base.id);
}
/* add range partition values */
@@ -6106,7 +6107,7 @@ sql_trans_add_value_partition(sql_trans
dup_sql_type(tr, mt->s, &tpe, &(p->tpe));
} else {
rids *rs;
- p = find_sql_part(mt, pt->base.name);
+ p = find_sql_part_id(mt, pt->base.id);
rs = table_funcs.rids_select(tr, find_sql_column(values,
"table_id"), &pt->base.id, &pt->base.id, NULL);
for (rid = table_funcs.rids_next(rs); !is_oid_nil(rid); rid =
table_funcs.rids_next(rs)) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list