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