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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list