Changeset: 0a17396af982 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0a17396af982
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: pp_hashjoin
Log Message:

protect against empty hash tables.


diffs (56 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
@@ -8553,30 +8553,32 @@ output_rel_bin(backend *be, sql_rel *rel
                                                 * op1 == stmt_list of hash 
stmts (attrs of buildhash),
                                                 * op2 == hp_gid,
                                                 * op3 == freq  */
-                                               list *nl = sa_list(be->mvc->sa);
-                                               for(node *n = s->op4.lval->h, 
*m = rel->attr?rel->attr->h:rel->exps->h; n && m; n = n->next, m = m->next ){
-                                                       stmt *ps = n->data;
-                                                       sql_exp *pe = m->data;
-                                                       stmt *nps = 
stmt_alias(be, ps, pe->alias.label, ps->tname, ps->cname);
-                                                       append(nl, nps);
-                                               }
-                                               stmt *ns = stmt_list(be, nl);
-                                               if (s->op1) {
+                                               if (rel->attr || rel->exps) {
                                                        list *nl = 
sa_list(be->mvc->sa);
-                                                       for(node *n = 
s->op1->op4.lval->h, *m = rel->exps->h; n && m; n = n->next, m = m->next) {
-                                                               stmt *hs = 
n->data;
-                                                               sql_exp *he = 
m->data;
-                                                               stmt *nhs = 
stmt_alias(be, hs, he->alias.label, hs->tname, hs->cname);
-                                                               append(nl, nhs);
+                                                       for(node *n = 
s->op4.lval->h, *m = rel->attr?rel->attr->h:rel->exps->h; n && m; n = n->next, 
m = m->next ){
+                                                               stmt *ps = 
n->data;
+                                                               sql_exp *pe = 
m->data;
+                                                               stmt *nps = 
stmt_alias(be, ps, pe->alias.label, ps->tname, ps->cname);
+                                                               append(nl, nps);
                                                        }
-                                                       stmt *hs = 
stmt_list(be, nl);
-                                                       ns->op1 = hs;
+                                                       stmt *ns = 
stmt_list(be, nl);
+                                                       if (s->op1) {
+                                                               list *nl = 
sa_list(be->mvc->sa);
+                                                               for(node *n = 
s->op1->op4.lval->h, *m = rel->exps->h; n && m; n = n->next, m = m->next) {
+                                                                       stmt 
*hs = n->data;
+                                                                       sql_exp 
*he = m->data;
+                                                                       stmt 
*nhs = stmt_alias(be, hs, he->alias.label, hs->tname, hs->cname);
+                                                                       
append(nl, nhs);
+                                                               }
+                                                               stmt *hs = 
stmt_list(be, nl);
+                                                               ns->op1 = hs;
+                                                       }
+                                                       ns->op2 = s->op2;
+                                                       ns->op3 = s->op3;
+                                                       s = ns;
                                                }
-                                               ns->op2 = s->op2;
-                                               ns->op3 = s->op3;
-                                               s = ns;
                                                append(nrefs, rel);
-                                               append(nrefs, ns);
+                                               append(nrefs, s);
                                        }
                                }
                                assert(s);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to