Changeset: db8112175827 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=db8112175827 Modified Files: sql/backends/monet5/rel_bin.c sql/server/rel_exp.c sql/test/BugTracker-2013/Tests/case_when.Bug-3395.sql Branch: Feb2013 Log Message:
fixed bug 3395 (only calc functions which 'require' a candidate list (div), should be called with an extra argument, ie not ifthenelse). also fixed the test itself (removed extra table, and bogus cast statements). diffs (58 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 @@ -446,7 +446,7 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left nrcols = es->nrcols; list_append(l,es); } - if (sel && strcmp(sql_func_mod(f->func), "calc") == 0 && nrcols) + if (sel && strcmp(sql_func_mod(f->func), "calc") == 0 && nrcols && strcmp(sql_func_imp(f->func), "ifthenelse") != 0) list_append(l,sel); } /* Window expressions are handled differently. diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -763,7 +763,9 @@ exp_match_exp( sql_exp *e1, sql_exp *e2) break; case e_func: if (!subfunc_cmp(e1->f, e2->f) && /* equal functions */ - exp_match_list(e1->l, e2->l)) + exp_match_list(e1->l, e2->l) && + /* optional order by expressions */ + exp_match_list(e1->r, e2->r)) return 1; break; case e_atom: diff --git a/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.sql b/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.sql --- a/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.sql +++ b/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.sql @@ -1,6 +1,5 @@ create table aaa1 (a varchar(100), b varchar(100), c int); create table aaa2 (a varchar(100), b varchar(100), c decimal(9,6)); -create table aaa3 (a varchar(100), b varchar(100), c double); insert into aaa1 values ('a1aaaaaaaaaaaaaaaaa', 'b1bbbbbbbbbbbbbbbbbb', 100); insert into aaa1 values ('a2aaaaaaaaaaaaaaaaa', 'b2bbbbbbbbbbbbbbbbbb', 100); @@ -10,11 +9,7 @@ insert into aaa2 values ('a1aaaaaaaaaaaa insert into aaa2 values ('a2aaaaaaaaaaaaaaaaa', 'b2bbbbbbbbbbbbbbbbbb', 100); insert into aaa2 values ('a3aaaaaaaaaaaaaaaaa', 'b3bbbbbbbbbbbbbbbbbb', 100); -insert into aaa3 values ('a1aaaaaaaaaaaaaaaaa', 'b1bbbbbbbbbbbbbbbbbb', 100.0); -insert into aaa3 values ('a2aaaaaaaaaaaaaaaaa', 'b2bbbbbbbbbbbbbbbbbb', 100.0); -insert into aaa3 values ('a3aaaaaaaaaaaaaaaaa', 'b3bbbbbbbbbbbbbbbbbb', 100.0); - -SELECT a, CASE WHEN cast (c >=100.000000 +SELECT a, CASE WHEN c >=100.000000 AND c <=200.000000 THEN 'IntValue1' WHEN c>=200.000000 AND c <=300.000000 THEN 'IntValue2' ELSE 'Out of range' END AS CaseSentence @@ -109,7 +104,7 @@ or ); -- The double version -SELECT a, CASE WHEN cast (c >=100.000000 +SELECT a, CASE WHEN c >=100.000000 AND c <=200.000000 THEN 'IntValue1' WHEN c>=200.000000 AND c <=300.000000 THEN 'IntValue2' ELSE 'Out of range' END AS CaseSentence _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list