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

Reply via email to