Changeset: 382f586de2c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/382f586de2c4
Modified Files:
        sql/rel.txt
        sql/server/rel_basetable.c
        sql/server/rel_basetable.h
        sql/server/rel_optimizer.c
Branch: default
Log Message:

Move rel_rename_part to the right translation unit


diffs (175 lines):

diff --git a/sql/rel.txt b/sql/rel.txt
--- a/sql/rel.txt
+++ b/sql/rel.txt
@@ -4,7 +4,7 @@ BASETABLE
        -> exps         is list of column expressions (also used for aliases)
        -> l            (sql_table)
        -> r            rel_base_t { alias table name, disallowed (read 
access), bitvector of used columns/tid/idxs
-       -> r            rel_optimizer rel_rename_part puts parent merge table 
in there
+       -> r            rel_rename_part call puts parent merge table in there
 
 TABLE  (card MULTI)
        -> flags        TABLE_PROD_FUNC, TABLE_FROM_RELATION, TRIGGER_WRAPPER
diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -419,6 +419,72 @@ rewrite_basetable(mvc *sql, sql_rel *rel
        return rel;
 }
 
+sql_rel *
+rel_rename_part(mvc *sql, sql_rel *p, sql_rel *mt_rel, const char *mtalias)
+{
+       sql_table *mt = rel_base_table(mt_rel), *t = rel_base_table(p);
+
+       assert(!p->exps);
+       p->exps = sa_list(sql->sa);
+       const char *pname = t->base.name;
+       if (isRemote(t))
+               pname = mapiuri_table(t->query, sql->sa, pname);
+       for (node *n = mt_rel->exps->h; n; n = n->next) {
+               sql_exp *e = n->data;
+               node *cn = NULL, *ci = NULL;
+               const char *nname = exp_name(e);
+
+               if (nname[0] == '%' && strcmp(nname, TID) == 0) {
+                       list_append(p->exps, exp_alias(sql->sa, mtalias, TID, 
pname, TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1));
+                       rel_base_use_tid(sql, p);
+               } else if (nname[0] != '%' && (cn = ol_find_name(mt->columns, 
nname))) {
+                       sql_column *c = cn->data, *rc = ol_fetch(t->columns, 
c->colnr);
+
+                       /* with name find column in merge table, with colnr 
find column in member */
+                       sql_exp *ne = exp_alias(sql->sa, mtalias, c->base.name, 
pname, rc->base.name, &rc->type, CARD_MULTI, rc->null, 0);
+                       if (rc->t->pkey && 
((sql_kc*)rc->t->pkey->k.columns->h->data)->c == rc) {
+                               prop *p = ne->p = prop_create(sql->sa, 
PROP_HASHCOL, ne->p);
+                               p->value = rc->t->pkey;
+                       } else if (rc->unique == 1) {
+                               prop *p = ne->p = prop_create(sql->sa, 
PROP_HASHCOL, ne->p);
+                               p->value = NULL;
+                       }
+                       set_basecol(ne);
+                       rel_base_use(sql, p, rc->colnr);
+                       list_append(p->exps, ne);
+               } else if (nname[0] == '%' && ol_length(mt->idxs) && (ci = 
ol_find_name(mt->idxs, nname + 1))) {
+                       sql_idx *i = ci->data, *ri = NULL;
+
+                       /* indexes don't have a number field like 'colnr', so 
get the index the old way */
+                       for (node *nn = mt->idxs->l->h, *mm = t->idxs->l->h; nn 
&& mm ; nn = nn->next, mm = mm->next) {
+                               sql_idx *ii = nn->data;
+
+                               if (ii->base.id == i->base.id) {
+                                       ri = mm->data;
+                                       break;
+                               }
+                       }
+
+                       assert((!hash_index(ri->type) || 
list_length(ri->columns) > 1) && idx_has_column(ri->type));
+                       sql_subtype *t = (ri->type == join_idx) ? 
sql_bind_localtype("oid") : sql_bind_localtype("lng");
+                       char *iname1 = sa_strconcat(sql->sa, "%", 
i->base.name), *iname2 = sa_strconcat(sql->sa, "%", ri->base.name);
+
+                       sql_exp *ne = exp_alias(sql->sa, mtalias, iname1, 
pname, iname2, t, CARD_MULTI, has_nil(e), 1);
+                       /* index names are prefixed, to make them independent */
+                       if (hash_index(ri->type)) {
+                               prop *p = ne->p = prop_create(sql->sa, 
PROP_HASHIDX, ne->p);
+                               p->value = ri;
+                       } else if (ri->type == join_idx) {
+                               prop *p = ne->p = prop_create(sql->sa, 
PROP_JOINIDX, ne->p);
+                               p->value = ri;
+                       }
+                       list_append(p->exps, ne);
+               }
+       }
+       rel_base_set_mergetable(p, mt);
+       return p;
+}
+
 void
 rel_base_dump_exps( stream *fout, sql_rel *rel)
 {
diff --git a/sql/server/rel_basetable.h b/sql/server/rel_basetable.h
--- a/sql/server/rel_basetable.h
+++ b/sql/server/rel_basetable.h
@@ -40,6 +40,7 @@ extern list *rel_base_projection( mvc *s
 extern list *rel_base_project_all( mvc *sql, sql_rel *rel, char *tname); /* 
select * from t */
 extern sql_rel *rel_base_add_columns( mvc *sql, sql_rel *r);
 extern sql_rel *rewrite_basetable(mvc *sql, sql_rel *rel);
+extern sql_rel *rel_rename_part(mvc *sql, sql_rel *p, sql_rel *mt_rel, const 
char *mtalias);
 
 extern void rel_base_dump_exps( stream *fout, sql_rel *rel);
 extern int rel_base_has_column_privileges( mvc *sql, sql_rel *rel);
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
@@ -8654,72 +8654,6 @@ exp_range_overlap(atom *min, atom *max, 
        return 1;
 }
 
-static sql_rel *
-rel_rename_part(mvc *sql, sql_rel *p, sql_rel *mt_rel, const char *mtalias)
-{
-       sql_table *mt = rel_base_table(mt_rel), *t = rel_base_table(p);
-
-       assert(!p->exps);
-       p->exps = sa_list(sql->sa);
-       const char *pname = t->base.name;
-       if (isRemote(t))
-               pname = mapiuri_table(t->query, sql->sa, pname);
-       for (node *n = mt_rel->exps->h; n; n = n->next) {
-               sql_exp *e = n->data;
-               node *cn = NULL, *ci = NULL;
-               const char *nname = exp_name(e);
-
-               if (strcmp(nname, TID) == 0) {
-                       list_append(p->exps, exp_alias(sql->sa, mtalias, TID, 
pname, TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1));
-                       rel_base_use_tid(sql, p);
-               } else if (nname[0] != '%' && (cn = ol_find_name(mt->columns, 
nname))) {
-                       sql_column *c = cn->data, *rc = ol_fetch(t->columns, 
c->colnr);
-
-                       /* with name find column in merge table, with colnr 
find column in member */
-                       sql_exp *ne = exp_alias(sql->sa, mtalias, c->base.name, 
pname, rc->base.name, &rc->type, CARD_MULTI, rc->null, 0);
-                       if (rc->t->pkey && 
((sql_kc*)rc->t->pkey->k.columns->h->data)->c == rc) {
-                               prop *p = ne->p = prop_create(sql->sa, 
PROP_HASHCOL, ne->p);
-                               p->value = rc->t->pkey;
-                       } else if (rc->unique == 1) {
-                               prop *p = ne->p = prop_create(sql->sa, 
PROP_HASHCOL, ne->p);
-                               p->value = NULL;
-                       }
-                       set_basecol(ne);
-                       rel_base_use(sql, p, rc->colnr);
-                       list_append(p->exps, ne);
-               } else if (nname[0] == '%' && ol_length(mt->idxs) && (ci = 
ol_find_name(mt->idxs, nname + 1))) {
-                       sql_idx *i = ci->data, *ri = NULL;
-
-                       /* indexes don't have a number field like 'colnr', so 
get the index the old way */
-                       for (node *nn = mt->idxs->l->h, *mm = t->idxs->l->h; nn 
&& mm ; nn = nn->next, mm = mm->next) {
-                               sql_idx *ii = nn->data;
-
-                               if (ii->base.id == i->base.id) {
-                                       ri = mm->data;
-                                       break;
-                               }
-                       }
-
-                       assert((!hash_index(ri->type) || 
list_length(ri->columns) > 1) && idx_has_column(ri->type));
-                       sql_subtype *t = (ri->type == join_idx) ? 
sql_bind_localtype("oid") : sql_bind_localtype("lng");
-                       char *iname1 = sa_strconcat(sql->sa, "%", 
i->base.name), *iname2 = sa_strconcat(sql->sa, "%", ri->base.name);
-
-                       sql_exp *ne = exp_alias(sql->sa, mtalias, iname1, 
pname, iname2, t, CARD_MULTI, has_nil(e), 1);
-                       /* index names are prefixed, to make them independent */
-                       if (hash_index(ri->type)) {
-                               prop *p = ne->p = prop_create(sql->sa, 
PROP_HASHIDX, ne->p);
-                               p->value = ri;
-                       } else if (ri->type == join_idx) {
-                               prop *p = ne->p = prop_create(sql->sa, 
PROP_JOINIDX, ne->p);
-                               p->value = ri;
-                       }
-                       list_append(p->exps, ne);
-               }
-       }
-       rel_base_set_mergetable(p, mt);
-       return p;
-}
-
 typedef struct {
        atom *lval;
        atom *hval;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to