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]