Changeset: 4c126b9c7a7c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4c126b9c7a7c
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_schema.c
        sql/storage/store.c
Branch: Oct2020
Log Message:

Ported important Jun2020-mmt fixes into Oct2020


diffs (109 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
@@ -24,6 +24,18 @@ typedef struct global_props {
 
 static sql_subfunc *find_func(mvc *sql, char *name, list *exps);
 
+static int
+find_member_pos(list *l, sql_table *t)
+{
+       int i = 0;
+       for (node *n = l->h; n ; n = n->next, i++) {
+               sql_part *pt = n->data;
+               if (pt->member->base.id == t->base.id)
+                       return i;
+       }
+       return -1;
+}
+
 /* The important task of the relational optimizer is to optimize the
    join order.
 
@@ -67,7 +79,7 @@ name_find_column( sql_rel *rel, const ch
                        if (strcmp(c->base.name, name) == 0) {
                                *bt = rel;
                                if (pnr < 0 || (mt &&
-                                       list_position(mt->members, c->t) == 
pnr))
+                                       find_member_pos(mt->members, c->t) == 
pnr))
                                        return c;
                        }
                }
@@ -77,7 +89,7 @@ name_find_column( sql_rel *rel, const ch
                        if (strcmp(i->base.name, name+1 /* skip % */) == 0) {
                                *bt = rel;
                                if (pnr < 0 || (mt &&
-                                       list_position(mt->members, i->t) == 
pnr)) {
+                                       find_member_pos(mt->members, i->t) == 
pnr)) {
                                        sql_kc *c = i->columns->h->data;
                                        return c->c;
                                }
@@ -4941,7 +4953,7 @@ rel_part_nr( sql_rel *rel, sql_exp *e )
                return -1;
        sql_table *pp = c->t;
        sql_table *mt = bt->r;
-       return list_position(mt->members, pp);
+       return find_member_pos(mt->members, pp);
 }
 
 static int
@@ -4964,7 +4976,7 @@ rel_uses_part_nr( sql_rel *rel, sql_exp 
        if (c && bt && bt->r) {
                sql_table *pp = c->t;
                sql_table *mt = bt->r;
-               if (list_position(mt->members, pp) == pnr)
+               if (find_member_pos(mt->members, pp) == pnr)
                        return 1;
        }
        /* for projects we may need to do a rename! */
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -1557,9 +1557,6 @@ sql_alter_table(sql_query *query, dlist 
                return rel_drop(sql->sa, ddl_drop_constraint, sname, kname, 
drop_action, 0);
        }
 
-       if (t->s && !nt->s)
-               nt->s = t->s;
-
        res = rel_table(sql, ddl_alter_table, sname, nt, 0);
 
        if (!isTable(nt))
@@ -2113,8 +2110,6 @@ rel_create_index(mvc *sql, char *iname, 
 
        if (t->persistence != SQL_DECLARED_TABLE)
                sname = s->base.name;
-       if (t->s && !nt->s)
-               nt->s = t->s;
 
        /* add index here */
        i = mvc_create_idx(sql, nt, iname, itype);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1767,6 +1767,8 @@ dup_sql_part(sql_allocator *sa, sql_tabl
        }
        list_append(mt->members, p);
        p->t = mt;
+       p->member = find_sql_table_id(mt->s, op->member->base.id);
+       assert(p->member);
        return p;
 }
 
@@ -1781,6 +1783,7 @@ dup_sql_table(sql_allocator *sa, sql_tab
        nt->access = t->access;
        nt->partition = t->partition;
        nt->query = (t->query) ? sa_strdup(sa, t->query) : NULL;
+       nt->s = t->s;
 
        if (isPartitionedByExpressionTable(nt)) {
                nt->part.pexp = SA_ZNEW(sa, sql_expression);
@@ -3464,7 +3467,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 *mt = find_sql_table_id(s, op->t->base.id);
-       sql_table *member = find_sql_table_id(s, op->base.id);
+       sql_table *member = find_sql_table_id(s, op->member->base.id);
 
        base_init(sa, &p->base, op->base.id, tr_flag(&op->base, flags), 
op->base.name);
        if (isRangePartitionTable(mt) || isListPartitionTable(mt))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to