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

Reply via email to