Changeset: a3bfe5fde436 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a3bfe5fde436
Modified Files:
        clients/odbc/driver/SQLTables.c
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_select.c
        tools/merovingian/daemon/controlrunner.c
Branch: Jul2017
Log Message:

Merged


diffs (120 lines):

diff --git a/clients/odbc/driver/SQLTables.c b/clients/odbc/driver/SQLTables.c
--- a/clients/odbc/driver/SQLTables.c
+++ b/clients/odbc/driver/SQLTables.c
@@ -295,7 +295,7 @@ MNDBTables(ODBCStmt *stmt,
                            "sys.env() e "
                       "where s.id = t.schema_id and "
                             "e.name = 'gdk_dbname'");
-               //assert(strlen(query) < 1100);
+               assert(strlen(query) < 1900);
                query_end += strlen(query_end);
 
                /* dependent on the input parameter values we must add a
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
@@ -7335,7 +7335,7 @@ rel_split_outerjoin(int *changes, mvc *s
                e = rel->exps->h->data;
                nll->exps = exps_copy(sql->sa, e->l);
                nlr->exps = exps_copy(sql->sa, e->r);
-               nl = rel_or( sql, nll, nlr, NULL, NULL, NULL);
+               nl = rel_or( sql, NULL, nll, nlr, NULL, NULL, NULL);
 
                if (rel->op == op_full) {
                        l = rel_dup(l);
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1095,9 +1095,9 @@ rel_push_join(mvc *sql, sql_rel *rel, sq
 }
 
 sql_rel *
-rel_or(mvc *sql, sql_rel *l, sql_rel *r, list *oexps, list *lexps, list *rexps)
+rel_or(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, list *oexps, list 
*lexps, list *rexps)
 {
-       sql_rel *rel, *ll = l->l, *rl = r->l;
+       sql_rel *ll = l->l, *rl = r->l;
        list *ls, *rs;
 
        assert(!lexps || l == r);
@@ -1115,7 +1115,7 @@ rel_or(mvc *sql, sql_rel *l, sql_rel *r,
 
        /* favor or expressions over union */
        if (l->op == r->op && l->op == op_select &&
-           ll == rl && !rel_is_ref(l) && !rel_is_ref(r)) {
+           ll == rl && ll == rel && !rel_is_ref(l) && !rel_is_ref(r)) {
                sql_exp *e = exp_or(sql->sa, l->exps, r->exps);
                list *nl = new_exp_list(sql->sa); 
                
@@ -1135,8 +1135,13 @@ rel_or(mvc *sql, sql_rel *l, sql_rel *r,
                return l;
        }
 
-       ls = rel_projections(sql, l, NULL, 1, 1);
-       rs = rel_projections(sql, r, NULL, 1, 1);
+       if (rel) {
+               ls = rel_projections(sql, rel, NULL, 1, 1);
+               rs = rel_projections(sql, rel, NULL, 1, 1);
+       } else {
+               ls = rel_projections(sql, l, NULL, 1, 1);
+               rs = rel_projections(sql, r, NULL, 1, 1);
+       }
        set_processed(l);
        set_processed(r);
        rel = rel_setop_check_types(sql, l, r, ls, rs, op_union);
diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -70,7 +70,7 @@ extern list *rel_projections(mvc *sql, s
 
 extern sql_rel *rel_push_select(mvc *sql, sql_rel *rel, sql_exp *ls, sql_exp 
*e);
 extern sql_rel *rel_push_join(mvc *sql, sql_rel *rel, sql_exp *ls, sql_exp 
*rs, sql_exp *rs2, sql_exp *e);
-extern sql_rel *rel_or(mvc *sql, sql_rel *l, sql_rel *r, list *oexps, list 
*lexps, list *rexps);
+extern sql_rel *rel_or(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, list 
*oexps, list *lexps, list *rexps);
 
 extern sql_table *rel_ddl_table_get(sql_rel *r);
 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1062,9 +1062,9 @@ rel_column_ref(mvc *sql, sql_rel **rel, 
                        if (rel && *rel && (*rel)->card == CARD_AGGR && f == 
sql_sel) {
                                sql_rel *gb = *rel;
 
-                               while(gb->l && !is_groupby(gb->op))
+                               while(gb->l && !is_groupby(gb->op) && 
is_project(gb->op))
                                        gb = gb->l;
-                               if (gb && gb->l && rel_bind_column2(sql, gb->l, 
tname, cname, f))
+                               if (gb && is_groupby(gb->op) && gb->l && 
rel_bind_column2(sql, gb->l, tname, cname, f))
                                        return sql_error(sql, 02, "SELECT: 
cannot use non GROUP BY column '%s.%s' in query results without an aggregate 
function", tname, cname);
                        }
                        return sql_error(sql, 02, "42S22!SELECT: no such column 
'%s.%s'", tname, cname);
@@ -2353,6 +2353,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                                rexps = rr->exps;
                                rr = rr->l;
                        }
+                       rel = NULL;
                        sql->pushdown = pushdown;
                } else {
                        lr = rel_logical_exp(sql, lr, lo, f);
@@ -2361,7 +2362,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
 
                if (!lr || !rr)
                        return NULL;
-               return rel_or(sql, lr, rr, exps, lexps, rexps);
+               return rel_or(sql, rel, lr, rr, exps, lexps, rexps);
        }
        case SQL_AND:
        {
diff --git a/tools/merovingian/daemon/controlrunner.c 
b/tools/merovingian/daemon/controlrunner.c
--- a/tools/merovingian/daemon/controlrunner.c
+++ b/tools/merovingian/daemon/controlrunner.c
@@ -169,7 +169,7 @@ control_authorise(
        }
        free(pwd);
 
-       mnstr_printf(fout, "=OK");
+       mnstr_printf(fout, "=OK\n");
        mnstr_flush(fout);
 
        return 1;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to