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