Changeset: 03602986e015 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=03602986e015
Modified Files:
sql/server/rel_optimizer.c
sql/test/BugTracker-2011/Tests/All
sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.sql
sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.err
sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.out
Branch: Apr2011
Log Message:
fixed bug in merging of single (theta expressions) into range expressions.
(fixes bug 2806)
diffs (205 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
@@ -3537,14 +3537,14 @@
e->r = exp_merge_range(sa, e->r);
/* only look for gt, gte, lte, lt */
} else if (n->next &&
- e->type == e_cmp && e->flag < cmp_equal &&
+ e->type == e_cmp && e->flag < cmp_equal && !e->f &&
re->card == CARD_ATOM) {
for (m=n->next; m; m = m->next) {
sql_exp *f = m->data;
sql_exp *lf = f->l;
sql_exp *rf = f->r;
- if (f->type == e_cmp && f->flag < cmp_equal &&
+ if (f->type == e_cmp && f->flag < cmp_equal &&
!f->f &&
rf->card == CARD_ATOM &&
exp_match_exp(le, lf)) {
sql_exp *ne;
@@ -3574,14 +3574,14 @@
}
}
} else if (n->next &&
- e->type == e_cmp && e->flag < cmp_equal &&
+ e->type == e_cmp && e->flag < cmp_equal && !e->f &&
re->card > CARD_ATOM) {
for (m=n->next; m; m = m->next) {
sql_exp *f = m->data;
sql_exp *lf = f->l;
sql_exp *rf = f->r;
- if (f->type == e_cmp && f->flag < cmp_equal &&
+ if (f->type == e_cmp && f->flag < cmp_equal &&
!f->f &&
rf->card > CARD_ATOM) {
sql_exp *ne;
int swap = 0, lt = 0, gt = 0;
diff --git a/sql/test/BugTracker-2011/Tests/All
b/sql/test/BugTracker-2011/Tests/All
--- a/sql/test/BugTracker-2011/Tests/All
+++ b/sql/test/BugTracker-2011/Tests/All
@@ -8,3 +8,4 @@
ambigous_idx_name.Bug-2800
crash_on_alias.Bug-2798
groupby_primary_key.Bug-2807
+merge_range_exp.Bug-2806
diff --git a/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.sql
b/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.sql
@@ -0,0 +1,19 @@
+
+create table xx( id serial, ival int);
+
+insert into xx(ival) values(1),(2),(3),(4),(5),(6);
+
+select * from xx;
+
+create view iview as
+select id,ival from xx where ival >=2 and ival <5;
+
+select * from iview;
+
+select * from iview where ival between 2 and 5;
+select * from iview where ival between 3 and 5;
+select * from iview where ival between 4 and 5;
+select * from iview where ival between 2 and 4;
+
+drop view iview;
+drop table xx;
diff --git a/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.err
b/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.err
@@ -0,0 +1,39 @@
+stderr of test 'merge_range_exp.Bug-2806` in directory 'test/BugTracker-2011`
itself:
+
+
+# 15:52:06 >
+# 15:52:06 > mserver5 --debug=10 --set gdk_nr_threads=0 --set
"gdk_dbfarm=/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" --set
mapi_open=true --set mapi_port=31260 --set monet_prompt= --trace --forcemito
--set mal_listing=2 "--dbname=mTests_test_BugTracker-2011" --set mal_listing=0
; echo ; echo Over..
+# 15:52:06 >
+
+# builtin opt gdk_dbname = demo
+# builtin opt gdk_dbfarm =
/ufs/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm
+# builtin opt gdk_debug = 0
+# builtin opt gdk_alloc_map = no
+# 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 default_pipe =
inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector
+# builtin opt minimal_pipe = inline,remap,deadcode,multiplex,garbageCollector
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt gdk_dbfarm =
/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 31260
+# cmdline opt monet_prompt =
+# cmdline opt mal_listing = 2
+# cmdline opt gdk_dbname = mTests_test_BugTracker-2011
+# cmdline opt mal_listing = 0
+
+# 15:52:06 >
+# 15:52:06 > mclient -lsql -ftest -i -e --host=alf --port=31260
+# 15:52:06 >
+
+
+# 15:52:06 >
+# 15:52:06 > Done.
+# 15:52:06 >
+
diff --git a/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.out
b/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.out
@@ -0,0 +1,87 @@
+stdout of test 'merge_range_exp.Bug-2806` in directory 'test/BugTracker-2011`
itself:
+
+
+# 15:52:06 >
+# 15:52:06 > mserver5 --debug=10 --set gdk_nr_threads=0 --set
"gdk_dbfarm=/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" --set
mapi_open=true --set mapi_port=31260 --set monet_prompt= --trace --forcemito
--set mal_listing=2 "--dbname=mTests_test_BugTracker-2011" --set mal_listing=0
; echo ; echo Over..
+# 15:52:06 >
+
+# MonetDB 5 server v11.3.2
+# This is an unreleased version
+# Serving database 'mTests_test_BugTracker-2011', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically
linked
+# Found 7.752 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2011 MonetDB B.V., all rights reserved
+# Visit http://monetdb.cwi.nl/ for further information
+# Listening for connection requests on mapi:monetdb://alf.ins.cwi.nl:31260/
+# MonetDB/GIS module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+
+Over..
+
+# 15:52:06 >
+# 15:52:06 > mclient -lsql -ftest -i -e --host=alf --port=31260
+# 15:52:06 >
+
+#create table xx( id serial, ival int);
+#insert into xx(ival) values(1),(2),(3),(4),(5),(6);
+[ 6 ]
+#select * from xx;
+% sys.xx, sys.xx # table_name
+% id, ival # name
+% int, int # type
+% 1, 1 # length
+[ 1, 1 ]
+[ 2, 2 ]
+[ 3, 3 ]
+[ 4, 4 ]
+[ 5, 5 ]
+[ 6, 6 ]
+#create view iview as
+#select id,ival from xx where ival >=2 and ival <5;
+#select * from iview;
+% sys.iview, sys.iview # table_name
+% id, ival # name
+% int, int # type
+% 1, 1 # length
+[ 2, 2 ]
+[ 3, 3 ]
+[ 4, 4 ]
+#select * from iview where ival between 2 and 5;
+% sys.iview, sys.iview # table_name
+% id, ival # name
+% int, int # type
+% 1, 1 # length
+[ 2, 2 ]
+[ 3, 3 ]
+[ 4, 4 ]
+#select * from iview where ival between 3 and 5;
+% sys.iview, sys.iview # table_name
+% id, ival # name
+% int, int # type
+% 1, 1 # length
+[ 3, 3 ]
+[ 4, 4 ]
+#select * from iview where ival between 4 and 5;
+% sys.iview, sys.iview # table_name
+% id, ival # name
+% int, int # type
+% 1, 1 # length
+[ 4, 4 ]
+#select * from iview where ival between 2 and 4;
+% sys.iview, sys.iview # table_name
+% id, ival # name
+% int, int # type
+% 1, 1 # length
+[ 2, 2 ]
+[ 3, 3 ]
+[ 4, 4 ]
+#drop view iview;
+#drop table xx;
+
+# 15:52:06 >
+# 15:52:06 > Done.
+# 15:52:06 >
+
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list