Changeset: 105e394fde07 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=105e394fde07
Added Files:
sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.err
sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.out
Modified Files:
sql/backends/monet5/rel_bin.c
sql/server/rel_exp.c
sql/test/BugTracker-2013/Tests/case_when.Bug-3395.sql
Branch: default
Log Message:
merged with Feb2013
diffs (255 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
@@ -391,7 +391,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
diff --git a/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.err
b/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.err
@@ -0,0 +1,35 @@
+stderr of test 'case_when.Bug-3395` in directory 'sql/test/BugTracker-2013`
itself:
+
+
+# 13:51:22 >
+# 13:51:22 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=37890" "--set"
"mapi_usock=/var/tmp/mtest-26250/.s.monetdb.37890" "--set" "monet_prompt="
"--forcemito" "--set" "mal_listing=2"
"--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013"
"--set" "mal_listing=0"
+# 13:51:22 >
+
+# builtin opt gdk_dbpath =
/home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo
+# builtin opt gdk_debug = 0
+# builtin opt gdk_vmtrim = yes
+# builtin opt monet_prompt = >
+# builtin opt monet_daemon = no
+# builtin opt mapi_port = 50000
+# builtin opt mapi_open = false
+# builtin opt mapi_autosense = false
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 37890
+# cmdline opt mapi_usock = /var/tmp/mtest-26250/.s.monetdb.37890
+# cmdline opt monet_prompt =
+# cmdline opt mal_listing = 2
+# cmdline opt gdk_dbpath =
/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013
+# cmdline opt mal_listing = 0
+
+# 13:51:22 >
+# 13:51:22 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-26250" "--port=37890"
+# 13:51:22 >
+
+
+# 13:51:22 >
+# 13:51:22 > "Done."
+# 13:51:22 >
+
diff --git a/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.out
b/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/Tests/case_when.Bug-3395.stable.out
@@ -0,0 +1,152 @@
+stdout of test 'case_when.Bug-3395` in directory 'sql/test/BugTracker-2013`
itself:
+
+
+# 13:51:22 >
+# 13:51:22 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=37890" "--set"
"mapi_usock=/var/tmp/mtest-26250/.s.monetdb.37890" "--set" "monet_prompt="
"--forcemito" "--set" "mal_listing=2"
"--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013"
"--set" "mal_listing=0"
+# 13:51:22 >
+
+# MonetDB 5 server v11.15.18
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2013', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically
linked
+# Found 3.775 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2013 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on
mapi:monetdb://niels.nesco.mine.nu:37890/
+# Listening for UNIX domain connection requests on
mapi:monetdb:///var/tmp/mtest-26250/.s.monetdb.37890
+# MonetDB/GIS module loaded
+# MonetDB/JAQL module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+
+# 13:51:22 >
+# 13:51:22 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-26250" "--port=37890"
+# 13:51:22 >
+
+#create table aaa1 (a varchar(100), b varchar(100), c int);
+#create table aaa2 (a varchar(100), b varchar(100), c decimal(9,6));
+#insert into aaa1 values ('a1aaaaaaaaaaaaaaaaa', 'b1bbbbbbbbbbbbbbbbbb', 100);
+[ 1 ]
+#insert into aaa1 values ('a2aaaaaaaaaaaaaaaaa', 'b2bbbbbbbbbbbbbbbbbb', 100);
+[ 1 ]
+#insert into aaa1 values ('a3aaaaaaaaaaaaaaaaa', 'b3bbbbbbbbbbbbbbbbbb', 100);
+[ 1 ]
+#insert into aaa2 values ('a1aaaaaaaaaaaaaaaaa', 'b1bbbbbbbbbbbbbbbbbb', 100);
+[ 1 ]
+#insert into aaa2 values ('a2aaaaaaaaaaaaaaaaa', 'b2bbbbbbbbbbbbbbbbbb', 100);
+[ 1 ]
+#insert into aaa2 values ('a3aaaaaaaaaaaaaaaaa', 'b3bbbbbbbbbbbbbbbbbb', 100);
+[ 1 ]
+#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
+#FROM aaa1
+#WHERE
+#(
+# a = 'aaa'
+# and
+# (
+# (
+# 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
+# ) = 'IntValue1'
+# )
+#)
+#or
+#(
+# a = 'bbb'
+# and
+# (
+# (
+# CASE WHEN c>=100.000000
+# AND c<=200.000000 THEN 'IntValue1' WHEN c>=200.000000
+% sys.aaa1, sys.L # table_name
+% a, casesentence # name
+% varchar, char # type
+% 0, 12 # length
+#SELECT a, CASE WHEN cast (c as double) >=100.000000
+# AND cast(c as double) <=200.000000 THEN 'IntValue1' WHEN cast(c
as double)>=200.000000
+# AND cast(c as double) <=300.000000 THEN 'IntValue2' ELSE 'Out of
range' END AS
+#CaseSentence
+#FROM aaa1
+#WHERE
+#(
+# a = 'aaa'
+# and
+# (
+# (
+# CASE WHEN cast(c as double)>=100.000000
+# AND cast(c as double)<=200.000000 THEN 'IntValue1' WHEN cast(c as
double)>=200.000000
+# AND cast(c as double)<=300.000000 THEN 'IntValue2' ELSE 'Out of
range' END
+% sys.aaa1, sys.L # table_name
+% a, casesentence # name
+% varchar, char # type
+% 0, 12 # length
+#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
+#FROM aaa2
+#WHERE
+#(
+# a = 'aaa'
+# and
+# (
+# (
+# 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
+# ) = 'IntValue1'
+# )
+#)
+#or
+#(
+# a = 'bbb'
+# and
+# (
+# (
+# CASE WHEN c >=100.000000
+% sys.aaa2, sys.L # table_name
+% a, casesentence # name
+% varchar, char # type
+% 0, 12 # length
+#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
+#FROM aaa1
+#WHERE
+#(
+# a = 'aaa'
+# and
+# (
+# (
+# 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
+# ) = 'IntValue1'
+# )
+#)
+#or
+#(
+# a = 'bbb'
+# and
+# (
+# (
+# CASE WHEN c>=100.000000
+# AND c<=200.000000 THEN 'IntValue1' WHEN c>=200.000000
+% sys.aaa1, sys.L # table_name
+% a, casesentence # name
+% varchar, char # type
+% 0, 12 # length
+#drop table aaa1;
+#drop table aaa2;
+
+# 13:51:22 >
+# 13:51:22 > "Done."
+# 13:51:22 >
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list