Changeset: 9609c5232f7e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9609c5232f7e
Added Files:
        sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.py
        sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.err
        sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.out
Modified Files:
        sql/server/rel_dump.c
        sql/test/BugTracker-2021/Tests/All
Branch: Oct2020
Log Message:

When inheriting the range limits, don't use the between comparison flags. This 
fixes bug #7089


diffs (143 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1406,7 +1406,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                                sym = 1;
                        }
                        if (e->type == e_cmp) {
-                               sql_exp *ne = exp_compare2(sql->sa, e->l, exp, 
e->r, compare2range(swap_compare((comp_type)f), e->flag));
+                               sql_exp *ne = exp_compare2(sql->sa, e->l, exp, 
e->r, compare2range(swap_compare((comp_type)f), e->flag & 
~(CMP_SYMMETRIC|CMP_BETWEEN)));
                                if (sym)
                                        ne->flag |= CMP_SYMMETRIC;
                                if (between)
diff --git a/sql/test/BugTracker-2021/Tests/All 
b/sql/test/BugTracker-2021/Tests/All
--- a/sql/test/BugTracker-2021/Tests/All
+++ b/sql/test/BugTracker-2021/Tests/All
@@ -1,1 +1,2 @@
 update-from-count.Bug-7079
+HAVE_PYMONETDB?remote-table-ranges.Bug-7089
diff --git a/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.py 
b/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.py
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.py
@@ -0,0 +1,60 @@
+import os, socket, sys, tempfile, pymonetdb
+
+try:
+    from MonetDBtesting import process
+except ImportError:
+    import process
+
+
+# Find a free network port
+def freeport():
+    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    sock.bind(('', 0))
+    port = sock.getsockname()[1]
+    sock.close()
+    return port
+
+
+with tempfile.TemporaryDirectory() as farm_dir:
+    os.mkdir(os.path.join(farm_dir, 'node1'))
+    os.mkdir(os.path.join(farm_dir, 'node2'))
+
+    node1_port = freeport()
+    with process.server(mapiport=node1_port, dbname='node1',
+                        dbfarm=os.path.join(farm_dir, 'node1'),
+                        stdin=process.PIPE, stdout=process.PIPE,
+                        stderr=process.PIPE) as node1_proc:
+        node1_conn = pymonetdb.connect(database='node1', port=node1_port, 
autocommit=True)
+        node1_cur = node1_conn.cursor()
+
+        node1_cur.execute("CREATE TABLE mytest (toc_no String null,mesure_de 
int null)")
+        node1_cur.execute("insert into mytest values('A000000009', 20201006), 
('A000000010', 20201007), ('A000000011', 20201008), ('A000000012', 20201009), 
('A000000013', 20201010), ('A000000014', 20201011), ('A000000015', 20201012), 
('A000000016', 20201013)")
+        node1_cur.execute("select toc_no, mesure_de from mytest")
+        print(node1_cur.fetchall())
+        node1_cur.execute("select toc_no, mesure_de from mytest where 
mesure_de >= 20201001 and mesure_de < 20201011 order by mesure_de desc")
+        print(node1_cur.fetchall())
+        node1_cur.execute("select toc_no, mesure_de from mytest where 
mesure_de BETWEEN 20201001 and 20201011 order by mesure_de desc")
+        print(node1_cur.fetchall())
+
+        node2_port = freeport()
+        with process.server(mapiport=node2_port, dbname='node2',
+                            dbfarm=os.path.join(farm_dir, 'node2'),
+                            stdin=process.PIPE, stdout=process.PIPE,
+                            stderr=process.PIPE) as node2_proc:
+            node2_conn = pymonetdb.connect(database='node2', port=node2_port, 
autocommit=True)
+            node2_cur = node2_conn.cursor()
+
+            node2_cur.execute("CREATE REMOTE TABLE mytest (toc_no String 
null,mesure_de int null) on 
'mapi:monetdb://localhost:{}/node1/sys/mytest'".format(node1_port))
+            node2_cur.execute("select toc_no, mesure_de from mytest")
+            print(node2_cur.fetchall())
+            node2_cur.execute("select toc_no, mesure_de from mytest where 
mesure_de >= 20201001 and mesure_de < 20201011 order by mesure_de desc")
+            print(node2_cur.fetchall())
+            node1_cur.execute("select toc_no, mesure_de from mytest where 
mesure_de BETWEEN 20201001 and 20201011 order by mesure_de desc")
+            print(node1_cur.fetchall())
+
+            # cleanup: shutdown the monetdb servers and remove tempdir
+            out, err = node1_proc.communicate()
+            sys.stderr.write(err)
+
+            out, err = node2_proc.communicate()
+            sys.stderr.write(err)
diff --git 
a/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.err 
b/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.err
@@ -0,0 +1,32 @@
+stderr of test 'remote-table-ranges.Bug-7089` in directory 
'sql/test/BugTracker-2021` itself:
+
+
+# 10:13:57 >  
+# 10:13:57 >  "/usr/bin/python3.9" "remote-table-ranges.Bug-7085.py" 
"remote-table-ranges.Bug-7085"
+# 10:13:57 >  
+
+# builtin opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-Oct2020/BUILD/var/monetdb5/dbfarm/demo
+# builtin opt  mapi_port = 50000
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# builtin opt  raw_strings = false
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_listenaddr = all
+# cmdline opt  mapi_port = 33703
+# cmdline opt  mapi_usock = /var/tmp/mtest-86937/.s.monetdb.33703
+# cmdline opt  gdk_dbpath = /tmp/tmpf489g9j5/node1/node1
+# builtin opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-Oct2020/BUILD/var/monetdb5/dbfarm/demo
+# builtin opt  mapi_port = 50000
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# builtin opt  raw_strings = false
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_listenaddr = all
+# cmdline opt  mapi_port = 44007
+# cmdline opt  mapi_usock = /var/tmp/mtest-86937/.s.monetdb.44007
+# cmdline opt  gdk_dbpath = /tmp/tmpf489g9j5/node2/node2
+
+# 10:13:59 >  
+# 10:13:59 >  "Done."
+# 10:13:59 >  
+
diff --git 
a/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.out 
b/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/remote-table-ranges.Bug-7089.stable.out
@@ -0,0 +1,18 @@
+stdout of test 'remote-table-ranges.Bug-7089` in directory 
'sql/test/BugTracker-2021` itself:
+
+
+# 10:13:57 >  
+# 10:13:57 >  "/usr/bin/python3.9" "remote-table-ranges.Bug-7085.py" 
"remote-table-ranges.Bug-7085"
+# 10:13:57 >  
+
+[('A000000009', 20201006), ('A000000010', 20201007), ('A000000011', 20201008), 
('A000000012', 20201009), ('A000000013', 20201010), ('A000000014', 20201011), 
('A000000015', 20201012), ('A000000016', 20201013)]
+[('A000000013', 20201010), ('A000000012', 20201009), ('A000000011', 20201008), 
('A000000010', 20201007), ('A000000009', 20201006)]
+[('A000000014', 20201011), ('A000000013', 20201010), ('A000000012', 20201009), 
('A000000011', 20201008), ('A000000010', 20201007), ('A000000009', 20201006)]
+[('A000000009', 20201006), ('A000000010', 20201007), ('A000000011', 20201008), 
('A000000012', 20201009), ('A000000013', 20201010), ('A000000014', 20201011), 
('A000000015', 20201012), ('A000000016', 20201013)]
+[('A000000013', 20201010), ('A000000012', 20201009), ('A000000011', 20201008), 
('A000000010', 20201007), ('A000000009', 20201006)]
+[('A000000014', 20201011), ('A000000013', 20201010), ('A000000012', 20201009), 
('A000000011', 20201008), ('A000000010', 20201007), ('A000000009', 20201006)]
+
+# 10:13:59 >  
+# 10:13:59 >  "Done."
+# 10:13:59 >  
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to