Changeset: f81a9bd3789b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f81a9bd3789b
Added Files:
        sql/test/BugTracker-2015/Tests/All
        sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.sql
        sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.err
        sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.out
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_bbp.c
        monetdb5/modules/atoms/inet.c
        monetdb5/modules/atoms/inet.h
        monetdb5/modules/atoms/inet.mal
Branch: Oct2014
Log Message:

Added inet.cmp function.  We cannot rely on inherited lngCmp.
Unfortunately, we cannot trust the (rev)sorted flags on inet columns
in older databases, so we need to increment the BBP version number and
squash those flags when the database is upgraded.
This fixes bug 3646.


diffs (233 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1306,6 +1306,7 @@ str INET_inet(inet *d, inet *s);
 str INET_isnil(bit *retval, inet *val);
 str INETabbrev(str *retval, inet *val);
 str INETbroadcast(inet *retval, inet *val);
+int INETcompare(inet *l, inet *r);
 int INETfromString(str src, int *len, inet **retval);
 str INEThost(str *retval, inet *val);
 str INEThostmask(inet *retval, inet *val);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -961,7 +961,8 @@ typedef struct {
 #define GDKLIBRARY_PRE_VARWIDTH 061023  /* backward compatible version */
 #define GDKLIBRARY_CHR         061024  /* version that still had chr type */
 #define GDKLIBRARY_SORTED_BYTE 061025  /* version that still had byte-sized 
sorted flag */
-#define GDKLIBRARY             061026
+#define GDKLIBRARY_INET_COMPARE        061026  /* version with missing inet 
cmp func */
+#define GDKLIBRARY             061027
 
 typedef struct BAT {
        /* static bat properties */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -783,6 +783,11 @@ heapinit(COLrec *col, const char *buf, i
        col->heap.newstorage = (storage_t) storage;
        col->heap.farmid = BBPselectfarm(PERSISTENT, col->type, offheap);
        col->heap.dirty = 0;
+       if (bbpversion <= GDKLIBRARY_INET_COMPARE && strcmp(type, "inet") == 0) 
{
+               /* don't trust ordering information on inet columns */
+               col->sorted = 0;
+               col->revsorted = 0;
+       }
        return n;
 }
 
@@ -959,6 +964,7 @@ BBPheader(FILE *fp, oid *BBPoid, int *OI
                exit(1);
        }
        if (bbpversion != GDKLIBRARY &&
+           bbpversion != GDKLIBRARY_INET_COMPARE &&
            bbpversion != GDKLIBRARY_SORTED_BYTE &&
            bbpversion != GDKLIBRARY_CHR &&
            bbpversion != GDKLIBRARY_PRE_VARWIDTH) {
diff --git a/monetdb5/modules/atoms/inet.c b/monetdb5/modules/atoms/inet.c
--- a/monetdb5/modules/atoms/inet.c
+++ b/monetdb5/modules/atoms/inet.c
@@ -194,6 +194,22 @@ INETnew(inet *retval, str *in)
        return (MAL_SUCCEED);
 }
 
+int
+INETcompare(inet *l, inet *r)
+{
+       bit res = 0;
+       if (in_isnil(l))
+               return in_isnil(r) ? 0 : -1;
+       if (in_isnil(r))
+               return 1;
+       INET_comp_EQ(&res, l, r);
+       if (res)
+               return 0;
+       INET_comp_LT(&res, l, r);
+       if (res)
+               return -1;
+       return 1;
+}
 
 /* === Operators === */
 /**
diff --git a/monetdb5/modules/atoms/inet.h b/monetdb5/modules/atoms/inet.h
--- a/monetdb5/modules/atoms/inet.h
+++ b/monetdb5/modules/atoms/inet.h
@@ -53,6 +53,7 @@ typedef struct _inet {
 
 inet_export int INETfromString(str src, int *len, inet **retval);
 inet_export int INETtoString(str *retval, int *len, inet *handle);
+inet_export int INETcompare(inet *l, inet *r);
 inet_export str INETnew(inet * retval, str *in);
 inet_export str INET_isnil(bit *retval, inet * val);
 inet_export str INET_comp_EQ(bit *retval, inet * val1, inet *val2);
diff --git a/monetdb5/modules/atoms/inet.mal b/monetdb5/modules/atoms/inet.mal
--- a/monetdb5/modules/atoms/inet.mal
+++ b/monetdb5/modules/atoms/inet.mal
@@ -17,6 +17,8 @@
 
 atom inet:lng;
 
+command cmp() :int
+address INETcompare;
 command fromstr()
 address INETfromString
 comment "Convert a string to an inet";
diff --git a/sql/test/BugTracker-2015/Tests/All 
b/sql/test/BugTracker-2015/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/All
@@ -0,0 +1,1 @@
+inet-ordering.Bug-3646
diff --git a/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.sql 
b/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.sql
@@ -0,0 +1,5 @@
+CREATE TABLE "testing" ( "addr" inet );
+INSERT INTO "testing" VALUES('192.168.0.1');
+INSERT INTO "testing" VALUES('255.255.255.0');
+SELECT * FROM "testing" ORDER BY addr;
+DROP TABLE "testing";
diff --git a/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.err 
b/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'inet-ordering.Bug-3646` in directory 
'sql/test/BugTracker-2015` itself:
+
+
+# 14:08:01 >  
+# 14:08:01 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=30627" "--set" 
"mapi_usock=/var/tmp/mtest-13903/.s.monetdb.30627" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/ufs/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2015" 
"--set" "mal_listing=0" "--set" "embedded_r=yes"
+# 14:08:01 >  
+
+# builtin opt  gdk_dbpath = /ufs/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 = 30627
+# cmdline opt  mapi_usock = /var/tmp/mtest-13903/.s.monetdb.30627
+# cmdline opt  monet_prompt = 
+# cmdline opt  mal_listing = 2
+# cmdline opt  gdk_dbpath = 
/ufs/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2015
+# cmdline opt  mal_listing = 0
+# cmdline opt  embedded_r = yes
+# cmdline opt  gdk_debug = 536870922
+
+# 14:08:02 >  
+# 14:08:02 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-13903" "--port=30627"
+# 14:08:02 >  
+
+
+# 14:08:02 >  
+# 14:08:02 >  "Done."
+# 14:08:02 >  
+
diff --git a/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.out 
b/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/inet-ordering.Bug-3646.stable.out
@@ -0,0 +1,74 @@
+stdout of test 'inet-ordering.Bug-3646` in directory 
'sql/test/BugTracker-2015` itself:
+
+
+# 14:08:01 >  
+# 14:08:01 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=30627" "--set" 
"mapi_usock=/var/tmp/mtest-13903/.s.monetdb.30627" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/ufs/sjoerd/Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2015" 
"--set" "mal_listing=0" "--set" "embedded_r=yes"
+# 14:08:01 >  
+
+# MonetDB 5 server v11.19.8 (hg id: 79641de9748d+)
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2015', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
+# Found 15.590 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://madrid.ins.cwi.nl:30627/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-13903/.s.monetdb.30627
+# MonetDB/GIS module loaded
+# MonetDB/SQL 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: 19_cluster.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: 24_zorder.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 41_jsonstore.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_gsl.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 85_bam.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 99_system.sql
+
+# 14:08:02 >  
+# 14:08:02 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-13903" "--port=30627"
+# 14:08:02 >  
+
+#CREATE TABLE "testing" ( "addr" inet );
+#INSERT INTO "testing" VALUES('192.168.0.1');
+[ 1    ]
+#INSERT INTO "testing" VALUES('255.255.255.0');
+[ 1    ]
+#SELECT * FROM "testing" ORDER BY addr;
+% sys.testing # table_name
+% addr # name
+% inet # type
+% 0 # length
+[ 192.168.0.1  ]
+[ 255.255.255.0        ]
+#DROP TABLE "testing";
+
+# 14:08:02 >  
+# 14:08:02 >  "Done."
+# 14:08:02 >  
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to