Changeset: 6cd048fb16e1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6cd048fb16e1 Modified Files: sql/server/rel_optimizer.c sql/server/rel_select.c sql/test/BugTracker-2013/Tests/numeric-column-alias.Bug-3279.stable.out sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out Branch: sq2default Log Message:
fixed merge_project optimizer diffs (137 lines): 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 @@ -2279,7 +2279,7 @@ exp_push_down_prj(mvc *sql, sql_exp *e, ne = exps_bind_column(f->exps, e->r, NULL); if (!ne || (ne->type != e_column && ne->type != e_atom)) return NULL; - while (ne && f->op == op_project && ne->type == e_column) { + while (ne && has_label(ne) && f->op == op_project && ne->type == e_column) { sql_exp *oe = e, *one = ne; e = ne; @@ -3764,7 +3764,7 @@ rel_project_cse(int *changes, mvc *sql, for (n=rel->exps->h; n && !needed; n = n->next) { sql_exp *e1 = n->data; - if (e1->type != e_column && e1->type != e_atom && exp_name(e1)) { + if (e1->type != e_column && !exp_is_atom(e1) && exp_name(e1)) { for (m=n->next; m; m = m->next){ sql_exp *e2 = m->data; @@ -3781,7 +3781,7 @@ rel_project_cse(int *changes, mvc *sql, for (n=rel->exps->h; n; n = n->next) { sql_exp *e1 = n->data; - if (e1->type != e_column && e1->type != e_atom && exp_name(e1)) { + if (e1->type != e_column && !exp_is_atom(e1) && exp_name(e1)) { for (m=nexps->h; m; m = m->next){ sql_exp *e2 = m->data; 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 @@ -1022,9 +1022,9 @@ rel_column_ref(sql_query *query, sql_rel } if (!exp && !var) return sql_error(sql, 02, SQLSTATE(42000) "SELECT: identifier '%s' unknown", name); - if (exp && inner && inner->card <= CARD_AGGR && exp->card > CARD_AGGR && is_sql_sel(f) && !is_sql_aggr(f)) + if (exp && inner && inner->card <= CARD_AGGR && exp->card > CARD_AGGR && (is_sql_sel(f) || is_sql_having(f)) && !is_sql_aggr(f)) return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in query results without an aggregate function", name); - if (exp && inner && is_groupby(inner->op) && !is_sql_aggr(f) && !is_freevar(exp)) + if (exp && inner && is_groupby(inner->op) && !is_sql_aggr(f) && !is_freevar(exp)) exp = rel_groupby_add_aggr(sql, inner, exp); } else if (dlist_length(l) == 2) { char *tname = l->h->data.sval; @@ -1081,9 +1081,9 @@ rel_column_ref(sql_query *query, sql_rel } if (!exp) return sql_error(sql, 02, SQLSTATE(42S22) "SELECT: no such column '%s.%s'", tname, cname); - if (exp && inner && inner->card <= CARD_AGGR && exp->card > CARD_AGGR && is_sql_sel(f) && !is_sql_aggr(f)) + if (exp && inner && inner->card <= CARD_AGGR && exp->card > CARD_AGGR && (is_sql_sel(f) || is_sql_having(f)) && !is_sql_aggr(f)) return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s.%s' in query results without an aggregate function", tname, cname); - if (exp && inner && is_groupby(inner->op) && !is_sql_aggr(f) && !is_freevar(exp)) + if (exp && inner && is_groupby(inner->op) && !is_sql_aggr(f) && !is_freevar(exp)) exp = rel_groupby_add_aggr(sql, inner, exp); } else if (dlist_length(l) >= 3) { return sql_error(sql, 02, SQLSTATE(42000) "TODO: column names of level >= 3"); diff --git a/sql/test/BugTracker-2013/Tests/numeric-column-alias.Bug-3279.stable.out b/sql/test/BugTracker-2013/Tests/numeric-column-alias.Bug-3279.stable.out --- a/sql/test/BugTracker-2013/Tests/numeric-column-alias.Bug-3279.stable.out +++ b/sql/test/BugTracker-2013/Tests/numeric-column-alias.Bug-3279.stable.out @@ -57,7 +57,7 @@ stdout of test 'numeric-column-alias.Bug # D1.c3 as c4, # D1.c4 as c5 #from SAWITH0 D1; -% .L13, .L15, .L17, .L21, .L23 # table_name +% ., .d1, .d1, .d1, .d1 # table_name % c1, c2, c3, c4, c5 # name % tinyint, char, char, char, tinyint # type % 1, 1, 1, 1, 1 # length @@ -73,7 +73,7 @@ stdout of test 'numeric-column-alias.Bug # D1.c4 as c5 #from SAWITH0 D1 #order by 5, 4, 3, 2; -% .L13, .L15, .L17, .L21, .L23 # table_name +% ., .d1, .d1, .d1, .d1 # table_name % c1, c2, c3, c4, c5 # name % tinyint, char, char, char, tinyint # type % 1, 1, 1, 1, 1 # length @@ -89,7 +89,7 @@ stdout of test 'numeric-column-alias.Bug # D1.c4 as a5 #from SAWITH0 D1 #order by 5, 4, 3, 2; -% .L13, .L15, .L17, .L21, .L23 # table_name +% ., ., ., ., . # table_name % c1, a2, a3, a4, a5 # name % tinyint, char, char, char, tinyint # type % 1, 1, 1, 1, 1 # length @@ -107,7 +107,7 @@ stdout of test 'numeric-column-alias.Bug # D1.c4 as c2, # D1.c2 as c7 # from SAWITH1 D1 ); -% .L37, .L37 # table_name +% .%15, .%15 # table_name % c2, c7 # name % varchar, tinyint # type % 1, 1 # length @@ -127,7 +127,7 @@ stdout of test 'numeric-column-alias.Bug # D1.c4 as c200000, # D1.c2 as c7 #from SAWITH1 D1 ); -% .L37, .L37 # table_name +% .%15, .%15 # table_name % c200000, c7 # name % varchar, tinyint # type % 1, 1 # length @@ -142,7 +142,7 @@ stdout of test 'numeric-column-alias.Bug # cast(NULL as VARCHAR ( 1 ) ) as c2, # D1.c2 as c7 #from SAWITH0 D1; -% .L23, .L25 # table_name +% .%10, .%11 # table_name % c2, c7 # name % varchar, tinyint # type % 0, 1 # length @@ -156,7 +156,7 @@ stdout of test 'numeric-column-alias.Bug # D1.c2 as c7 #from SAWITH0 D1 #ORDER BY 1; -% .L23, .L25 # table_name +% ., . # table_name % c2, c7 # name % varchar, tinyint # type % 0, 1 # length diff --git a/sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out b/sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out --- a/sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out +++ b/sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out @@ -68,8 +68,8 @@ stdout of test 'querylog.Bug-3607` in di % oid, timestamp, timestamp, clob, bigint, bigint, bigint, int, int # type % 3, 26, 26, 0, 1, 1, 1, 1, 1 # length #select 1; -% .L2 # table_name -% L2 # name +% . # table_name +% single_value # name % tinyint # type % 1 # length [ 1 ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list