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 a7d7c7987 test(c/driver/postgresql): validate against compatible
vendors (#4696)
a7d7c7987 is described below
commit a7d7c7987c720d190d8b03f63c41f8ae958e22cc
Author: David Li <[email protected]>
AuthorDate: Thu Aug 20 11:54:41 2026 +0900
test(c/driver/postgresql): validate against compatible vendors (#4696)
Closes #4693.
Assisted-by: GPT-5.6 Sol <[email protected]>
---
.github/workflows/integration.yml | 242 ++++++++++++++++-----
c/driver/postgresql/validation/pyproject.toml | 2 +-
.../type/bind/int32.txtcase} | 21 +-
.../type/bind/timestamp_ns.txtcase} | 32 ++-
.../type/bind/timestamptz_ns.txtcase} | 34 +--
.../type/literal/int32.txtcase} | 21 +-
.../type/select/int32.txtcase} | 21 +-
.../type/bind/binary.txtcase} | 32 +--
.../type/bind/binary_view.txtcase} | 32 +--
.../type/bind/date.txtcase} | 30 +--
.../type/bind/fixed_size_binary.txtcase} | 32 +--
.../type/bind/int64.txtcase} | 40 ++--
.../type/bind/large_binary.txtcase} | 32 +--
.../type/bind/time_ms.txtcase} | 32 +--
.../type/bind/time_ns.txtcase} | 32 +--
.../type/bind/time_s.txtcase} | 32 +--
.../type/bind/time_us.txtcase} | 32 +--
.../type/bind/timestamp_ms.txtcase} | 36 +--
.../type/bind/timestamp_ns.txtcase} | 42 ++--
.../type/bind/timestamp_s.txtcase} | 36 +--
.../type/bind/timestamp_us.txtcase} | 42 ++--
.../type/bind/timestamptz_ms.txtcase} | 39 +---
.../type/bind/timestamptz_ns.txtcase} | 45 ++--
.../type/bind/timestamptz_s.txtcase} | 39 +---
.../type/bind/timestamptz_us.txtcase} | 45 ++--
.../type/bind/uuid.txtcase} | 30 +--
.../type/literal/binary.txtcase} | 32 +--
.../type/literal/time.txtcase} | 32 +--
.../type/literal/uuid.txtcase} | 21 +-
.../type/select/binary.txtcase} | 32 +--
.../type/select/date.txtcase} | 30 +--
.../type/select/int64.txtcase} | 43 ++--
.../type/select/json.txtcase} | 30 +--
.../type/select/jsonb.txtcase} | 32 +--
.../type/select/time.txtcase} | 32 +--
.../type/select/uuid.txtcase} | 21 +-
.../validation/queries/ingest/decimal.txtcase | 14 +-
...case => decimal_scale_equals_precision.txtcase} | 13 +-
...imal.txtcase => decimal_scale_negative.txtcase} | 13 +-
...{decimal.txtcase => decimal_scale_zero.txtcase} | 23 +-
c/driver/postgresql/validation/tests/conftest.py | 19 +-
c/driver/postgresql/validation/tests/postgresql.py | 134 +++++++++++-
.../postgresql/validation/tests/test_connection.py | 59 ++++-
.../postgresql/validation/tests/test_ingest.py | 3 +-
c/driver/postgresql/validation/tests/test_query.py | 3 +-
.../postgresql/validation/tests/test_statement.py | 19 +-
c/driver/postgresql/validation/uv.lock | 48 ++--
ci/scripts/validate.sh | 8 +-
compose.yaml | 123 +++++++++++
49 files changed, 848 insertions(+), 989 deletions(-)
diff --git a/.github/workflows/integration.yml
b/.github/workflows/integration.yml
index 19199451f..6da4e5558 100644
--- a/.github/workflows/integration.yml
+++ b/.github/workflows/integration.yml
@@ -26,6 +26,7 @@ on:
- "ci/**"
- "go/**"
- "python/**"
+ - "compose.yaml"
- ".github/workflows/integration.yml"
push:
branches-ignore:
@@ -35,6 +36,7 @@ on:
- "ci/**"
- "go/**"
- "python/**"
+ - "compose.yaml"
- ".github/workflows/integration.yml"
concurrency:
@@ -172,8 +174,8 @@ jobs:
run: |
docker compose down
- postgresql:
- name: "PostgreSQL Integration Tests"
+ postgresql-build:
+ name: "PostgreSQL Build"
runs-on: ubuntu-latest
steps:
- name: Free up disk space
@@ -216,74 +218,202 @@ jobs:
run: |
./ci/scripts/cpp_build.sh "$(pwd)" "$(pwd)/build"
./ci/scripts/python_build.sh "$(pwd)" "$(pwd)/build"
- - name: Configure Integration Env Vars
+ # Artifact actions do not preserve symlinks, so archive the build tree
and
+ # the generated Python extension/library files ourselves.
+ - name: Archive PostgreSQL build
run: |
- pip install python-dotenv[cli]
- python -m dotenv -f .env list --format simple | tee -a $GITHUB_ENV
- echo "ADBC_USE_ASAN=ON" >> $GITHUB_ENV
- echo "ADBC_USE_UBSAN=ON" >> $GITHUB_ENV
+ tar --create --gzip --file postgresql-build.tgz \
+ build \
+ python/adbc_driver_manager \
+ python/adbc_driver_postgresql
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
# v7.0.1
+ with:
+ name: postgresql-build
+ retention-days: 3
+ path: postgresql-build.tgz
- - name: Test PostgreSQL Driver - postgres 14
- env:
- BUILD_ALL: "0"
- BUILD_DRIVER_POSTGRESQL: "1"
- PYTEST_ADDOPTS: "--error-for-skips"
+ postgresql-test:
+ name: "PostgreSQL (14-18)"
+ needs: postgresql-build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Free up disk space
run: |
- env POSTGRES_VERSION=14 docker compose up --wait --detach
postgres-test
- ./ci/scripts/cpp_test.sh "$(pwd)/build"
- ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build"
- docker compose down
- docker compose rm -fsv
- - name: Test PostgreSQL Driver - postgres 15
- env:
- BUILD_ALL: "0"
- BUILD_DRIVER_POSTGRESQL: "1"
- PYTEST_ADDOPTS: "--error-for-skips"
+ # Preinstalled tools use a lot of disk space, free up some space
+ # https://github.com/actions/runner-images/issues/2840
+ sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 #
v7.0.1
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+ - name: Get Date
+ id: get-date
run: |
- env POSTGRES_VERSION=15 docker compose up --wait --detach
postgres-test
- ./ci/scripts/cpp_test.sh "$(pwd)/build"
- ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build"
- docker compose down
- docker compose rm -fsv
- - name: Test PostgreSQL Driver - postgres 16
- env:
- BUILD_ALL: "0"
- BUILD_DRIVER_POSTGRESQL: "1"
- PYTEST_ADDOPTS: "--error-for-skips"
+ echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT
+ - name: Cache Conda
+ uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 #
v6.1.0
+ with:
+ path: ~/conda_pkgs_dir
+ key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{
env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }}
+ - uses:
conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 #
v4.0.1
+ with:
+ miniforge-version: latest
+ use-only-tar-bz2: false
+ use-mamba: true
+ - name: Install Dependencies
run: |
- env POSTGRES_VERSION=16 docker compose up --wait --detach
postgres-test
- ./ci/scripts/cpp_test.sh "$(pwd)/build"
- ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build"
- docker compose down
- docker compose rm -fsv
- - name: Test PostgreSQL Driver - postgres 17
+ ./ci/scripts/remamba.sh install -c conda-forge \
+ --file ci/conda_env_cpp.txt \
+ --file ci/conda_env_python.txt
+ pip install pytest-error-for-skips
+ - name: Work around ASAN issue (GH-1617)
+ run: |
+ sudo sysctl vm.mmap_rnd_bits=28
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 #
v9.0.0
+ - uses:
actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ with:
+ name: postgresql-build
+ - name: Extract PostgreSQL build
+ run: |
+ tar --extract --gzip --file postgresql-build.tgz
+ echo
"PYTHONPATH=$(pwd)/python/adbc_driver_manager:$(pwd)/python/adbc_driver_postgresql"
>> "$GITHUB_ENV"
+ - name: Run PostgreSQL 14-18 tests
env:
+ ADBC_POSTGRESQL_TEST_URI:
postgresql://localhost:5432/postgres?user=postgres&password=password
+ ADBC_USE_ASAN: "ON"
+ ADBC_USE_UBSAN: "ON"
BUILD_ALL: "0"
BUILD_DRIVER_POSTGRESQL: "1"
- PYTEST_ADDOPTS: "--error-for-skips"
run: |
- env POSTGRES_VERSION=17 docker compose up --wait --detach
postgres-test
- ./ci/scripts/cpp_test.sh "$(pwd)/build"
- ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build"
- docker compose down
- docker compose rm -fsv
- - name: Test PostgreSQL Driver - postgres 18
+ for postgres_version in 14 15 16 17 18; do
+ echo "::group::PostgreSQL $postgres_version"
+ export POSTGRES_VERSION="$postgres_version"
+ docker compose up --wait --detach postgres-test
+ ./ci/scripts/cpp_test.sh "$(pwd)/build"
+ env PYTEST_ADDOPTS=--error-for-skips \
+ ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build"
+ if [ "$postgres_version" = "18" ]; then
+ uv --project=./c/driver/postgresql/validation/ run \
+ ci/scripts/validate.sh "$(pwd)" --vendor postgresql
+ fi
+ docker compose stop postgres-test
+ docker compose rm --force --stop --volumes postgres-test
+ echo "::endgroup::"
+ done
+ - name: Capture PostgreSQL logs
+ if: failure()
+ run: |
+ docker compose logs postgres-test
+ postgresql-vendor-test:
+ name: "PostgreSQL (${{ matrix.name }})"
+ needs: postgresql-build
+ runs-on: ubuntu-latest
+ continue-on-error: ${{ matrix.experimental }}
+ strategy:
+ fail-fast: false
+ max-parallel: 2
+ matrix:
+ include:
+ - name: AlloyDB Omni
+ service: alloydb-omni-test
+ vendor: alloydb-omni
+ uri:
postgresql://localhost:5440/postgres?user=postgres&password=password
+ experimental: false
+ - name: Citus
+ service: citus-test
+ vendor: citus
+ uri:
postgresql://localhost:5434/postgres?user=postgres&password=password
+ experimental: false
+ - name: CockroachDB
+ service: cockroachdb-test
+ vendor: cockroachdb
+ uri: postgresql://root@localhost:5435/postgres?sslmode=disable
+ experimental: false
+ - name: CrateDB
+ service: cratedb-test
+ vendor: cratedb
+ uri: postgresql://crate@localhost:5436/doc?sslmode=disable
+ experimental: true
+ - name: ParadeDB
+ service: paradedb-test
+ vendor: paradedb
+ uri:
postgresql://localhost:5437/postgres?user=postgres&password=password
+ experimental: false
+ - name: TimescaleDB
+ service: timescaledb-test
+ vendor: timescaledb
+ uri:
postgresql://localhost:5438/postgres?user=postgres&password=password
+ experimental: false
+ - name: YugabyteDB
+ service: yugabytedb-test
+ vendor: yugabytedb
+ uri:
postgresql://localhost:5439/yugabyte?user=yugabyte&password=yugabyte
+ experimental: false
+ # Currently fails, but could be supported in the future.
+ # https://github.com/apache/arrow-adbc/issues/1755
+ # - name: CedarDB
+ # service: cedardb-test
+ # vendor: cedardb
+ # uri:
postgresql://localhost:5433/postgres?user=postgres&password=CedarDB2026%21
+ # experimental: true
+ steps:
+ - name: Free up disk space
+ run: |
+ # Preinstalled tools use a lot of disk space, free up some space
+ # https://github.com/actions/runner-images/issues/2840
+ sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 #
v7.0.1
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+ - name: Get Date
+ id: get-date
+ run: |
+ echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT
+ - name: Cache Conda
+ uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 #
v6.1.0
+ with:
+ path: ~/conda_pkgs_dir
+ key: conda-${{ runner.os }}-${{ steps.get-date.outputs.today }}-${{
env.CACHE_NUMBER }}-${{ hashFiles('ci/**') }}
+ - uses:
conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 #
v4.0.1
+ with:
+ miniforge-version: latest
+ use-only-tar-bz2: false
+ use-mamba: true
+ - name: Install Dependencies
+ run: |
+ ./ci/scripts/remamba.sh install -c conda-forge \
+ --file ci/conda_env_cpp.txt \
+ --file ci/conda_env_python.txt
+ pip install pytest-error-for-skips
+ - name: Work around ASAN issue (GH-1617)
+ run: |
+ sudo sysctl vm.mmap_rnd_bits=28
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 #
v9.0.0
+ - uses:
actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ with:
+ name: postgresql-build
+ - name: Extract PostgreSQL build
+ run: |
+ tar --extract --gzip --file postgresql-build.tgz
+ echo
"PYTHONPATH=$(pwd)/python/adbc_driver_manager:$(pwd)/python/adbc_driver_postgresql"
>> "$GITHUB_ENV"
+ - name: Start ${{ matrix.name }}
+ run: |
+ docker compose up --wait --detach "${{ matrix.service }}"
+ - name: Run validation suite
env:
+ ADBC_POSTGRESQL_TEST_URI: ${{ matrix.uri }}
+ ADBC_USE_ASAN: "ON"
+ ADBC_USE_UBSAN: "ON"
BUILD_ALL: "0"
BUILD_DRIVER_POSTGRESQL: "1"
- PYTEST_ADDOPTS: "--error-for-skips"
run: |
- env POSTGRES_VERSION=18 docker compose up --wait --detach
postgres-test
- ./ci/scripts/cpp_test.sh "$(pwd)/build"
- ./ci/scripts/python_test.sh "$(pwd)" "$(pwd)/build"
- docker compose down
- docker compose rm -fsv
- - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 #
v9.0.0
- - name: Run PostgreSQL Validation Suite
+ uv --project=./c/driver/postgresql/validation/ run \
+ ci/scripts/validate.sh "$(pwd)" --vendor "${{ matrix.vendor }}"
+ - name: Capture ${{ matrix.name }} logs
+ if: failure()
run: |
- env POSTGRES_VERSION=18 docker compose up --wait --detach
postgres-test
- env BUILD_ALL=0 BUILD_DRIVER_POSTGRESQL=1 uv
--project=./c/driver/postgresql/validation/ run ci/scripts/validate.sh $(pwd)
- docker compose down
+ docker compose logs "${{ matrix.service }}"
flightsql_interop:
name: "FlightSQL C# Interop"
diff --git a/c/driver/postgresql/validation/pyproject.toml
b/c/driver/postgresql/validation/pyproject.toml
index 0d335574e..d1e88d673 100644
--- a/c/driver/postgresql/validation/pyproject.toml
+++ b/c/driver/postgresql/validation/pyproject.toml
@@ -24,4 +24,4 @@ dependencies = [
]
[tool.uv.sources]
-adbc-drivers-validation = { git =
"https://github.com/adbc-drivers/validation", rev =
"ffb8c9e9b76b2953525e67f5305497587ced1edd" }
+adbc-drivers-validation = { git =
"https://github.com/adbc-drivers/validation", rev =
"575a41bfd96b09d9d8a057d0ea1e66a27a315475" }
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
similarity index 63%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
index a4d079ab3..6087a8309 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
@@ -16,31 +16,14 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
+ "name": "res",
"format": "l",
"flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
}
]
}
-
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/timestamp_ns.txtcase
similarity index 63%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cockroachdb/type/bind/timestamp_ns.txtcase
index a4d079ab3..59e454476 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/timestamp_ns.txtcase
@@ -15,32 +15,30 @@
// specific language governing permissions and limitations
// under the License.
+// part: setup_query
+
+CREATE TABLE test_timestamp (
+ idx INT,
+ res TIMESTAMP(6)
+);
+
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
- "format": "l",
+ "name": "res",
+ "format": "tsu:",
"flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
}
]
}
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null}
+{"res": -9223372036854775}
+{"res": 946684800000000}
+{"res": 1684158330000000}
+{"res": 9223372036854775}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/timestamptz_ns.txtcase
similarity index 64%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cockroachdb/type/bind/timestamptz_ns.txtcase
index a4d079ab3..bd1634b80 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/timestamptz_ns.txtcase
@@ -15,32 +15,36 @@
// specific language governing permissions and limitations
// under the License.
+// part: setup_query
+
+CREATE TABLE test_timestamptz (
+ idx INT,
+ res TIMESTAMP(6) WITH TIME ZONE,
+ res2 TIMESTAMP(6) WITH TIME ZONE
+);
+
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
- "format": "l",
+ "name": "res",
+ "format": "tsu:UTC",
"flags": ["nullable"]
},
{
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
+ "name": "res2",
+ "format": "tsu:UTC",
+ "flags": ["nullable"]
}
]
}
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null, "res2": null}
+{"res": -9223372036854775, "res2": -9223372036854775}
+{"res": 946684800000000, "res2": 946684800000000}
+{"res": 1684158330000000, "res2": 1684158330000000}
+{"res": 9223372036854775, "res2": 9223372036854775}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
similarity index 63%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
index a4d079ab3..6087a8309 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
@@ -16,31 +16,14 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
+ "name": "res",
"format": "l",
"flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
}
]
}
-
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
similarity index 63%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
index a4d079ab3..6087a8309 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
@@ -16,31 +16,14 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
+ "name": "res",
"format": "l",
"flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
}
]
}
-
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/binary.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/binary.txtcase
index a4d079ab3..277afd82a 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/binary.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a binary data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/binary_view.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/binary_view.txtcase
index a4d079ab3..277afd82a 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/binary_view.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a binary data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/date.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/date.txtcase
index a4d079ab3..140fe0131 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/date.txtcase
@@ -15,32 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+skip = "CrateDB supports DATE only as a type literal and cannot store DATE
columns:
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#date"
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/fixed_size_binary.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/fixed_size_binary.txtcase
index a4d079ab3..277afd82a 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/fixed_size_binary.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a binary data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/int64.txtcase
similarity index 54%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/int64.txtcase
index a4d079ab3..46c92e00c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/int64.txtcase
@@ -15,32 +15,20 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: bind
+
+{"res": 42}
+{"res": 4294967296}
+{"res": 9223372036854775806}
+{"res": -9223372036854775807}
+{"res": 0}
+{"res": null}
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null}
+{"res": -9223372036854775807}
+{"res": 0}
+{"res": 42}
+{"res": 4294967296}
+{"res": 9223372036854775806}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/large_binary.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/large_binary.txtcase
index a4d079ab3..277afd82a 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/large_binary.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a binary data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_ms.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/time_ms.txtcase
index a4d079ab3..7bd5d52fd 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_ms.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not support TIME WITHOUT TIME ZONE or TIME columns:
+#
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#time
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_ns.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/time_ns.txtcase
index a4d079ab3..7bd5d52fd 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_ns.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not support TIME WITHOUT TIME ZONE or TIME columns:
+#
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#time
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_s.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/time_s.txtcase
index a4d079ab3..7bd5d52fd 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_s.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not support TIME WITHOUT TIME ZONE or TIME columns:
+#
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#time
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_us.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/time_us.txtcase
index a4d079ab3..7bd5d52fd 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/time_us.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not support TIME WITHOUT TIME ZONE or TIME columns:
+#
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#time
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
index a4d079ab3..d2943d938 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
@@ -15,32 +15,14 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
+[tags]
+sql-type-name = "TIMESTAMP"
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+// part: setup_query
+
+CREATE TABLE test_timestamp (
+ idx INT,
+ res TIMESTAMP
+);
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
similarity index 54%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
index a4d079ab3..355d169e7 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
@@ -15,32 +15,22 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
+
+[tags]
+sql-type-name = "TIMESTAMP"
+
+// part: setup_query
+
+CREATE TABLE test_timestamp (
+ idx INT,
+ res TIMESTAMP
+);
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null}
+{"res": -9223372036854000}
+{"res": 946684800000000}
+{"res": 1684158330000000}
+{"res": 9223372036854000}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
index a4d079ab3..d2943d938 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
@@ -15,32 +15,14 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
+[tags]
+sql-type-name = "TIMESTAMP"
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+// part: setup_query
+
+CREATE TABLE test_timestamp (
+ idx INT,
+ res TIMESTAMP
+);
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
similarity index 54%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
index a4d079ab3..c08fab0eb 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
@@ -15,32 +15,22 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
+
+[tags]
+sql-type-name = "TIMESTAMP"
+
+// part: setup_query
+
+CREATE TABLE test_timestamp (
+ idx INT,
+ res TIMESTAMP
+);
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null}
+{"res": -62135596800000000}
+{"res": 946684800123000}
+{"res": 1684158330123000}
+{"res": 253402300799999000}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_ms.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_ms.txtcase
index a4d079ab3..3a077b3d9 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_ms.txtcase
@@ -15,32 +15,17 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
+skip = "CrateDB does not expose the PostgreSQL TIMEZONE session setting
required by this binding path"
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+[tags]
+sql-type-name = "TIMESTAMP WITH TIME ZONE"
+
+// part: setup_query
+
+CREATE TABLE test_timestamptz (
+ idx INT,
+ res TIMESTAMP WITH TIME ZONE,
+ res2 TIMESTAMP WITH TIME ZONE
+);
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_ns.txtcase
similarity index 54%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_ns.txtcase
index a4d079ab3..73374b90b 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_ns.txtcase
@@ -15,32 +15,25 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
+
+skip = "CrateDB does not expose the PostgreSQL TIMEZONE session setting
required by this binding path"
+
+[tags]
+sql-type-name = "TIMESTAMP WITH TIME ZONE"
+
+// part: setup_query
+
+CREATE TABLE test_timestamptz (
+ idx INT,
+ res TIMESTAMP WITH TIME ZONE,
+ res2 TIMESTAMP WITH TIME ZONE
+);
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null, "res2": null}
+{"res": -9223372036854000, "res2": -9223372036854000}
+{"res": 946684800000000, "res2": 946684800000000}
+{"res": 1684158330000000, "res2": 1684158330000000}
+{"res": 9223372036854000, "res2": 9223372036854000}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_s.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_s.txtcase
index a4d079ab3..3a077b3d9 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_s.txtcase
@@ -15,32 +15,17 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
+skip = "CrateDB does not expose the PostgreSQL TIMEZONE session setting
required by this binding path"
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+[tags]
+sql-type-name = "TIMESTAMP WITH TIME ZONE"
+
+// part: setup_query
+
+CREATE TABLE test_timestamptz (
+ idx INT,
+ res TIMESTAMP WITH TIME ZONE,
+ res2 TIMESTAMP WITH TIME ZONE
+);
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_us.txtcase
similarity index 54%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_us.txtcase
index a4d079ab3..f27b7099c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamptz_us.txtcase
@@ -15,32 +15,25 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
+
+skip = "CrateDB does not expose the PostgreSQL TIMEZONE session setting
required by this binding path"
+
+[tags]
+sql-type-name = "TIMESTAMP WITH TIME ZONE"
+
+// part: setup_query
+
+CREATE TABLE test_timestamptz (
+ idx INT,
+ res TIMESTAMP WITH TIME ZONE,
+ res2 TIMESTAMP WITH TIME ZONE
+);
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": null, "res2": null}
+{"res": -14182940000000, "res2": -14182940000000}
+{"res": 946684800000000, "res2": 946684800000000}
+{"res": 1684158330000000, "res2": 1684158330000000}
+{"res": 253402300799999000, "res2": 253402300799999000}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/bind/uuid.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/uuid.txtcase
index a4d079ab3..a8266b903 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/uuid.txtcase
@@ -15,32 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+skip = "The PostgreSQL driver cannot resolve CrateDB's UUID type when binding
Arrow UUID values"
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/literal/binary.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/literal/binary.txtcase
index a4d079ab3..277afd82a 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/literal/binary.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a binary data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/literal/time.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/literal/time.txtcase
index a4d079ab3..fc245d9f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/literal/time.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not support TIME WITHOUT TIME ZONE:
+#
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#time
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/literal/uuid.txtcase
similarity index 68%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/literal/uuid.txtcase
index a4d079ab3..ab6e94bc4 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/literal/uuid.txtcase
@@ -16,31 +16,18 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
+ "name": "res",
+ "format": "z",
"flags": ["nullable"],
"metadata": {
"ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
+ "ARROW:extension:metadata": "{\"type_name\": \"uuid\",
\"vendor_name\": \"PostgreSQL\"}"
}
}
]
}
-
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/binary.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries-cratedb/type/select/binary.txtcase
index a4d079ab3..277afd82a 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/binary.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a binary data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/date.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/select/date.txtcase
index a4d079ab3..140fe0131 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/date.txtcase
@@ -15,32 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+skip = "CrateDB supports DATE only as a type literal and cannot store DATE
columns:
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#date"
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/int64.txtcase
similarity index 54%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/select/int64.txtcase
index a4d079ab3..72f2433c0 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/int64.txtcase
@@ -15,32 +15,23 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: setup_query
+
+CREATE TABLE test_int64 (
+ idx INTEGER,
+ res BIGINT
+);
+
+INSERT INTO test_int64 (idx, res) VALUES (1, 4294967296);
+INSERT INTO test_int64 (idx, res) VALUES (2, 9223372036854775806);
+INSERT INTO test_int64 (idx, res) VALUES (3, -9223372036854775807);
+INSERT INTO test_int64 (idx, res) VALUES (4, 0);
+INSERT INTO test_int64 (idx, res) VALUES (5, NULL);
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"res": 4294967296}
+{"res": 9223372036854775806}
+{"res": -9223372036854775807}
+{"res": 0}
+{"res": null}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/json.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/select/json.txtcase
index a4d079ab3..e075fc10e 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/json.txtcase
@@ -15,32 +15,6 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+skip = "CrateDB supports JSON for casts but cannot store JSON columns:
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#json"
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/jsonb.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/select/jsonb.txtcase
index a4d079ab3..4c324af1b 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/jsonb.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not have a JSONB data type:
+# https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/time.txtcase
similarity index 53%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/select/time.txtcase
index a4d079ab3..7bd5d52fd 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/time.txtcase
@@ -15,32 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-// part: expected_schema
-{
- "format": "+s",
- "children": [
- {
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
- "flags": ["nullable"],
- "metadata": {
- "ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
- }
- }
- ]
-}
+// part: metadata
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+# CrateDB does not support TIME WITHOUT TIME ZONE or TIME columns:
+#
https://cratedb.com/docs/crate/reference/en/6.4/general/ddl/data-types.html#time
+hide = true
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries-cratedb/type/select/uuid.txtcase
similarity index 68%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/select/uuid.txtcase
index a4d079ab3..ab6e94bc4 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/uuid.txtcase
@@ -16,31 +16,18 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
{
- "name": "idx",
- "format": "l",
- "flags": ["nullable"]
- },
- {
- "name": "value",
- "format": "u",
+ "name": "res",
+ "format": "z",
"flags": ["nullable"],
"metadata": {
"ARROW:extension:name": "arrow.opaque",
- "ARROW:extension:metadata": "{\"type_name\": \"numeric\",
\"vendor_name\": \"PostgreSQL\"}"
+ "ARROW:extension:metadata": "{\"type_name\": \"uuid\",
\"vendor_name\": \"PostgreSQL\"}"
}
}
]
}
-
-// part: expected
-
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
index a4d079ab3..7b21a0b79 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
@@ -38,9 +38,11 @@
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"idx": 0, "value": null}
+{"idx": 1, "value": "0"}
+{"idx": 2, "value": "123.45"}
+{"idx": 3, "value": "-123.45"}
+{"idx": 4, "value": "9999999.99"}
+{"idx": 5, "value": "-9999999.99"}
+{"idx": 6, "value": "99999999.99"}
+{"idx": 7, "value": "-99999999.99"}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
similarity index 87%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
index a4d079ab3..cf39915ed 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
@@ -16,6 +16,7 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
@@ -38,9 +39,9 @@
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"idx": 0, "value": null}
+{"idx": 1, "value": "0"}
+{"idx": 2, "value": "0.99"}
+{"idx": 3, "value": "-0.99"}
+{"idx": 4, "value": "0.1"}
+{"idx": 5, "value": "-0.1"}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
similarity index 87%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to
c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
index a4d079ab3..a965a58e5 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
@@ -16,6 +16,7 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
@@ -38,9 +39,9 @@
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"idx": 0, "value": null}
+{"idx": 1, "value": "0"}
+{"idx": 2, "value": "9900"}
+{"idx": 3, "value": "-9900"}
+{"idx": 4, "value": "1000"}
+{"idx": 5, "value": "-1000"}
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
similarity index 73%
copy from c/driver/postgresql/validation/queries/ingest/decimal.txtcase
copy to c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
index a4d079ab3..31621a79c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
@@ -16,6 +16,7 @@
// under the License.
// part: expected_schema
+
{
"format": "+s",
"children": [
@@ -38,9 +39,19 @@
// part: expected
-{"idx": 0, "value": "0"}
-{"idx": 1, "value": "123.45"}
-{"idx": 2, "value": "-123.45"}
-{"idx": 3, "value": "9999999.99"}
-{"idx": 4, "value": "-9999999.99"}
-{"idx": 5, "value": null}
+{"idx": 0, "value": null}
+{"idx": 1, "value": "0"}
+{"idx": 2, "value": "12345"}
+{"idx": 3, "value": "-12345"}
+{"idx": 4, "value": "999999999"}
+{"idx": 5, "value": "-999999999"}
+{"idx": 6, "value": "1"}
+{"idx": 7, "value": "10"}
+{"idx": 8, "value": "100"}
+{"idx": 9, "value": "1000"}
+{"idx": 10, "value": "10000"}
+{"idx": 11, "value": "100000"}
+{"idx": 12, "value": "1000000"}
+{"idx": 13, "value": "10000000"}
+{"idx": 14, "value": "100000000"}
+{"idx": 15, "value": "1000000000"}
diff --git a/c/driver/postgresql/validation/tests/conftest.py
b/c/driver/postgresql/validation/tests/conftest.py
index 465b2eaca..b7cc21df7 100644
--- a/c/driver/postgresql/validation/tests/conftest.py
+++ b/c/driver/postgresql/validation/tests/conftest.py
@@ -19,6 +19,7 @@ import sys
from pathlib import Path
import adbc_drivers_validation.model
+import adbc_drivers_validation.tests.conftest
import pytest
from adbc_drivers_validation.tests.conftest import ( # noqa: F401
conn,
@@ -26,18 +27,26 @@ from adbc_drivers_validation.tests.conftest import ( #
noqa: F401
db_kwargs,
manual_test,
noci,
- pytest_addoption,
pytest_collection_modifyitems,
)
-from .postgresql import PostgreSQLQuirks
+from .postgresql import VENDORS, get_quirks
+
+
+def pytest_addoption(parser) -> None:
+ adbc_drivers_validation.tests.conftest.pytest_addoption(parser)
+ parser.addoption(
+ "--vendor",
+ choices=VENDORS,
+ default="postgresql",
+ help="PostgreSQL-compatible database vendor to validate",
+ )
@pytest.fixture(scope="session")
def driver(request) -> adbc_drivers_validation.model.DriverQuirks:
- driver = request.param
- assert driver.startswith("postgresql:")
- return PostgreSQLQuirks()
+ assert request.param.startswith("postgresql:")
+ return get_quirks(request.config.getoption("vendor"))
@pytest.fixture(scope="session")
diff --git a/c/driver/postgresql/validation/tests/postgresql.py
b/c/driver/postgresql/validation/tests/postgresql.py
index 1ebd21ef8..8999c5393 100644
--- a/c/driver/postgresql/validation/tests/postgresql.py
+++ b/c/driver/postgresql/validation/tests/postgresql.py
@@ -15,11 +15,15 @@
# specific language governing permissions and limitations
# under the License.
+import contextlib
import re
+import typing
from pathlib import Path
from adbc_drivers_validation import model, quirks
+import adbc_driver_manager.dbapi
+
class PostgreSQLQuirks(model.DriverQuirks):
name = "postgresql"
@@ -92,4 +96,132 @@ class PostgreSQLQuirks(model.DriverQuirks):
return quirks.split_statement(statement)
-QUIRKS = [PostgreSQLQuirks()]
+class CedarDBQuirks(PostgreSQLQuirks):
+ vendor_version = re.compile(r"16[0-9]{4}")
+ short_version = "16"
+ setup = model.DriverSetup(
+ database={
+ "uri": model.FromEnv("ADBC_POSTGRESQL_TEST_URI"),
+ },
+ connection={},
+ statement={"adbc.postgresql.use_copy": "false"},
+ )
+
+
+class CitusQuirks(PostgreSQLQuirks):
+ vendor_name = "PostgreSQL"
+ vendor_version = re.compile(r"17[0-9]{4}")
+ short_version = "17"
+
+
+class CockroachDBQuirks(PostgreSQLQuirks):
+ vendor_version = re.compile(r"13[0-9]{4}")
+ short_version = "13"
+ features = PostgreSQLQuirks.features.model_copy(
+ update={"connection_get_table_schema": False}
+ )
+ setup = model.DriverSetup(
+ database={
+ "uri": model.FromEnv("ADBC_POSTGRESQL_TEST_URI"),
+ },
+ connection={},
+ statement={"adbc.postgresql.use_copy": "false"},
+ )
+
+ @property
+ def queries_paths(self) -> tuple[Path]:
+ return (
+ *super().queries_paths,
+ Path(__file__).parent.parent / "queries-cockroachdb",
+ )
+
+
+class CrateDBQuirks(PostgreSQLQuirks):
+ vendor_version = re.compile(r"14[0-9]{4}")
+ short_version = "14"
+ features = PostgreSQLQuirks.features.with_values(
+ connection_get_table_schema=False,
+ connection_transactions=False,
+ current_catalog="crate",
+ current_schema="doc",
+ get_objects=False,
+ statement_bulk_ingest=False,
+ )
+ setup = model.DriverSetup(
+ database={
+ "uri": model.FromEnv("ADBC_POSTGRESQL_TEST_URI"),
+ },
+ connection={},
+ statement={"adbc.postgresql.use_copy": "false"},
+ )
+
+ @property
+ def queries_paths(self) -> tuple[Path]:
+ return (
+ *super().queries_paths,
+ Path(__file__).parent.parent / "queries-cratedb",
+ )
+
+ @contextlib.contextmanager
+ def setup_statement(
+ self,
+ query: model.Query | str,
+ cursor: adbc_driver_manager.dbapi.Cursor,
+ ) -> typing.Generator[None, None, None]:
+ with super().setup_statement(query, cursor):
+ if isinstance(query, model.Query):
+ if table_name := query.metadata().setup.drop:
+ cursor.adbc_statement.set_sql_query(
+ f"REFRESH TABLE {self.quote_identifier(table_name)}"
+ )
+ cursor.adbc_statement.execute_update()
+ yield
+
+
+class ParadeDBQuirks(PostgreSQLQuirks):
+ pass
+
+
+class TimescaleDBQuirks(PostgreSQLQuirks):
+ pass
+
+
+class YugabyteDBQuirks(PostgreSQLQuirks):
+ vendor_version = re.compile(r"15[0-9]{4}")
+ short_version = "15"
+ features =
PostgreSQLQuirks.features.with_values(current_catalog="yugabyte")
+
+
+class AlloyDBOmniQuirks(PostgreSQLQuirks):
+ vendor_version = re.compile(r"17[0-9]{4}")
+ short_version = "17"
+
+
+VENDORS = (
+ "postgresql",
+ "alloydb-omni",
+ "cedardb",
+ "citus",
+ "cockroachdb",
+ "cratedb",
+ "paradedb",
+ "timescaledb",
+ "yugabytedb",
+)
+
+_QUIRKS = {
+ "postgresql": PostgreSQLQuirks,
+ "alloydb-omni": AlloyDBOmniQuirks,
+ "cedardb": CedarDBQuirks,
+ "citus": CitusQuirks,
+ "cockroachdb": CockroachDBQuirks,
+ "cratedb": CrateDBQuirks,
+ "paradedb": ParadeDBQuirks,
+ "timescaledb": TimescaleDBQuirks,
+ "yugabytedb": YugabyteDBQuirks,
+}
+
+
+def get_quirks(vendor: str) -> PostgreSQLQuirks:
+ """Get the PostgreSQL-compatible quirks for one vendor."""
+ return _QUIRKS[vendor]()
diff --git a/c/driver/postgresql/validation/tests/test_connection.py
b/c/driver/postgresql/validation/tests/test_connection.py
index 89b1c15f6..e29253e20 100644
--- a/c/driver/postgresql/validation/tests/test_connection.py
+++ b/c/driver/postgresql/validation/tests/test_connection.py
@@ -15,13 +15,62 @@
# specific language governing permissions and limitations
# under the License.
-from adbc_drivers_validation.tests.connection import (
- TestConnection, # noqa: F401
- generate_tests,
-)
+import adbc_drivers_validation.tests.connection as test_connection
+import pytest
from . import postgresql
+class TestConnection(test_connection.TestConnection):
+ def test_current_catalog(self, conn, driver) -> None:
+ if isinstance(driver, postgresql.CrateDBQuirks):
+ pytest.xfail(
+ "CrateDB has a fixed crate catalog, but libpq reports the doc "
+ "startup database/schema value as the current catalog"
+ )
+ super().test_current_catalog(driver, conn)
+
+ def test_get_objects_catalog(self, conn, driver) -> None:
+ if isinstance(driver, postgresql.CrateDBQuirks):
+ pytest.skip("GetObjects is marked unsupported for CrateDB")
+ super().test_get_objects_catalog(conn, driver)
+
+ def test_get_objects_table_not_exist(self, conn, driver) -> None:
+ if isinstance(driver, postgresql.CrateDBQuirks):
+ pytest.skip("GetObjects is marked unsupported for CrateDB")
+ super().test_get_objects_table_not_exist(conn, driver)
+
+ def test_get_objects_column_filter_table(
+ self, conn, driver, get_objects_table
+ ) -> None:
+ if isinstance(driver, postgresql.CockroachDBQuirks):
+ pytest.xfail(
+ "CockroachDB has an implicit rowid column and does not
preserve "
+ "column order in GetObjects"
+ )
+ super().test_get_objects_column_filter_table(conn, driver,
get_objects_table)
+
+ def test_get_objects_column_filter_table_name(
+ self, conn, driver, get_objects_table
+ ) -> None:
+ if isinstance(driver, postgresql.CockroachDBQuirks):
+ pytest.xfail(
+ "CockroachDB has an implicit rowid column and does not
preserve "
+ "column order in GetObjects"
+ )
+ super().test_get_objects_column_filter_table_name(
+ conn, driver, get_objects_table
+ )
+
+ def test_get_objects_column_xdbc(self, conn, driver, get_objects_table) ->
None:
+ if isinstance(driver, postgresql.CockroachDBQuirks):
+ pytest.xfail(
+ "CockroachDB has an implicit rowid column and does not
preserve "
+ "column order in GetObjects"
+ )
+ super().test_get_objects_column_xdbc(conn, driver, get_objects_table)
+
+
def pytest_generate_tests(metafunc) -> None:
- return generate_tests(postgresql.QUIRKS, metafunc)
+ vendor = metafunc.config.getoption("vendor")
+ return test_connection.generate_tests([postgresql.get_quirks(vendor)],
metafunc)
diff --git a/c/driver/postgresql/validation/tests/test_ingest.py
b/c/driver/postgresql/validation/tests/test_ingest.py
index 9fded6f37..9a799db41 100644
--- a/c/driver/postgresql/validation/tests/test_ingest.py
+++ b/c/driver/postgresql/validation/tests/test_ingest.py
@@ -24,4 +24,5 @@ from . import postgresql
def pytest_generate_tests(metafunc) -> None:
- return generate_tests(postgresql.QUIRKS, metafunc)
+ vendor = metafunc.config.getoption("vendor")
+ return generate_tests([postgresql.get_quirks(vendor)], metafunc)
diff --git a/c/driver/postgresql/validation/tests/test_query.py
b/c/driver/postgresql/validation/tests/test_query.py
index a2f396497..196762ba2 100644
--- a/c/driver/postgresql/validation/tests/test_query.py
+++ b/c/driver/postgresql/validation/tests/test_query.py
@@ -24,4 +24,5 @@ from . import postgresql
def pytest_generate_tests(metafunc) -> None:
- return generate_tests(postgresql.QUIRKS, metafunc)
+ vendor = metafunc.config.getoption("vendor")
+ return generate_tests([postgresql.get_quirks(vendor)], metafunc)
diff --git a/c/driver/postgresql/validation/tests/test_statement.py
b/c/driver/postgresql/validation/tests/test_statement.py
index ee33cd087..eb18de8ee 100644
--- a/c/driver/postgresql/validation/tests/test_statement.py
+++ b/c/driver/postgresql/validation/tests/test_statement.py
@@ -15,13 +15,22 @@
# specific language governing permissions and limitations
# under the License.
-from adbc_drivers_validation.tests.statement import (
- TestStatement, # noqa: F401
- generate_tests,
-)
+import adbc_drivers_validation.tests.statement as test_statement
+import pytest
from . import postgresql
+class TestStatement(test_statement.TestStatement):
+ def test_rows_affected(self, driver, conn) -> None:
+ if isinstance(driver, postgresql.CrateDBQuirks):
+ pytest.xfail(
+ "CrateDB does not make writes immediately visible, and the
upstream "
+ "test provides no REFRESH TABLE hook"
+ )
+ super().test_rows_affected(driver, conn)
+
+
def pytest_generate_tests(metafunc) -> None:
- return generate_tests(postgresql.QUIRKS, metafunc)
+ 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 40f7f13e4..574b58244 100644
--- a/c/driver/postgresql/validation/uv.lock
+++ b/c/driver/postgresql/validation/uv.lock
@@ -35,7 +35,7 @@ wheels = [
[[package]]
name = "adbc-drivers-validation"
version = "0.1"
-source = { git =
"https://github.com/adbc-drivers/validation?rev=ffb8c9e9b76b2953525e67f5305497587ced1edd#ffb8c9e9b76b2953525e67f5305497587ced1edd"
}
+source = { git =
"https://github.com/adbc-drivers/validation?rev=575a41bfd96b09d9d8a057d0ea1e66a27a315475#575a41bfd96b09d9d8a057d0ea1e66a27a315475"
}
dependencies = [
{ name = "adbc-driver-manager" },
{ name = "bidict" },
@@ -78,24 +78,24 @@ wheels = [
[[package]]
name = "duckdb"
-version = "1.5.3"
+version = "1.5.5"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/69/00/d579dcb2a536b6ea3a2563cdad6844f77d81a9b2d4b22a858097f2468acf/duckdb-1.5.3.tar.gz",
hash =
"sha256:df39428eb130faa35ae96fd35245bdeae6ecf43936250b116b5fead568eb9f16", size
= 18026640, upload-time = "2026-05-20T11:55:31.901Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/7d/19/e57151753576373c6696a12022648546cca6038e8833fda2908ee2342d9b/duckdb-1.5.5.tar.gz",
hash =
"sha256:72f33ee57ca7595b23957671a2cc7f7fe2be0ecc2d68f63abedcfcaa3a5c1238", size
= 18066741, upload-time = "2026-07-22T10:55:17.819Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/cc/9c/a528eb09d8be51954c485864bd06753e616939a080cbc3dd4417e8c94a57/duckdb-1.5.3-cp313-cp313-macosx_10_13_universal2.whl",
hash =
"sha256:e75a6122c12579a99848517f6f00a4e342aebda3590c30fe9b5cc5f39d5e6afc", size
= 32626254, upload-time = "2026-05-20T11:54:53.65Z" },
- { url =
"https://files.pythonhosted.org/packages/ec/3c/1534c0a6db347c05eb7d0f6ecfb7aefbe74cbff398e4892a8fd1903a20e8/duckdb-1.5.3-cp313-cp313-macosx_10_13_x86_64.whl",
hash =
"sha256:fd3963c1cb9d9567777f4a898a9dbe388a2fe9724681801b1e7d6d93eecf1b76", size
= 17300917, upload-time = "2026-05-20T11:54:56.628Z" },
- { url =
"https://files.pythonhosted.org/packages/23/fa/beafb91e6e152d2161c4a9cbc472334c87607eb61ad7104b5a7fa8d8d7b1/duckdb-1.5.3-cp313-cp313-macosx_11_0_arm64.whl",
hash =
"sha256:3d5db8c0b55e072cf437948ebb5d7e23d7b9d03d905fa5f9145583e65aa447f7", size
= 15449411, upload-time = "2026-05-20T11:54:59.089Z" },
- { url =
"https://files.pythonhosted.org/packages/50/0a/49b6fe04e2fcd63729eb607dadd44818dde77342a4f5ce086c6c92f1dd4d/duckdb-1.5.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:0ce80aed7a538422129a57eaca9141e3afb51f8bf562b1908b1576c9725b5b22", size
= 19333120, upload-time = "2026-05-20T11:55:01.727Z" },
- { url =
"https://files.pythonhosted.org/packages/63/4c/0907c3f76adb9dd90e67610b31e0304a35814e65c4c41a354a262c09b885/duckdb-1.5.3-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:787df63824f07bf18022dbc3b8ca4b2bfab0ebe616464f55c6e8cd0f59ea762e", size
= 21453266, upload-time = "2026-05-20T11:55:04.5Z" },
- { url =
"https://files.pythonhosted.org/packages/6d/9c/d2f23a7803ddbbd9413f7572ecf66a15120ed5ced7ce5c73e698c1406b76/duckdb-1.5.3-cp313-cp313-win_amd64.whl",
hash =
"sha256:bb5bb5dcdd09d62ee60f0ddbbef918e71cce304ffe28428b1131949d39ffaabf", size
= 13118640, upload-time = "2026-05-20T11:55:07.389Z" },
- { url =
"https://files.pythonhosted.org/packages/27/d5/7ba2316415bcdab6edd765bbbe35c2ca8a3800f2fe695cd70e3cdb997f09/duckdb-1.5.3-cp313-cp313-win_arm64.whl",
hash =
"sha256:2fa17ecdd5d3db122836cb71bb93601c2106a3be883c17dffddc02fbf3fa7888", size
= 13926409, upload-time = "2026-05-20T11:55:10.166Z" },
- { url =
"https://files.pythonhosted.org/packages/a5/c2/d4b6f8a5e4d3bc25773be6da76a99d9661ebbf3552c007c460d2dd59dbf8/duckdb-1.5.3-cp314-cp314-macosx_10_15_universal2.whl",
hash =
"sha256:4bfa9a4dadf71e83e2c4eaca2f9421c82a54defecc1b0b4c0be95e2389dec4fe", size
= 32636685, upload-time = "2026-05-20T11:55:13.158Z" },
- { url =
"https://files.pythonhosted.org/packages/42/58/e835c8298979d29db7a62cb5acc29e9b57aeaca7cdde2fcd3ac980f5cb18/duckdb-1.5.3-cp314-cp314-macosx_10_15_x86_64.whl",
hash =
"sha256:aea7baf67ad7e1829ac76f67d7dcbd7fb1f57c3eb179d55ac30952df4709ae30", size
= 17308134, upload-time = "2026-05-20T11:55:16.194Z" },
- { url =
"https://files.pythonhosted.org/packages/c9/46/617b51363f5613418c8b224b3cce16b58e6dde80904566bec232579c1d4e/duckdb-1.5.3-cp314-cp314-macosx_11_0_arm64.whl",
hash =
"sha256:0b0b4f088a65d77e1217ce5d7eff889e63fedc44281200d899ff47c84d8ff836", size
= 15449891, upload-time = "2026-05-20T11:55:18.687Z" },
- { url =
"https://files.pythonhosted.org/packages/b3/72/354146656e8d9ba3853d3a5ee80a481b8c5f70edfc3d5ae80a8c4479c967/duckdb-1.5.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:fe8d0c1f6a120aa03fa6e0d03897c71a1842e6cf7afd31d181348391f7108fe1", size
= 19338499, upload-time = "2026-05-20T11:55:21.34Z" },
- { url =
"https://files.pythonhosted.org/packages/56/8f/65fc623b51448f2bfba1a9ec6ab3debb4664c0876c0113a5e782600b53ac/duckdb-1.5.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:d0405eae18ec6e8210a471c97dbfe87a7e4d605274b7fe572a1f276e92158f13", size
= 21455828, upload-time = "2026-05-20T11:55:23.847Z" },
- { url =
"https://files.pythonhosted.org/packages/2b/db/d0274cbe9f5fe219f77c0bdf900ac77103569e83c102a4225ce04cbc607d/duckdb-1.5.3-cp314-cp314-win_amd64.whl",
hash =
"sha256:33ae08b3e818d7613d8936744b67718c2062c2f530376895bfd89efb51b81538", size
= 13640011, upload-time = "2026-05-20T11:55:26.276Z" },
- { url =
"https://files.pythonhosted.org/packages/07/5d/8f1899b8bef291caf953992fcd6c24df9f29387a35645e58c2504a5ca473/duckdb-1.5.3-cp314-cp314-win_arm64.whl",
hash =
"sha256:746433e49bbc667b4df283153415fbe37e9083e0eff6c3cd6e54de7536869cd4", size
= 14411554, upload-time = "2026-05-20T11:55:29.037Z" },
+ { url =
"https://files.pythonhosted.org/packages/47/37/4a38116e7700720fd152c666292214fd3abdf916496991296d8d1f66efbf/duckdb-1.5.5-cp313-cp313-macosx_10_13_universal2.whl",
hash =
"sha256:cd98829b67788609017e65c761bd42a5dd0f9129441bed8bda4d6881ccf819f0", size
= 32754294, upload-time = "2026-07-22T10:54:29.822Z" },
+ { url =
"https://files.pythonhosted.org/packages/66/42/7d392f1ba1eee0eaf4ab4c8c7a604bfe3536cd63f979cf5c98798664f807/duckdb-1.5.5-cp313-cp313-macosx_10_13_x86_64.whl",
hash =
"sha256:feead93c56679b79592d437c62975d39cb67adedffa7592c763baf8160ac7366", size
= 17368211, upload-time = "2026-07-22T10:54:33.359Z" },
+ { url =
"https://files.pythonhosted.org/packages/9f/a5/0a6f4fa60562faa615e55e15bd1953a2f2b17a8edd8105e5cda215e43457/duckdb-1.5.5-cp313-cp313-macosx_11_0_arm64.whl",
hash =
"sha256:49c963d9469373d7aba8d750d9ea565ab823e94166efed953f184dd9b169b98c", size
= 15509136, upload-time = "2026-07-22T10:54:36.369Z" },
+ { url =
"https://files.pythonhosted.org/packages/e4/cb/023c89f51978545b9fab318581bba0c457a58e7530d2d933e54ae7d8647c/duckdb-1.5.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:a736217825461732b5442d05a220f3da2e23a0dae114efbf08c9bf171b53098a", size
= 19392147, upload-time = "2026-07-22T10:54:39.551Z" },
+ { url =
"https://files.pythonhosted.org/packages/3e/c5/41bef391fb8b23dbc133c9f2ba016e7a7a8124513d2cc1b430f1897d87e4/duckdb-1.5.5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:078e6a60dd8eedde5832f45422ca5c4a6b8c837aeabd8a56ca0b7d933f588053", size
= 21511060, upload-time = "2026-07-22T10:54:42.788Z" },
+ { url =
"https://files.pythonhosted.org/packages/07/9f/c44dfc1f924ac29b3252dc1b91393c01d009dbfe9f8ed33f10b986151bd1/duckdb-1.5.5-cp313-cp313-win_amd64.whl",
hash =
"sha256:6826504277dba513c0c5d71d828456c94d729c9d2482f94b2e289f90a9167e28", size
= 13168028, upload-time = "2026-07-22T10:54:46.127Z" },
+ { url =
"https://files.pythonhosted.org/packages/ca/88/591384b2cd59abddd6f5dc175e60374f9abae6064429f0c4402854c10f44/duckdb-1.5.5-cp313-cp313-win_arm64.whl",
hash =
"sha256:baa9c5702002fabb559ded2a39008f9f421fcbc7237d388b8213eff1e08858de", size
= 13989955, upload-time = "2026-07-22T10:54:49.262Z" },
+ { url =
"https://files.pythonhosted.org/packages/3e/56/12c65bfa2d2605b81981b264788891bcf11ec72227889554cead5d8d13b9/duckdb-1.5.5-cp314-cp314-macosx_10_15_universal2.whl",
hash =
"sha256:8e6413dd40facb7b8ab21bd844450cd8f549b29e138635be9cf090ef4d2049e2", size
= 32761946, upload-time = "2026-07-22T10:54:53.412Z" },
+ { url =
"https://files.pythonhosted.org/packages/b9/46/682ce155f17e0d2822d4f13ee3db9ca4b5b7c2da61b841b2629035e1f4bc/duckdb-1.5.5-cp314-cp314-macosx_10_15_x86_64.whl",
hash =
"sha256:64078acfd16541132ac6e191eb81b2845554444a0305cc1aa581ba107e514aa8", size
= 17375069, upload-time = "2026-07-22T10:54:57.269Z" },
+ { url =
"https://files.pythonhosted.org/packages/39/ce/a24bcbd3289c8f305a430759c5fc12242740b4af3e17f7593f3a34e333d2/duckdb-1.5.5-cp314-cp314-macosx_11_0_arm64.whl",
hash =
"sha256:8c11775cc99a447618d5f1840126db17f2652f3eae05529df4f81f40e2df7151", size
= 15519791, upload-time = "2026-07-22T10:55:00.681Z" },
+ { url =
"https://files.pythonhosted.org/packages/d9/76/3a01afbc615c1d418c0de58a6b68ac5ce2a8563232c0464bfbc2ce552398/duckdb-1.5.5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
hash =
"sha256:77bbc1e6ba12e1e06f9020117bdf848627ecfdf36f907550e62e008e6109dece", size
= 19398251, upload-time = "2026-07-22T10:55:04.168Z" },
+ { url =
"https://files.pythonhosted.org/packages/a1/43/3a5e81d1728f4d234c79bfe385808ee7c04834f7c37a4b5c257459c25614/duckdb-1.5.5-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl",
hash =
"sha256:fbf0f2d48b43c6c304d00463b463c27ead6c4b01c3c1816b750f728decf71afe", size
= 21513851, upload-time = "2026-07-22T10:55:07.864Z" },
+ { url =
"https://files.pythonhosted.org/packages/91/41/fc7c829172c60ca22485251eab285f4f1a0d87b486a024c726f21471d86e/duckdb-1.5.5-cp314-cp314-win_amd64.whl",
hash =
"sha256:9dc826c4b50e64f6c4e4d07a3a9cb075ef70ba3899dc43ec5493dc3d7b04b353", size
= 13691858, upload-time = "2026-07-22T10:55:11.181Z" },
+ { 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]]
@@ -207,7 +207,7 @@ dependencies = [
]
[package.metadata]
-requires-dist = [{ name = "adbc-drivers-validation", git =
"https://github.com/adbc-drivers/validation?rev=ffb8c9e9b76b2953525e67f5305497587ced1edd"
}]
+requires-dist = [{ name = "adbc-drivers-validation", git =
"https://github.com/adbc-drivers/validation?rev=575a41bfd96b09d9d8a057d0ea1e66a27a315475"
}]
[[package]]
name = "pyarrow"
@@ -327,7 +327,7 @@ wheels = [
[[package]]
name = "pytest"
-version = "9.0.3"
+version = "9.1.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
@@ -336,18 +336,18 @@ dependencies = [
{ name = "pluggy" },
{ name = "pygments" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz",
hash =
"sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size
= 1572165, upload-time = "2026-04-07T17:16:18.027Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz",
hash =
"sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size
= 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl",
hash =
"sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size
= 375249, upload-time = "2026-04-07T17:16:16.13Z" },
+ { 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 = "sqlglot"
-version = "30.10.0"
+version = "30.17.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/84/23/68932577cac288a0b7267ab8cea3e0e8a90809ed52a37b8514a795ea0433/sqlglot-30.10.0.tar.gz",
hash =
"sha256:be915f765813ba7ec7c6037732a738cb36811737b5ea6258ba99268043ef74a6", size
= 5888815, upload-time = "2026-06-09T10:10:05.661Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/56/d4/da49abcc81beebbb25f29ddf87f2980c63c949569d7f2da40c06d95fa415/sqlglot-30.17.0.tar.gz",
hash =
"sha256:2d6b8def93304fa300f4d20f48e3909e7f436fda56ca1fafd8975f6c561ef62c", size
= 5999019, upload-time = "2026-08-12T19:36:50.587Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/d0/09/4f82db061c866e1bc3b620f852a1516881683ffce76c33180a5b6a0a6a34/sqlglot-30.10.0-py3-none-any.whl",
hash =
"sha256:540e5dfee4c6b65a3b5d93517a2573bb7546681e95d530d0e4e1702415d8835e", size
= 696535, upload-time = "2026-06-09T10:10:03.437Z" },
+ { url =
"https://files.pythonhosted.org/packages/f3/bc/2a07cef49046e6cf5d1a8b1de553aaef8491b4170dbfe254c8687c764408/sqlglot-30.17.0-py3-none-any.whl",
hash =
"sha256:84435ac283a60173da31b5fd7d11a725037a1c3fd6ed1e21fb065de74ddb579f", size
= 741795, upload-time = "2026-08-12T19:36:48.699Z" },
]
[[package]]
diff --git a/ci/scripts/validate.sh b/ci/scripts/validate.sh
index 66ac0db47..60ea4dd1b 100755
--- a/ci/scripts/validate.sh
+++ b/ci/scripts/validate.sh
@@ -30,6 +30,7 @@ set -euo pipefail
test_project() {
local -r subdir="${1}"
local -r run=$(echo "${2}" | tr '[:upper:]' '[:lower:]')
+ shift 2
case "${run}" in
1|on)
@@ -59,15 +60,16 @@ test_project() {
fi
pushd "${subdir}"
- echo env ${options[@]} pytest -vvs --junit-xml=validation-report.xml
-rfEsxX tests/
- env ${options[@]} pytest -vvs --junit-xml=validation-report.xml -rfEsxX
tests/
+ echo env ${options[@]} pytest -vvs --junit-xml=validation-report.xml
-rfEsxX tests/ "$@"
+ env ${options[@]} pytest -vvs --junit-xml=validation-report.xml -rfEsxX
tests/ "$@"
popd
}
main() {
local -r source_dir="${1}"
+ shift
- test_project "${source_dir}/c/driver/postgresql/validation"
"${BUILD_DRIVER_POSTGRESQL}"
+ test_project "${source_dir}/c/driver/postgresql/validation"
"${BUILD_DRIVER_POSTGRESQL}" "$@"
}
main "$@"
diff --git a/compose.yaml b/compose.yaml
index ffacd6b77..dcfd78f59 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -355,6 +355,129 @@ services:
ports:
- "5432:5432"
+ cedardb-test:
+ container_name: adbc_cedardb_test
+ image: cedardb/cedardb:v2026-08-13
+ environment:
+ CEDAR_PASSWORD: CedarDB2026!
+ healthcheck:
+ test: ["CMD-SHELL", "PGPASSWORD='CedarDB2026!' pg_isready -U postgres -d
postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ ports:
+ - "5433:5432"
+
+ citus-test:
+ container_name: adbc_citus_test
+ image: citusdata/citus:14.1.0-pg17
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: password
+ POSTGRES_DB: postgres
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ ports:
+ - "5434:5432"
+
+ cockroachdb-test:
+ container_name: adbc_cockroachdb_test
+ image: cockroachdb/cockroach:v26.2.5
+ command: start-single-node --insecure
+ healthcheck:
+ test: ["CMD", "cockroach", "sql", "--insecure",
"--host=localhost:26257", "--execute=SELECT 1"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ ports:
+ - "5435:26257"
+
+ cratedb-test:
+ container_name: adbc_cratedb_test
+ image: crate:6.4.2
+ command:
+ - -Cdiscovery.type=single-node
+ - -Cgateway.expected_data_nodes=1
+ - -Cgateway.recover_after_data_nodes=1
+ environment:
+ CRATE_HEAP_SIZE: 1g
+ healthcheck:
+ test: ["CMD-SHELL", "curl --fail --silent --show-error --header
'Content-Type: application/json' --data '{\"stmt\":\"SELECT 1\"}'
http://localhost:4200/_sql > /dev/null"]
+ interval: 10s
+ timeout: 5s
+ retries: 20
+ start_period: 20s
+ ports:
+ - "5436:5432"
+
+ paradedb-test:
+ container_name: adbc_paradedb_test
+ image: paradedb/paradedb:0.25.3-pg18
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: password
+ POSTGRES_DB: postgres
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ ports:
+ - "5437:5432"
+
+ timescaledb-test:
+ container_name: adbc_timescaledb_test
+ image: timescale/timescaledb-ha:pg18.4-ts2.29.1-all-oss
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: password
+ POSTGRES_DB: postgres
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ ports:
+ - "5438:5432"
+
+ yugabytedb-test:
+ container_name: adbc_yugabytedb_test
+ hostname: adbc-yugabytedb-test
+ image: yugabytedb/yugabyte:2026.1.1.1-b2
+ command: >-
+ bin/yugabyted start --background=false
+ --master_flags=reject_writes_when_disk_full=false
+ --tserver_flags=reject_writes_when_disk_full=false
+ healthcheck:
+ test: ["CMD-SHELL", "/home/yugabyte/bin/ysqlsh --host
adbc-yugabytedb-test --username yugabyte --dbname yugabyte --command 'SELECT 1'
> /dev/null"]
+ interval: 10s
+ timeout: 5s
+ retries: 20
+ start_period: 30s
+ ports:
+ - "5439:5433"
+
+ alloydb-omni-test:
+ container_name: adbc_alloydb_omni_test
+ image: google/alloydbomni:17.9.0
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: password
+ POSTGRES_DB: postgres
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ ports:
+ - "5440:5432"
+
spiceai-test:
container_name: adbc-spiceai
build: