This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 0ea9ede63 test(c/driver/postgresql): use hypothesis to test decimal 
ingest (#4852)
0ea9ede63 is described below

commit 0ea9ede6303d457a17d7c4a8a18fec91754e9392
Author: David Li <[email protected]>
AuthorDate: Tue Oct 6 20:18:17 2026 -0700

    test(c/driver/postgresql): use hypothesis to test decimal ingest (#4852)
    
    We keep finding bugs in decimals; try to add another layer of
    validation.
---
 .github/workflows/integration.yml                  | 10 +--
 c/driver/postgresql/validation/pyproject.toml      |  1 +
 c/driver/postgresql/validation/tests/conftest.py   | 10 ++-
 c/driver/postgresql/validation/tests/postgresql.py |  5 ++
 c/driver/postgresql/validation/tests/test_query.py | 64 ++++++++++++++++-
 .../postgresql/validation/tests/test_statement.py  | 10 +--
 c/driver/postgresql/validation/uv.lock             | 84 +++++++++++++++++++++-
 7 files changed, 166 insertions(+), 18 deletions(-)

diff --git a/.github/workflows/integration.yml 
b/.github/workflows/integration.yml
index d34948093..44e159a6a 100644
--- a/.github/workflows/integration.yml
+++ b/.github/workflows/integration.yml
@@ -377,6 +377,11 @@ jobs:
             vendor: alloydb-omni
             uri: 
postgresql://localhost:5440/postgres?user=postgres&password=password
             experimental: false
+          - name: CedarDB
+            service: cedardb-test
+            vendor: cedardb
+            uri: 
postgresql://localhost:5433/postgres?user=postgres&password=CedarDB2026%21
+            experimental: false
           - name: Citus
             service: citus-test
             vendor: citus
@@ -412,11 +417,6 @@ jobs:
             vendor: yugabytedb
             uri: 
postgresql://localhost:5439/yugabyte?user=yugabyte&password=yugabyte
             experimental: false
-          - name: CedarDB
-            service: cedardb-test
-            vendor: cedardb
-            uri: 
postgresql://localhost:5433/postgres?user=postgres&password=CedarDB2026%21
-            experimental: false
     steps:
       - name: Free up disk space
         run: |
diff --git a/c/driver/postgresql/validation/pyproject.toml 
b/c/driver/postgresql/validation/pyproject.toml
index 0184deafb..beaf5bba6 100644
--- a/c/driver/postgresql/validation/pyproject.toml
+++ b/c/driver/postgresql/validation/pyproject.toml
@@ -21,6 +21,7 @@ version = "0.1.0"
 requires-python = ">=3.13"
 dependencies = [
     "adbc-drivers-validation",
+    "hypothesis>=6.168.3",
 ]
 
 [tool.uv.sources]
diff --git a/c/driver/postgresql/validation/tests/conftest.py 
b/c/driver/postgresql/validation/tests/conftest.py
index 011c91d43..7e106820f 100644
--- a/c/driver/postgresql/validation/tests/conftest.py
+++ b/c/driver/postgresql/validation/tests/conftest.py
@@ -45,7 +45,6 @@ def pytest_addoption(parser) -> None:
 
 @pytest.fixture(scope="session")
 def driver(request) -> adbc_drivers_validation.model.DriverQuirks:
-    assert request.param.startswith("postgresql:")
     return get_quirks(request.config.getoption("vendor"))
 
 
@@ -61,15 +60,14 @@ def driver_path(driver: 
adbc_drivers_validation.model.DriverQuirks) -> str:
 
     possible_paths = [
         # 1. c/build/driver/postgresql/ (CMake build from c/ directory)
-        base.parent.parent
-        / f"build/driver/{driver.name}/libadbc_driver_{driver.name}.{ext}",
+        base.parent.parent / 
f"build/driver/postgresql/libadbc_driver_postgresql.{ext}",
         # 2. <repo-root>/build/driver/postgresql/ (CI build location)
         base.parent.parent.parent
-        / f"build/driver/{driver.name}/libadbc_driver_{driver.name}.{ext}",
+        / f"build/driver/postgresql/libadbc_driver_postgresql.{ext}",
         # 3. c/driver/postgresql/build/ (local CMake build from driver dir)
-        base / f"build/libadbc_driver_{driver.name}.{ext}",
+        base / f"build/libadbc_driver_postgresql.{ext}",
         # 4. c/driver/postgresql/ (direct build output in driver dir)
-        base / f"libadbc_driver_{driver.name}.{ext}",
+        base / f"libadbc_driver_postgresql.{ext}",
     ]
 
     for path in possible_paths:
diff --git a/c/driver/postgresql/validation/tests/postgresql.py 
b/c/driver/postgresql/validation/tests/postgresql.py
index c87b27a1b..c29385c79 100644
--- a/c/driver/postgresql/validation/tests/postgresql.py
+++ b/c/driver/postgresql/validation/tests/postgresql.py
@@ -117,6 +117,7 @@ class PostgreSQLQuirks(model.DriverQuirks):
 
 
 class CedarDBQuirks(PostgreSQLQuirks):
+    name = "cedardb"
     vendor_version = re.compile(r"16[0-9]{4}")
     short_version = "16"
     setup = model.DriverSetup(
@@ -125,6 +126,10 @@ class CedarDBQuirks(PostgreSQLQuirks):
         statement={"adbc.postgresql.use_copy": "false"},
     )
 
+    @property
+    def field_metadata_prefix(self) -> str:
+        return "POSTGRESQL"
+
     @property
     def queries_paths(self) -> tuple[Path, ...]:
         return (
diff --git a/c/driver/postgresql/validation/tests/test_query.py 
b/c/driver/postgresql/validation/tests/test_query.py
index 196762ba2..32a37d683 100644
--- a/c/driver/postgresql/validation/tests/test_query.py
+++ b/c/driver/postgresql/validation/tests/test_query.py
@@ -15,6 +15,13 @@
 # specific language governing permissions and limitations
 # under the License.
 
+import decimal
+
+import adbc_drivers_validation.utils
+import hypothesis
+import hypothesis.strategies as st
+import pyarrow
+import pytest
 from adbc_drivers_validation.tests.query import (
     TestQuery,  # noqa: F401
     generate_tests,
@@ -25,4 +32,59 @@ from . import postgresql
 
 def pytest_generate_tests(metafunc) -> None:
     vendor = metafunc.config.getoption("vendor")
-    return generate_tests([postgresql.get_quirks(vendor)], metafunc)
+    quirks = [postgresql.get_quirks(vendor)]
+    if not metafunc.definition.name.startswith("test_hypothesis_"):
+        return generate_tests(quirks, metafunc)
+    return adbc_drivers_validation.utils.generate_tests_by_marks(quirks, 
metafunc)
+
+
[email protected]
+def st_decimal(draw, precision, scale) -> decimal.Decimal:
+    bound = 10**precision - 1
+    min_value = -bound
+    max_value = bound
+    unscaled = draw(st.integers(min_value=min_value, max_value=max_value))
+    return decimal.Decimal(unscaled).scaleb(-scale, 
context=decimal.Context(40))
+
+
[email protected](
+    "ps",
+    [
+        (1, 0),
+        (10, 5),
+        (38, 0),
+        (38, 10),
+        (38, 37),
+    ],
+    ids=lambda ps: f"precision_{ps[0]:02}_scale_{ps[1]:02}",
+)
[email protected](data=st.data())
[email protected](deadline=5000)
[email protected]_features(["statement_bulk_ingest"])
+def test_hypothesis_decimal128(driver, conn, ps: tuple[int, int], data) -> 
None:
+    if driver.name == "cedardb" and ps[0] == 38:
+        # Not confirmed, but it appears CedarDB overflows internally when
+        # parsing large decimal values
+        pytest.skip("apparent bug in CedarDB with precision = 38")
+
+    dec = data.draw(st_decimal(*ps))
+    arr = pyarrow.array([dec], type=pyarrow.decimal128(ps[0], ps[1]))
+    arr.validate(full=True)
+    assert arr[0].as_py() == dec
+    tbl = pyarrow.Table.from_arrays([arr], names=["col"])
+
+    temp_table = "temp_decimal128"
+    with conn.cursor() as cur:
+        if driver.name == "cedardb":
+            # the driver doesn't add precision/scale when ingesting, but
+            # CedarDB defaults to (38, 6) apparently which trips up tests
+            cur.execute("DROP TABLE IF EXISTS temp_decimal128")
+            cur.execute(f"CREATE TABLE temp_decimal128 (col DECIMAL({ps[0]}, 
{ps[1]}))")
+            cur.adbc_ingest(temp_table, tbl, mode="append")
+        else:
+            cur.adbc_ingest(temp_table, tbl, mode="replace")
+        cur.execute(f"SELECT col FROM {temp_table}")
+        res = cur.fetchallarrow()
+
+    assert res.num_rows == 1
+    assert decimal.Decimal(res["col"][0].as_py()) == dec
diff --git a/c/driver/postgresql/validation/tests/test_statement.py 
b/c/driver/postgresql/validation/tests/test_statement.py
index eb18de8ee..602e3bb57 100644
--- a/c/driver/postgresql/validation/tests/test_statement.py
+++ b/c/driver/postgresql/validation/tests/test_statement.py
@@ -21,6 +21,11 @@ import pytest
 from . import postgresql
 
 
+def pytest_generate_tests(metafunc) -> None:
+    vendor = metafunc.config.getoption("vendor")
+    return test_statement.generate_tests([postgresql.get_quirks(vendor)], 
metafunc)
+
+
 class TestStatement(test_statement.TestStatement):
     def test_rows_affected(self, driver, conn) -> None:
         if isinstance(driver, postgresql.CrateDBQuirks):
@@ -29,8 +34,3 @@ class TestStatement(test_statement.TestStatement):
                 "test provides no REFRESH TABLE hook"
             )
         super().test_rows_affected(driver, conn)
-
-
-def pytest_generate_tests(metafunc) -> None:
-    vendor = metafunc.config.getoption("vendor")
-    return test_statement.generate_tests([postgresql.get_quirks(vendor)], 
metafunc)
diff --git a/c/driver/postgresql/validation/uv.lock 
b/c/driver/postgresql/validation/uv.lock
index 7c0c35ce1..30fd39da2 100644
--- a/c/driver/postgresql/validation/uv.lock
+++ b/c/driver/postgresql/validation/uv.lock
@@ -94,6 +94,75 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/e1/2c/95d9216b79e9273689d7ebce125a54503ed0c9bd7da931f0265888e99779/duckdb-1.5.5-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:63e48d4b74b15aeacd688976432a7225163df8c226eddeb8536bba2d4d4ff433", size 
= 14470180, upload-time = "2026-07-22T10:55:14.445Z" },
 ]
 
+[[package]]
+name = "hypothesis"
+version = "6.168.3"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "sortedcontainers" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/09/b7/13118bbc45d6d8b9d04e2de779e2a4ff23145ea39efa692b994fb874ca72/hypothesis-6.168.3.tar.gz";,
 hash = 
"sha256:a43388f9067678fef6e13bdff325b6cfa6961a590498bb37f7ff31589c83bc75", size 
= 511022, upload-time = "2026-09-28T05:20:58.499Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/2b/cd/746a2fc1e5e5ba34f07ea6ee1ad07525a3dde5ff4836db3a7980af49a891/hypothesis-6.168.3-cp310-abi3-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:d20972ca134e652e9928ecd200966a8a2857adc2812c1d74b12a872e5cd503eb", size 
= 791536, upload-time = "2026-09-28T05:18:57.162Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c3/0f/7a158e377b69556c8e12c25c8fd811d0103e54c24a12dab1f3b9819f202e/hypothesis-6.168.3-cp310-abi3-macosx_11_0_arm64.whl";,
 hash = 
"sha256:eafbec09d3e87d13d8242411d1f5868b5e879f1bd6d95e233e9ff80c527bea1c", size 
= 787313, upload-time = "2026-09-28T05:20:18.122Z" },
+    { url = 
"https://files.pythonhosted.org/packages/45/c6/7df9104ee359e8fcd77791781c47e70794964ca69673665e0de2a6590f4c/hypothesis-6.168.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:73c5627497968cc62d140e9fde1ea21e12cac7b64dc419fea8286cd34ff1ad4e", size 
= 1124036, upload-time = "2026-09-28T05:20:04.372Z" },
+    { url = 
"https://files.pythonhosted.org/packages/92/0f/8a61715404a73b9a82cb1f976803428d603cdea976a9c30266c72ad6a7ce/hypothesis-6.168.3-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:29dc56e6dc6eeb0aeb08ac463f847279bde2336c4786faf7ee0af4b93cd031a7", size 
= 1147875, upload-time = "2026-09-28T05:19:15.495Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e4/3f/2b16e95cc3b9a069afa23830a012aefe377ce4a457a227e5a5026eb827ff/hypothesis-6.168.3-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:753bb501f8560d2e321ed3b62596b4496c56f15668b0a0669231ccc3e6c4e80d", size 
= 1149489, upload-time = "2026-09-28T05:19:18.886Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f6/e7/d7cf6dc068bb02732b2a6e38a35a0dcb7f2137608198fc79d740f69d197c/hypothesis-6.168.3-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:71ab606c472449cb872ef2a7acaec679ee4f651b7f0a477a04ebc85d8933ef8c", size 
= 1191992, upload-time = "2026-09-28T05:19:21.83Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5f/26/f1e5b25dec15998e8375d722825ec3dae1075cbe7cb1f74221b2312a2e33/hypothesis-6.168.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:26928956c54748e4dfa587333741ab750246123b93484955646ff316cca27eef", size 
= 1169911, upload-time = "2026-09-28T05:19:27.996Z" },
+    { url = 
"https://files.pythonhosted.org/packages/03/36/901234a49147e6bf8a5b9e54b775706a223c2b52befea1106ea2aaf15d48/hypothesis-6.168.3-cp310-abi3-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:0bdfc53c041b61c854fa3761735736b991bc2bddafee45a361cfe4d43027c1ef", size 
= 1129406, upload-time = "2026-09-28T05:18:42.632Z" },
+    { url = 
"https://files.pythonhosted.org/packages/55/c1/5fc9ff91ec9fba6bb527833386c66812524b5cc75fe7d4a4f9122ee1c420/hypothesis-6.168.3-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl";,
 hash = 
"sha256:650528e2b1e2a45e95c2df624d4b9364b8ac5a027ba84e1eea2bc5398dd01dcd", size 
= 1160399, upload-time = "2026-09-28T05:20:23.911Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9b/d2/49ad1ef5c55547c8abfd0fc571b3493806dda530fd5cb3d8263dbad86a72/hypothesis-6.168.3-cp310-abi3-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:209dc54cdb1b4d6d7020ad8d09e44c49756361b7183adacea4d6f5705085b595", size 
= 1299906, upload-time = "2026-09-28T05:18:58.417Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0d/5f/f98a26094c4f462c4215807bed0f9a6b5508b27a3c329bcba1bc8adc7ac7/hypothesis-6.168.3-cp310-abi3-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:af8ca98cd11dc7f9427bb90483abcd9688d4df2e8e63893a30a2423b027ebb11", size 
= 1425538, upload-time = "2026-09-28T05:20:49.074Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d0/b8/c5b4406e3a6591e51a42f85469351d1d824e0a54b84167aec9b2353759fe/hypothesis-6.168.3-cp310-abi3-musllinux_1_2_i686.whl";,
 hash = 
"sha256:f8122cfdd0bc0ba843063effa22ac310bdebdb3a1319bf1e63f14baa119c72ab", size 
= 1377084, upload-time = "2026-09-28T05:20:06.618Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e0/01/0d84a8ea469d024c15f602799c0b8410fbe03d99fdb0370449b33c3c916f/hypothesis-6.168.3-cp310-abi3-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:4bedbb379eab34f792af7ee9a05aae04e9c08bbb52e0f90f5a2110d4fe4b2fbd", size 
= 1281162, upload-time = "2026-09-28T05:19:42.768Z" },
+    { url = 
"https://files.pythonhosted.org/packages/22/b5/ea6435038de1a795f005cb603531e8ccc053febc50180f3ab55583c9c60e/hypothesis-6.168.3-cp310-abi3-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:5a953115b9f5c95133ab2d04efffeec96e5658c3207923dca7285f7db3e6bbef", size 
= 1300433, upload-time = "2026-09-28T05:18:55.634Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6c/78/fa6c77d9f64b6d592e69e582d83cbce7d7e56897faa4762885a2123b0166/hypothesis-6.168.3-cp310-abi3-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:6173558e676ad25ed1e20507fa4024a0d816dd90f715f77006e5a28f19109026", size 
= 1336273, upload-time = "2026-09-28T05:19:08.273Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f1/56/4acd0d778bab818c9ea336fcba768bf43bc70db7f84cc373579298df4641/hypothesis-6.168.3-cp310-abi3-win32.whl";,
 hash = 
"sha256:dc66390fb12d80585aa9222bf538ce8b7aa22cf5d118250647355a1c9e8f62f4", size 
= 678211, upload-time = "2026-09-28T05:19:23.355Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b0/db/0a02b146ad1c30f9716362f2e1a379dfd6b0f7be03ac1e22c9da24c9e2a9/hypothesis-6.168.3-cp310-abi3-win_amd64.whl";,
 hash = 
"sha256:92325b276360fe86c5bf71a568c0d53a6d140b0de36dcf029f9164a17803bb24", size 
= 684906, upload-time = "2026-09-28T05:18:35.099Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a3/c0/958deaf726848f96f52250740bf39f13f476b068e22f73e2b358eaa07532/hypothesis-6.168.3-cp310-abi3-win_arm64.whl";,
 hash = 
"sha256:3cf6f1eeaf41cd8d60cf1f88fde905ca1dd77c906929a507d6ac7f66f2ccba2a", size 
= 683292, upload-time = "2026-09-28T05:19:57.404Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0c/a2/6787da846d929e52fc3344d803299c45782dbeac287528af08380e984bf8/hypothesis-6.168.3-cp313-cp313-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:1b230a850de63334c16654a34a2d547e0179d36b9071d4439b3e7237f6d077e7", size 
= 793254, upload-time = "2026-09-28T05:19:36.294Z" },
+    { url = 
"https://files.pythonhosted.org/packages/89/ba/2893f5ca42501f4d562cba3229c8994c3a3e5fac66ef60c1e0e0b5220a5d/hypothesis-6.168.3-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:d63b0226cd3e0d8bdd97c3384b22a21934ed4d53246c1c93575dada616672499", size 
= 784699, upload-time = "2026-09-28T05:18:54.194Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b7/aa/7d7349daf75b71f6f35876f8de115e974c5c04d600e86df1b2779b0883ab/hypothesis-6.168.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:0369f5df055f96e117ab12e5f249668ff144731ab5280bc7a205fdf81f990b89", size 
= 1123016, upload-time = "2026-09-28T05:20:36.372Z" },
+    { url = 
"https://files.pythonhosted.org/packages/00/f0/7774e1ea072708ea46cb25c4aeee5f9978b6c271764809069e8a6789858e/hypothesis-6.168.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:f076bcd0f77fdcdb7797826c879099573d03a02e228ebe649ea917081b962ac0", size 
= 1168989, upload-time = "2026-09-28T05:20:08.44Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a7/7d/113992abed9efbd7944e3a496a382da58152dce126fddf6419ff31a0a57d/hypothesis-6.168.3-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:b823ba1fcec8da730f29316d010b06d3f7e0c3828dcf91020e24c55e7d24652a", size 
= 1298626, upload-time = "2026-09-28T05:19:40.986Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d5/65/3659fa5e733027e5b37a27486e57f4053535e40853d23501c422bb275043/hypothesis-6.168.3-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:dd2849c269d674e4618590f3b48d443bd4c06b5aef3d8d869086c2e6d213d248", size 
= 1335184, upload-time = "2026-09-28T05:20:20.087Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b4/6c/35aab2221b5ea65125340f236e1a765a9e9f3b28d89a389ea0033fed29f7/hypothesis-6.168.3-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:3ef7d26f5789e691401d5f87eafed9bd2763f0dbe47af6d6b66012a509404766", size 
= 682173, upload-time = "2026-09-28T05:19:12.762Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6e/79/27b0cb56ff5d2bc92458bf6fcebdb1f0dc01f57f043a178e9f9d74498169/hypothesis-6.168.3-cp314-cp314-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:e2d4c68729a13df9af4998d2652cfb5d541c5609b88c306880a5dfb284938ec2", size 
= 793287, upload-time = "2026-09-28T05:20:38.522Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e8/bd/5342f95c3bc36586777ef8cb8eba87ac7acf0184210327fb0e6d8654e295/hypothesis-6.168.3-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:b345f818083ec99966a43ca4f7b38feb62c6920ce28572bc2bde4948a8b7eaba", size 
= 784857, upload-time = "2026-09-28T05:20:42.609Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4a/5f/fc774241518a0588d362680a3084275058aab86d6bc02a2c61e1073142d0/hypothesis-6.168.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:0608c610fc002978fc5de0f471770d8817e9455cb8649a47983c9f8bccfc1897", size 
= 1123330, upload-time = "2026-09-28T05:19:29.735Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b0/e6/131f16775a3dca5f4fe27f0d6ad9a9851600098a54a872d163f6ebf0b664/hypothesis-6.168.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:9dcf6448b1ecc37f2b23f2d1b3ddfc9ff6b6910614c15a642dc82f419b96037b", size 
= 1169178, upload-time = "2026-09-28T05:19:53.436Z" },
+    { url = 
"https://files.pythonhosted.org/packages/06/61/c9f5bff8b73321c9fd12f2d69666c6e4861b97b60f5f24fdd6ac293007fd/hypothesis-6.168.3-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:ae4f9f094041dcce5119ebd7bab71062743ab02b6e654d056b370beda78c19e2", size 
= 1299127, upload-time = "2026-09-28T05:20:14.486Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e4/6d/d4618f8ab12dd76c4d58ea052252759aa2bf0c4e71f4b502ba5d577e0b9f/hypothesis-6.168.3-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:d479985fe73af97badfb72dc6d20c6a353e486a36f6d065f600026e0cf954a86", size 
= 1335390, upload-time = "2026-09-28T05:20:10.326Z" },
+    { url = 
"https://files.pythonhosted.org/packages/95/b6/727161e17cc297df1aeea945de05c532033b66751625bec192bc5b5ff707/hypothesis-6.168.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl";,
 hash = 
"sha256:785e2c45f8c08e274b4bf1ccae97f1a4e09407e9a68e80790cfab1d17a4a45fa", size 
= 624291, upload-time = "2026-09-28T05:18:36.376Z" },
+    { url = 
"https://files.pythonhosted.org/packages/77/23/2f9b506392a0b8712440bcb781abc5713be9ffac1303b6d10f3669050882/hypothesis-6.168.3-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:320920b1e3dae8611eee8a03d063cf2187446f2a17c38cfb8a7fc1466f71eee2", size 
= 682064, upload-time = "2026-09-28T05:20:16.336Z" },
+    { url = 
"https://files.pythonhosted.org/packages/50/93/efabfd95eb2b69c0c9fa1e1c83c8290aa2715d46baeb5a7764faf09c133a/hypothesis-6.168.3-cp314-cp314t-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:35380baa981108a7f60c4eab71e46acd8d8f58440520346a1a6aba06dca7e074", size 
= 791875, upload-time = "2026-09-28T05:19:37.789Z" },
+    { url = 
"https://files.pythonhosted.org/packages/1b/fc/2a0ada1623a9a33048bbf9f00a7c92513398c6b8865cba5efb854262ce30/hypothesis-6.168.3-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:f0aaaed00438fa6673d856aaee12a4a8afbde82a9f3c5ff487cacfb064239afe", size 
= 783412, upload-time = "2026-09-28T05:18:48.266Z" },
+    { url = 
"https://files.pythonhosted.org/packages/41/31/73c615d37eeb12da0209555612c32ced628d860267c23cfd2691c6207aea/hypothesis-6.168.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:f27e6df1576bf838e7f484d4ae5cba92114497ca30afb917056bf1ea33e95675", size 
= 1121662, upload-time = "2026-09-28T05:19:26.225Z" },
+    { url = 
"https://files.pythonhosted.org/packages/92/54/1893344a3b8bbf83fa7c9bb7e96f6836580213854f46671cb749f7b4706c/hypothesis-6.168.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:3bc85014577982ec6d2e266edc5cd6e7a7d3674c648791ca983c67a52f89a0c4", size 
= 1167761, upload-time = "2026-09-28T05:18:49.85Z" },
+    { url = 
"https://files.pythonhosted.org/packages/26/97/a61d82968febd25a0f08ffbbfabfaeead66f68fc5fa73f3c9ece1c36fc8f/hypothesis-6.168.3-cp314-cp314t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:ccfc29505aa1cdcc254cb9cd701fd0811fef5480addd97d4127a00df023410f7", size 
= 1297309, upload-time = "2026-09-28T05:19:51.711Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bc/01/fe8e4cf6d39d02f4efadaa351427fa13722086cfc54a2da3579741c5177a/hypothesis-6.168.3-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:32d0699566aaa93f9e97a44705d7164386f1e91de78d277f53bada35e78bcc96", size 
= 1334260, upload-time = "2026-09-28T05:19:00.121Z" },
+    { url = 
"https://files.pythonhosted.org/packages/39/6a/09177ebc62f4778f94379ecade6a51299d3d8c4f4b75ba636bf3a0202364/hypothesis-6.168.3-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:28d88fa174ecbd4ecbd7bb290f06d0db084a3971c3f511ae2830b65b5e25500f", size 
= 681992, upload-time = "2026-09-28T05:19:48.043Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f9/f6/890bf33d608cd63348d3146a3ca83362fbf09e589c5e5230a00c403070f4/hypothesis-6.168.3-cp315-abi3.abi3t-macosx_10_12_x86_64.whl";,
 hash = 
"sha256:61f5782d807b1e6aa5c9beef1054cb2037e7d1add48a64972cd6ee447778781f", size 
= 791231, upload-time = "2026-09-28T05:18:43.998Z" },
+    { url = 
"https://files.pythonhosted.org/packages/03/dd/fc36b204f8aa7437c676576d9437f0422de46aa8a729e6cd5bbb0224e759/hypothesis-6.168.3-cp315-abi3.abi3t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:7aacf3cf40c7ce8f9e4924d5b57bc0b068beafdfed2347bcf160a28b4cfbba7b", size 
= 783171, upload-time = "2026-09-28T05:19:20.353Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5c/d2/3cd087d577db67c404991d7723e64d7cd75570cdc82a0f7329aed6f2086c/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl";,
 hash = 
"sha256:01768a03a30dc54df7fe457c0b34016c84d598fa00d5965ededab93ba4eb3408", size 
= 1121152, upload-time = "2026-09-28T05:18:39.095Z" },
+    { url = 
"https://files.pythonhosted.org/packages/42/6f/a05a68cc66e7a22701c50bf94fb9ddeb36f4f5d0de3cc130066709eda621/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl";,
 hash = 
"sha256:1a8a4ffc6c6e6e577f2bfbcfebf7cffbb310283ba2532c729570a0a752cebaaa", size 
= 1144069, upload-time = "2026-09-28T05:20:44.705Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4a/f4/fdd7a093fb2fb3a0ce24256c92ad5bf67936f4669bd06d5ceae4298150ec/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl";,
 hash = 
"sha256:b987d73eba95183a7e59cca6d1925c588aa4307922d9852cc2b4d282a2ae4128", size 
= 1146692, upload-time = "2026-09-28T05:20:25.83Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f1/c8/6dbd4377e935505ae4fc8ee4c7b18c69994c4bbaca015447c470218bdbee/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_17_s390x.manylinux2014_s390x.whl";,
 hash = 
"sha256:d4569c39bd97d9573e946429ed676f3b55a7c8ed80920addd67d384a47d59b38", size 
= 1189480, upload-time = "2026-09-28T05:20:46.734Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ba/bf/ff288b496b690000d2686dcfa7f67855e4c5a6dddb464ed8e4880be83bb2/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl";,
 hash = 
"sha256:6042b8707a4b25bbbfe20b110258fb7549a68951e5525608a8ce06091039e9fc", size 
= 1167109, upload-time = "2026-09-28T05:19:24.758Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d9/d1/3fee2bc29fc747fabbb27e174515592e390809ca465d3bbbabbcfa3235a8/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_31_riscv64.whl";,
 hash = 
"sha256:f413629de94d38a7a2ad259697a6752526143cb49c2e2d7bdba19381c80693f6", size 
= 1126823, upload-time = "2026-09-28T05:18:52.636Z" },
+    { url = 
"https://files.pythonhosted.org/packages/58/6a/585294392fa6a6d9719446a042a777ba98ecca265d9e48cbedc10c88df0f/hypothesis-6.168.3-cp315-abi3.abi3t-manylinux_2_5_i686.manylinux1_i686.whl";,
 hash = 
"sha256:f071737e4e775bebba07e319eb645a880d1e0186b4d24bad23255e849d86d483", size 
= 1155773, upload-time = "2026-09-28T05:20:51.268Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cd/4d/fa283ff79996debf1ff08593e01f8b773eb8211b19b3d6d5d491317a65bf/hypothesis-6.168.3-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:f59a3912858d0609c26054aa1c474847c797937f5e0e1c77f0d3f08032e50f09", size 
= 1296671, upload-time = "2026-09-28T05:18:46.937Z" },
+    { url = 
"https://files.pythonhosted.org/packages/42/05/98f9c2f628da5afabb6c3e8df5d2d299d2d50bf306b14a6e26d3954c4951/hypothesis-6.168.3-cp315-abi3.abi3t-musllinux_1_2_armv7l.whl";,
 hash = 
"sha256:f09c05a23a8025dd5cad07c2ed299a46778e72d49ff0dd5bf353bcc0f7dc1580", size 
= 1422001, upload-time = "2026-09-28T05:19:04.188Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b8/c9/f2109ade29a7ec284d55bca328d784743e8b13e321576fd34ee7e65f99af/hypothesis-6.168.3-cp315-abi3.abi3t-musllinux_1_2_i686.whl";,
 hash = 
"sha256:44ace770bda3a0301739fc5a413c764de790c739df1f1a7218dd049f8594d9f5", size 
= 1374182, upload-time = "2026-09-28T05:20:27.764Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ce/6d/e05d5f72441564a3bebc71fa155deafd0fd3b015d6014ec8a00edf6e42bb/hypothesis-6.168.3-cp315-abi3.abi3t-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:03b131043608f94a2578a2a896a1a72092acb7079815eef5b8513b08447e0e62", size 
= 1278402, upload-time = "2026-09-28T05:20:56.332Z" },
+    { url = 
"https://files.pythonhosted.org/packages/96/d7/6988a7f1f69c5c530687dce03a32c157e2d878e3a2e32af9269ce016b78a/hypothesis-6.168.3-cp315-abi3.abi3t-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:e9784aca26eddfe99b03a0292320db742cc8a74200ef864fdce949f526f973cd", size 
= 1297770, upload-time = "2026-09-28T05:19:11.387Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a2/28/5bb82b60b836bd2329e1fe01ad94efc2b14dfa806f8e50ed14b795d78770/hypothesis-6.168.3-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:2b52ac363096232bebc2add117e9178d91f4248f4cdb919fd1026b5f86a4bb16", size 
= 1333977, upload-time = "2026-09-28T05:20:02.483Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8e/7d/d419841b8f65481ea1a50c4ba36f2670d48b8c7a51e4e8586089564cf7f6/hypothesis-6.168.3-cp315-abi3.abi3t-win32.whl";,
 hash = 
"sha256:d28e3a6b511a74ce37df5274b51f36c2b274fea7365e00b16f0c81e22acd5957", size 
= 675394, upload-time = "2026-09-28T05:19:55.237Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d8/d2/1de6a2ad100e44817f2e9a8e8ba3eeaf4769621f4f87f2d4966c4971fcc4/hypothesis-6.168.3-cp315-abi3.abi3t-win_amd64.whl";,
 hash = 
"sha256:7b9638789548361a57d984f56619ac694a914c328181d911271618409261ff4a", size 
= 681699, upload-time = "2026-09-28T05:19:09.957Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c0/79/be3370fd02734d6b1d950183ae9224580d19fa8d356b95348d60f1e3eeb7/hypothesis-6.168.3-cp315-abi3.abi3t-win_arm64.whl";,
 hash = 
"sha256:65d78e4357ec48ed2c67825f06740ee3599be4cfe770a6092bed07108d679ac5", size 
= 679849, upload-time = "2026-09-28T05:19:06.884Z" },
+]
+
 [[package]]
 name = "iniconfig"
 version = "2.3.0"
@@ -200,10 +269,14 @@ version = "0.1.0"
 source = { virtual = "." }
 dependencies = [
     { name = "adbc-drivers-validation" },
+    { name = "hypothesis" },
 ]
 
 [package.metadata]
-requires-dist = [{ name = "adbc-drivers-validation", git = 
"https://github.com/adbc-drivers/validation?rev=82bca5acbedbef21fadceb5f1022e87561e1c185";
 }]
+requires-dist = [
+    { name = "adbc-drivers-validation", git = 
"https://github.com/adbc-drivers/validation?rev=82bca5acbedbef21fadceb5f1022e87561e1c185";
 },
+    { name = "hypothesis", specifier = ">=6.168.3" },
+]
 
 [[package]]
 name = "pyarrow"
@@ -330,6 +403,15 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl";,
 hash = 
"sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size 
= 386536, upload-time = "2026-06-19T10:58:31.347Z" },
 ]
 
+[[package]]
+name = "sortedcontainers"
+version = "2.4.0"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz";,
 hash = 
"sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size 
= 30594, upload-time = "2021-05-16T22:03:42.897Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl";,
 hash = 
"sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size 
= 29575, upload-time = "2021-05-16T22:03:41.177Z" },
+]
+
 [[package]]
 name = "sqlglot"
 version = "30.20.0"

Reply via email to