Changeset: 6b8052aa7e29 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6b8052aa7e29
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: nested
Log Message:

handle searching for subtables better


diffs (73 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2594,8 +2594,21 @@ rel2bin_sql_table(backend *be, sql_table
        return stmt_list(be, l);
 }
 
+static node *
+find_next_sql_column(sql_table *t, node *n, const char *name)
+{
+       if (!n)
+               n = t->columns->l->h;
+       for(; n; n = n->next) {
+               sql_column *c = n->data;
+               if (strcmp(c->base.name, name) == 0)
+                       break;
+       }
+       return n;
+}
+
 static stmt *
-rel2bin_subtable(backend *be, sql_table *t, stmt *dels, sql_column *c, list 
*exps)
+rel2bin_subtable(backend *be, sql_table *t, stmt *dels, sql_column *c, node 
*cn, list *exps)
 {
        mvc *sql = be->mvc;
        list *l = sa_list(sql->sa);
@@ -2606,6 +2619,7 @@ rel2bin_subtable(backend *be, sql_table 
                if (!t)
                        return NULL;
                dels = stmt_tid(be, t, false);
+               cn = NULL;
        }
        for (node *en = exps->h; en; en = en->next) {
                sql_exp *exp = en->data;
@@ -2631,10 +2645,11 @@ rel2bin_subtable(backend *be, sql_table 
                                continue;
                        s = stmt_idx(be, i, dels, dels->partition);
                } else {
-                       sql_column *c = find_sql_column(t, oname);
-                       assert(c);
+                       cn = find_next_sql_column(t, cn, oname);
+                       assert(cn);
+                       sql_column *c = cn->data;
                        if (exp->f && (c->type.multiset || 
c->type.type->composite)) {
-                               s = rel2bin_subtable(be, t, dels, c, exp->f);
+                               s = rel2bin_subtable(be, t, dels, c, cn, 
exp->f);
                                if (!s)
                                        return s;
                                s->nested = true;
@@ -2669,7 +2684,7 @@ rel2bin_basetable(backend *be, sql_rel *
        list *l = sa_list(sql->sa);
        bool complex = (t->multiset || t->composite);
        stmt *dels = stmt_tid(be, t, !complex?rel->flag == 
REL_PARTITION:false), *col = NULL;
-       node *en;
+       node *en, *cn = NULL;
 
        if (l == NULL || dels == NULL)
                return NULL;
@@ -2722,10 +2737,11 @@ rel2bin_basetable(backend *be, sql_rel *
                                continue;
                        s = (i == fi) ? col : stmt_idx(be, i, 
complex?dels:NULL, dels->partition);
                } else {
-                       sql_column *c = find_sql_column(t, oname);
-                       assert(c);
+                       cn = find_next_sql_column(t, cn, oname);
+                       assert(cn);
+                       sql_column *c = cn->data;
                        if (exp->f && (c->type.multiset || 
c->type.type->composite)) {
-                               s = rel2bin_subtable(be, t, dels, c, exp->f);
+                               s = rel2bin_subtable(be, t, dels, c, cn, 
exp->f);
                                if (!s)
                                        return s;
                                s->nested = true;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to