Changeset: f6a2cc72664e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f6a2cc72664e
Added Files:
        sql/test/bincopy/Tests/bincopy_inet6_on_client.SQL.py
        sql/test/bincopy/Tests/bincopy_inet6_on_server.SQL.py
Modified Files:
        clients/examples/C/bincopydata.c
        sql/test/bincopy/Tests/All
        sql/test/bincopy/Tests/bincopy_support.py
Branch: Dec2025
Log Message:

Test COPY BINARY support for inet6


diffs (143 lines):

diff --git a/clients/examples/C/bincopydata.c b/clients/examples/C/bincopydata.c
--- a/clients/examples/C/bincopydata.c
+++ b/clients/examples/C/bincopydata.c
@@ -291,6 +291,40 @@ gen_inet4(FILE *f, bool byteswap, long n
        }
 }
 
+static void
+gen_inet6(FILE *f, bool byteswap, long nrecs, char *arg)
+{
+       (void)arg;
+       (void)byteswap;
+       for (int v = 0; v < nrecs; v++) {
+               long i0 = (v + 1) * 2142970729L;
+               long i1 = (v + 1) * 2011938419L;
+               long i2 = (v + 1) * 1616437157L;
+               long i3 = (v + 1) * 1271098355L;
+               uint8_t rec[16] = {
+                       (uint8_t)(i0 >> 24),
+                       (uint8_t)(i0 >> 16),
+                       (uint8_t)(i0 >> 8),
+                       (uint8_t)(i0),
+                       (uint8_t)(i1 >> 24),
+                       (uint8_t)(i1 >> 16),
+                       (uint8_t)(i1 >> 8),
+                       (uint8_t)(i1),
+                       (uint8_t)(i2 >> 24),
+                       (uint8_t)(i2 >> 16),
+                       (uint8_t)(i2 >> 8),
+                       (uint8_t)(i2),
+                       (uint8_t)(i3 >> 24),
+                       (uint8_t)(i3 >> 16),
+                       (uint8_t)(i3 >> 8),
+                       (uint8_t)(i3),
+               };
+               if (v == 3)
+                       memset(rec, 0, sizeof(rec));
+               fwrite(rec, 16, 1, f);
+       }
+}
+
 #define FUNCNAME gen_decimal_tinyints
 #define STYP int8_t
 #define UTYP uint8_t
@@ -371,6 +405,7 @@ static struct gen {
        { "timestamp_years", gen_timestamp_years },
 
        { "inet4", gen_inet4 },
+       { "inet6", gen_inet6 },
 
        { "json_objects", gen_json },
 
diff --git a/sql/test/bincopy/Tests/All b/sql/test/bincopy/Tests/All
--- a/sql/test/bincopy/Tests/All
+++ b/sql/test/bincopy/Tests/All
@@ -46,6 +46,8 @@ bincopy_uuids_on_server
 
 bincopy_inet4_on_client
 bincopy_inet4_on_server
+bincopy_inet6_on_client
+bincopy_inet6_on_server
 
 bincopy_nulls
 
diff --git a/sql/test/bincopy/Tests/bincopy_inet6_on_client.SQL.py 
b/sql/test/bincopy/Tests/bincopy_inet6_on_client.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/test/bincopy/Tests/bincopy_inet6_on_client.SQL.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python3
+
+import sys
+import os
+sys.path.append(os.getenv('TSTSRCDIR'))
+from bincopy_support import run_test
+from bincopy_support import INET6 as testcode
+
+run_test('client', testcode)
diff --git a/sql/test/bincopy/Tests/bincopy_inet6_on_server.SQL.py 
b/sql/test/bincopy/Tests/bincopy_inet6_on_server.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/test/bincopy/Tests/bincopy_inet6_on_server.SQL.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python3
+
+import sys
+import os
+sys.path.append(os.getenv('TSTSRCDIR'))
+from bincopy_support import run_test
+from bincopy_support import INET6 as testcode
+
+run_test('server', testcode)
diff --git a/sql/test/bincopy/Tests/bincopy_support.py 
b/sql/test/bincopy/Tests/bincopy_support.py
--- a/sql/test/bincopy/Tests/bincopy_support.py
+++ b/sql/test/bincopy/Tests/bincopy_support.py
@@ -765,3 +765,47 @@ FROM foo FULL OUTER JOIN refdata ON foo.
 WHERE foo.i4 = refdata.i4 OR (foo.i4 IS NULL AND refdata.i4 IS NULL);
 """, [f"{NRECS}"])
 
+INET6 = (f"""
+CREATE TABLE foo(id INT NOT NULL, i6 inet6);
+COPY BINARY INTO foo(id, i6) FROM @ints@, @inet6@ @ON@;
+COPY SELECT id, i6 FROM foo INTO BINARY @>ints@, @>inet6@ @ON@;
+--
+WITH
+    seeds AS (
+        SELECT
+            value AS id,
+            ifthenelse(value = 3, NULL, value) AS value
+        FROM sys.generate_series(0, 1_000_000)
+    ),
+    numbers AS (
+        SELECT
+            id,
+            (value + 1) * 2_142_970_729 AS i0,
+            (value + 1) * 2_011_938_419 AS i1,
+            (value + 1) * 1_616_437_157 AS i2,
+            (value + 1) * 1_271_098_355 AS i3
+        FROM seeds
+    ),
+    strings AS (
+        SELECT
+            id,
+            (
+                to_hex((i0 >> 16) & 0xFFFF) || ':' ||
+                to_hex( i0         & 0xFFFF) || ':' ||
+                to_hex((i1 >> 16) & 0xFFFF) || ':' ||
+                to_hex( i1         & 0xFFFF) || ':' ||
+                to_hex((i2 >> 16) & 0xFFFF) || ':' ||
+                to_hex( i2         & 0xFFFF) || ':' ||
+                to_hex((i3 >> 16) & 0xFFFF) || ':' ||
+                to_hex( i3         & 0xFFFF)
+            ) AS i6s
+        FROM numbers
+    ),
+    refdata AS (
+        SELECT id, CAST(i6s AS inet6) AS i6 FROM strings
+    )
+SELECT COUNT(*)
+FROM foo FULL OUTER JOIN refdata ON foo.id = refdata.id
+WHERE foo.i6 = refdata.i6 OR (foo.i6 IS NULL AND refdata.i6 IS NULL);
+""", [f"{NRECS}"])
+
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to