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

Reply via email to