Changeset: 1ba49a99910f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1ba49a99910f
Added Files:
sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.sql
sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.err
sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.out
Modified Files:
gdk/gdk_select.c
sql/backends/monet5/sql_gencode.c
sql/storage/bat/bat_table.c
sql/test/BugTracker-2017/Tests/All
Branch: Dec2016
Log Message:
Fix select for (half) open interval where left and right the same.
According to the comments near BATselect, this should give an empty
result, and now it does. Some incorrect usage was also fixed.
This fixes bug 6184.
diffs (241 lines):
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1257,6 +1257,20 @@ BATselect(BAT *b, BAT *s, const void *tl
/* can we use the base type? */
t = ATOMbasetype(t);
lnil = ATOMcmp(t, tl, nil) == 0; /* low value = nil? */
+
+ if (!lnil && th != NULL && (!li || !hi) && !anti && ATOMcmp(t, tl, th)
== 0) {
+ /* upper and lower bound of range are equal and we
+ * want an interval that's open on at least one
+ * side */
+ ALGODEBUG fprintf(stderr, "#BATselect(b=%s#" BUNFMT
+ ",s=%s%s,li=%d,hi=%d,anti=%d): empty
interval\n",
+ BATgetId(b), BATcount(b),
+ s ? BATgetId(s) : "NULL",
+ s && BATtdense(s) ? "(dense)" : "",
+ li, hi, anti);
+ return newempty();
+ }
+
lval = !lnil || th == NULL; /* low value used for comparison */
equi = th == NULL || (lval && ATOMcmp(t, tl, th) == 0); /* point
select? */
if (equi) {
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1531,7 +1531,7 @@ static int
q = pushArgument(mb, q, r);
q = pushArgument(mb, q, r);
q = pushBit(mb, q, TRUE);
- q = pushBit(mb, q, FALSE);
+ q = pushBit(mb, q, TRUE);
q = pushBit(mb, q, FALSE);
if (q == NULL)
return -1;
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -261,7 +261,8 @@ rids_select( sql_trans *tr, sql_column *
BAT *b = NULL, *r = NULL, *s = NULL;
rids *rs = ZNEW(rids);
const void *kvl = key_value_low, *kvh = key_value_high;
- int hi = 0;
+ /* if pointers are equal, make it an inclusive select */
+ int hi = key_value_low == key_value_high;
s = delta_cands(tr, key->t);
b = full_column(tr, key);
diff --git a/sql/test/BugTracker-2017/Tests/All
b/sql/test/BugTracker-2017/Tests/All
--- a/sql/test/BugTracker-2017/Tests/All
+++ b/sql/test/BugTracker-2017/Tests/All
@@ -2,3 +2,4 @@ shutdown.Bug-6182
avggroupbysq.Bug-6178
semijoinunion.Bug-6150
HAVE_LIBZ?heapextend.Bug-6134
+empty-interval.Bug-6184
diff --git a/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.sql
b/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.sql
@@ -0,0 +1,25 @@
+START TRANSACTION;
+
+CREATE TABLE "sys"."unitTestDontDelete" (
+ "A" VARCHAR(255),
+ "B" BIGINT,
+ "C" DOUBLE,
+ "D" TIMESTAMP
+);
+COPY 10 RECORDS INTO "sys"."unitTestDontDelete" FROM stdin USING DELIMITERS
'\t','\n','"';
+NULL NULL NULL NULL
+"Cat1" 0 0.5 2013-06-10 11:10:10.000000
+"Cat2" 1 1.5 2013-06-11 12:11:11.000000
+"Cat1" 2 2.5 2013-06-12 13:12:12.000000
+"Cat2" 3 3.5 2013-06-13 14:13:13.000000
+"Cat1" 4 4.5 2013-06-14 15:14:14.000000
+"Cat2" 5 5.5 2013-06-15 16:15:15.000000
+"Cat1" 6 6.5 2013-06-16 17:16:16.000000
+"Cat2" 7 7.5 2013-06-17 18:17:17.000000
+"Cat1" 8 8.5 2013-06-18 19:18:18.000000
+
+select * from "unitTestDontDelete" where "B" < 5 AND "B" >= 5;
+select * from "unitTestDontDelete" where "A" < 'Cat2' AND "A" >= 'Cat2';
+select * from "unitTestDontDelete" where "C" < 5.5 AND "C" >= 5.5;
+
+ROLLBACK;
diff --git a/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.err
b/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.err
@@ -0,0 +1,36 @@
+stderr of test 'empty-interval.Bug-6184` in directory
'sql/test/BugTracker-2017` itself:
+
+
+# 09:13:08 >
+# 09:13:08 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=36197" "--set"
"mapi_usock=/var/tmp/mtest-25462/.s.monetdb.36197" "--set" "monet_prompt="
"--forcemito"
"--dbpath=/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2017"
"--set" "embedded_r=yes" "--set" "embedded_py=true"
+# 09:13:08 >
+
+# builtin opt gdk_dbpath = /home/sjoerd/Monet-stable/var/monetdb5/dbfarm/demo
+# builtin opt gdk_debug = 0
+# builtin opt gdk_vmtrim = no
+# 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 = 36197
+# cmdline opt mapi_usock = /var/tmp/mtest-25462/.s.monetdb.36197
+# cmdline opt monet_prompt =
+# cmdline opt gdk_dbpath =
/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2017
+# cmdline opt embedded_r = yes
+# cmdline opt embedded_py = true
+# cmdline opt gdk_debug = 536870922
+
+# 09:13:08 >
+# 09:13:08 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-25462" "--port=36197"
+# 09:13:08 >
+
+
+# 09:15:56 >
+# 09:15:56 > "Done."
+# 09:15:56 >
+
diff --git a/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.out
b/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.out
@@ -0,0 +1,108 @@
+stdout of test 'empty-interval.Bug-6184` in directory
'sql/test/BugTracker-2017` itself:
+
+
+# 09:13:08 >
+# 09:13:08 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=36197" "--set"
"mapi_usock=/var/tmp/mtest-25462/.s.monetdb.36197" "--set" "monet_prompt="
"--forcemito"
"--dbpath=/home/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2017"
"--set" "embedded_r=yes" "--set" "embedded_py=true"
+# 09:13:08 >
+
+# MonetDB 5 server v11.25.4 (hg id: f0eaa26022fe+)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2017', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers
+# Found 15.523 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2017 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://meeuw.mullender.nl:36197/
+# Listening for UNIX domain connection requests on
mapi:monetdb:///var/tmp/mtest-25462/.s.monetdb.36197
+# MonetDB/GIS module loaded
+# MonetDB/SQL module loaded
+# MonetDB/Python module loaded
+# MonetDB/R module loaded
+
+Ready.
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 11_times.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_querylog.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 17_temporal.sql
+# loading sql script: 18_index.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_functions.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 27_rejects.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 39_analytics_hge.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 40_json_hge.sql
+# loading sql script: 41_md5sum.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_gsl.sql
+# loading sql script: 46_profiler.sql
+# loading sql script: 51_sys_schema_extension.sql
+# loading sql script: 72_fits.sql
+# loading sql script: 74_netcdf.sql
+# loading sql script: 75_lidar.sql
+# loading sql script: 75_shp.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 80_udf_hge.sql
+# loading sql script: 85_bam.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 90_generator_hge.sql
+# loading sql script: 99_system.sql
+
+# 09:13:08 >
+# 09:13:08 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-25462" "--port=36197"
+# 09:13:08 >
+
+#START TRANSACTION;
+#CREATE TABLE "sys"."unitTestDontDelete" (
+# "A" VARCHAR(255),
+# "B" BIGINT,
+# "C" DOUBLE,
+# "D" TIMESTAMP
+#);
+#COPY 10 RECORDS INTO "sys"."unitTestDontDelete" FROM stdin USING DELIMITERS
'\t','\n','"';
+#NULL NULL NULL NULL
+#"Cat1" 0 0.5 2013-06-10 11:10:10.000000
+#"Cat2" 1 1.5 2013-06-11 12:11:11.000000
+#"Cat1" 2 2.5 2013-06-12 13:12:12.000000
+#"Cat2" 3 3.5 2013-06-13 14:13:13.000000
+#"Cat1" 4 4.5 2013-06-14 15:14:14.000000
+#"Cat2" 5 5.5 2013-06-15 16:15:15.000000
+#"Cat1" 6 6.5 2013-06-16 17:16:16.000000
+#"Cat2" 7 7.5 2013-06-17 18:17:17.000000
+#"Cat1" 8 8.5 2013-06-18 19:18:18.000000
+[ 10 ]
+#select * from "unitTestDontDelete" where "B" < 5 AND "B" >= 5;
+% sys.unitTestDontDelete, sys.unitTestDontDelete, sys.unitTestDontDelete,
sys.unitTestDontDelete # table_name
+% A, B, C, D # name
+% varchar, bigint, double, timestamp # type
+% 0, 1, 24, 26 # length
+#select * from "unitTestDontDelete" where "A" < 'Cat2' AND "A" >= 'Cat2';
+% sys.unitTestDontDelete, sys.unitTestDontDelete, sys.unitTestDontDelete,
sys.unitTestDontDelete # table_name
+% A, B, C, D # name
+% varchar, bigint, double, timestamp # type
+% 0, 1, 24, 26 # length
+#select * from "unitTestDontDelete" where "C" < 5.5 AND "C" >= 5.5;
+% sys.unitTestDontDelete, sys.unitTestDontDelete, sys.unitTestDontDelete,
sys.unitTestDontDelete # table_name
+% A, B, C, D # name
+% varchar, bigint, double, timestamp # type
+% 0, 1, 24, 26 # length
+#ROLLBACK;
+
+# 09:13:09 >
+# 09:13:09 > "Done."
+# 09:13:09 >
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list