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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list