Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,21 @@ jobs:
run: cargo doc --workspace --no-deps --document-private-items --all-features
env:
RUSTDOCFLAGS: -D warnings

docs_rs:
name: Emulate docs.rs build
runs-on: ubuntu-latest
env:
RUSTDOCFLAGS: -Dwarnings
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
- uses: dtolnay/install@cargo-docs-rs
- run: cargo +nightly docs-rs

clippy:
name: Clippy
needs: [format, docs]
needs: [format, docs, docs_rs]
runs-on: ubuntu-latest
strategy:
matrix:
Expand Down
62 changes: 55 additions & 7 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
exasol-version: ${{ env.EXASOL_VERSION }}
num-nodes: ${{ env.NUM_NODES }}

- uses: dtolnay/rust-toolchain@stable
- uses: dtolnay/rust-toolchain@1.86.0
- uses: Swatinem/rust-cache@v2

- name: Test IO combos (no TLS, no compression)
Expand All @@ -38,41 +38,89 @@ jobs:
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (no TLS, with compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,compression -- it_works_with_io_combo --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (NativeTLS, no compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-native-tls -- it_works_with_io_combo --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (NativeTLS, with compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-native-tls,compression -- it_works_with_io_combo --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (Rustls, no compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs -- it_works_with_io_combo --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (Rustls, with compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs,compression -- it_works_with_io_combo --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

io_tests_latest:
name: IO tests on latest Exasol (TLS only)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Free disk space
uses: ./.github/actions/free-space

- name: Create Exasol cluster
timeout-minutes: ${{ fromJSON(env.EXA_CLUSTER_SETUP_TIMEOUT) }}
id: exa-cluster
uses: ./.github/actions/exa-cluster
with:
exasol-version: latest
num-nodes: 1

- uses: dtolnay/rust-toolchain@1.86.0
- uses: Swatinem/rust-cache@v2

- name: Test IO combos (NativeTLS, no compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-native-tls -- it_works_with_io_combo_tls --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (NativeTLS, with compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-native-tls,compression -- it_works_with_io_combo_tls --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (Rustls, no compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs -- it_works_with_io_combo_tls --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

- name: Test IO combos (Rustls, with compression)
timeout-minutes: ${{ fromJSON(env.TESTS_TIMEOUT) }}
run: cargo test --features runtime-tokio,etl,tls-rustls-aws-lc-rs,compression -- it_works_with_io_combo_tls --ignored --nocapture
env:
DATABASE_URL: ${{ steps.exa-cluster.outputs.url }}
SQLX_OFFLINE: true

driver_tests:
name: Driver tests
Expand Down Expand Up @@ -195,7 +243,7 @@ jobs:

publish:
name: Publish
needs: [io_tests, driver_tests, etl_tests]
needs: [io_tests, io_tests_latest, driver_tests, etl_tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## [0.9.2] - 2026-01-23

### Fixed

- [#59](https://github.com/bobozaur/sqlx-exasol/pull/59): More closely mimic sqlx feature flags
- mimic `sqlx` feature flags more closely to avoid surprises
- fix `docs.rs` build
- add `cargo docs-rs` CI job
- selective re-exports from `sqlx` and `sqlx-core`
- add latest Exasol IO tests to publish workflow

## [0.9.1] - 2026-01-22

### Added
Expand Down
147 changes: 95 additions & 52 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
members = [".", "sqlx-exasol-cli", "sqlx-exasol-impl", "sqlx-exasol-macros"]

[workspace.package]
version = "0.9.1"
version = "0.9.2"
license = "MIT OR Apache-2.0"
edition = "2024"
rust-version = "1.86.0"
Expand All @@ -23,87 +23,138 @@ authors.workspace = true
repository.workspace = true
exclude = ["tests/*"]

# Note: written so that it may be copy-pasted to other crates
[package.metadata.docs.rs]
features = [
"etl",
"compression",
"any",
"migrate",
"macros",
"bigdecimal",
"chrono",
"rust_decimal",
"time",
"uuid",
"json",
"geo-types",
]
features = ["_unstable-docs"]
rustdoc-args = ["--cfg", "docsrs"]

[features]
default = ["any", "macros", "migrate", "json"]

derive = ["sqlx-a-orig/derive", "sqlx-exasol-macros?/derive"]
macros = ["derive", "sqlx-a-orig/macros", "sqlx-exasol-macros/macros"]
derive = ["sqlx-exasol-macros/derive", "sqlx-orig/derive"]
macros = ["derive", "sqlx-exasol-macros/macros", "sqlx-orig/macros"]
migrate = [
"sqlx-a-orig/migrate",
"sqlx-core/migrate",
"sqlx-exasol-macros/migrate",
"sqlx-exasol-impl/migrate",
"sqlx-exasol-macros?/migrate",
]

sqlx-toml = ["sqlx-exasol-impl/sqlx-toml", "sqlx-exasol-macros?/sqlx-toml"]
# Enable parsing of `sqlx.toml` for configuring macros and migrations.
sqlx-toml = ["sqlx-core/sqlx-toml", "sqlx-exasol-macros?/sqlx-toml"]

# intended mainly for CI and docs
all-databases = ["any"]
_unstable-all-types = [
"bigdecimal",
"rust_decimal",
"json",
"time",
"chrono",
"uuid",
"geo-types",
]

# Render documentation that wouldn't otherwise be shown (e.g. `sqlx_core::config`).
_unstable-docs = ["all-databases", "_unstable-all-types", "etl", "compression"]

# Base runtime features without TLS
runtime-async-std = ["sqlx-a-orig/runtime-async-std"]
runtime-tokio = ["sqlx-a-orig/runtime-tokio"]
runtime-async-global-executor = [
"_rt-async-global-executor",
"sqlx-core/_rt-async-global-executor",
"sqlx-exasol-macros?/_rt-async-global-executor",
]
runtime-async-std = [
"_rt-async-std",
"sqlx-core/_rt-async-std",
"sqlx-exasol-macros?/_rt-async-std",
]
runtime-smol = [
"_rt-smol",
"sqlx-core/_rt-smol",
"sqlx-exasol-macros?/_rt-smol",
]
runtime-tokio = [
"_rt-tokio",
"sqlx-core/_rt-tokio",
"sqlx-exasol-macros?/_rt-tokio",
]

# TLS features
tls-native-tls = ["sqlx-a-orig/tls-native-tls", "sqlx-exasol-impl/native-tls"]
tls-native-tls = [
"sqlx-core/_tls-native-tls",
"sqlx-exasol-macros?/_tls-native-tls",
"sqlx-exasol-impl/native-tls",
]
tls-rustls = ["tls-rustls-ring"] # For backwards compatibility
tls-rustls-aws-lc-rs = [
"sqlx-a-orig/tls-rustls-aws-lc-rs",
"sqlx-core/_tls-rustls-aws-lc-rs",
"sqlx-exasol-macros?/_tls-rustls-aws-lc-rs",
"sqlx-exasol-impl/rustls-aws-lc-rs",
]
tls-rustls-ring = ["tls-rustls-ring-webpki"] # For backwards compatibility
tls-rustls-ring-webpki = [
"sqlx-a-orig/tls-rustls-ring-webpki",
"sqlx-core/_tls-rustls-ring-webpki",
"sqlx-exasol-macros?/_tls-rustls-ring-webpki",
"sqlx-exasol-impl/rustls-ring",
]
tls-rustls-ring-native-roots = [
"sqlx-a-orig/tls-rustls-ring-native-roots",
"sqlx-core/_tls-rustls-ring-native-roots",
"sqlx-exasol-macros?/_tls-rustls-ring-native-roots",
"sqlx-exasol-impl/rustls-ring",
]

# Database
any = ["sqlx-a-orig/any", "sqlx-exasol-impl/any"]
# No-op feature used by the workflows to compile without TLS enabled. Not meant for general use.
tls-none = []

# for conditional compilation
_rt-async-global-executor = []
_rt-async-std = []
_rt-smol = []
_rt-tokio = []

# database
any = ["sqlx-core/any", "sqlx-exasol-impl/any"]

# types
json = ["sqlx-core/json", "sqlx-exasol-macros?/json", "sqlx-exasol-impl/json"]

# Types
bigdecimal = [
"sqlx-a-orig/bigdecimal",
"sqlx-exasol-impl/bigdecimal",
"sqlx-core/bigdecimal",
"sqlx-exasol-macros?/bigdecimal",
"sqlx-exasol-impl/bigdecimal",
]
chrono = [
"sqlx-a-orig/chrono",
"sqlx-exasol-impl/chrono",
"sqlx-core/chrono",
"sqlx-exasol-macros?/chrono",
"sqlx-exasol-impl/chrono",
]
geo-types = ["sqlx-exasol-impl/geo-types", "sqlx-exasol-macros?/geo-types"]
json = ["sqlx-a-orig/json", "sqlx-exasol-impl/json", "sqlx-exasol-macros?/json"]
rust_decimal = [
"sqlx-a-orig/rust_decimal",
"sqlx-exasol-impl/rust_decimal",
"sqlx-core/rust_decimal",
"sqlx-exasol-macros?/rust_decimal",
"sqlx-exasol-impl/rust_decimal",
]
time = ["sqlx-a-orig/time", "sqlx-exasol-impl/time", "sqlx-exasol-macros?/time"]
uuid = ["sqlx-a-orig/uuid", "sqlx-exasol-impl/uuid", "sqlx-exasol-macros?/uuid"]
time = ["sqlx-core/time", "sqlx-exasol-macros?/time", "sqlx-exasol-impl/time"]
uuid = ["sqlx-core/uuid", "sqlx-exasol-macros?/uuid", "sqlx-exasol-impl/uuid"]
geo-types = ["sqlx-exasol-macros?/geo-types", "sqlx-exasol-impl/geo-types"]

# Driver specific features
compression = ["sqlx-exasol-impl/compression"]
etl = ["sqlx-exasol-impl/etl"]

[workspace.dependencies]
# Internal
sqlx-exasol = { version = "0.9.1", path = "." }
sqlx-exasol-macros = { version = "0.9.1", path = "sqlx-exasol-macros" }
sqlx-exasol-impl = { version = "0.9.1", path = "sqlx-exasol-impl" }
sqlx-exasol = { version = "=0.9.2", path = "." }
sqlx-exasol-macros = { version = "=0.9.2", path = "sqlx-exasol-macros" }
sqlx-exasol-impl = { version = "=0.9.2", path = "sqlx-exasol-impl" }

# SQLx
sqlx-cli = { version = "=0.9.0-alpha.1", default-features = false }
sqlx-core = { version = "=0.9.0-alpha.1", default-features = false, features = [
"offline",
"migrate",
] }
sqlx-macros-core = { version = "=0.9.0-alpha.1", default-features = false }
sqlx-orig = { version = "=0.9.0-alpha.1", default-features = false, package = "sqlx" }

# External
arrayvec = { version = "0.7", default-features = false }
Expand Down Expand Up @@ -165,15 +216,6 @@ serde_json = { version = "1", default-features = false, features = [
"raw_value",
] }
sha2 = { version = "0.10", default-features = false, features = ["std"] }
sqlx-cli = { version = "0.9.0-alpha.1", default-features = false }
sqlx-core = { version = "0.9.0-alpha.1", default-features = false, features = [
"offline",
"migrate",
] }
sqlx-macros-core = { version = "0.9.0-alpha.1", default-features = false }
# Purposely named like this to prevent formatting reordering.
# We also get the benefit of ensuring that our overrides work correctly since `sqlx` is not available
sqlx-a-orig = { version = "0.9.0-alpha.1", default-features = false, package = "sqlx" }
syn = { version = "2", default-features = false, features = [
"full",
"parsing",
Expand Down Expand Up @@ -203,7 +245,8 @@ wkt = { version = "0.14", default-features = false, features = [
[dependencies]
sqlx-exasol-macros = { workspace = true, optional = true }
sqlx-exasol-impl = { workspace = true }
sqlx-a-orig = { workspace = true }
sqlx-core = { workspace = true }
sqlx-orig = { workspace = true }

[dev-dependencies]
dotenvy = { workspace = true }
Expand Down
Loading