[package]
edition = "2024"
name = "qail-pg"
version = "2.0.0"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Rust PostgreSQL driver for typed AST queries with direct wire-protocol execution"
homepage = "https://dev.qail.io/rust"
documentation = "https://docs.rs/qail-pg"
readme = "README.md"
keywords = [
"postgres",
"postgresql",
"driver",
"async",
"database",
]
categories = [
"database",
"asynchronous",
]
license = "Apache-2.0"
repository = "https://github.com/qail-io/qail"
resolver = "2"
[features]
chrono = ["dep:chrono"]
default = []
enterprise-gssapi = []
libpq = []
native-io-uring = ["dep:io-uring"]
uuid = ["dep:uuid"]
[lib]
name = "qail_pg"
path = "src/lib.rs"
[[example]]
name = "auto_mode_soak"
path = "examples/auto_mode_soak.rs"
[[example]]
name = "auto_mode_weird"
path = "examples/auto_mode_weird.rs"
[[example]]
name = "battle_cancel"
path = "examples/battle_cancel.rs"
[[example]]
name = "battle_conversation_detail"
path = "examples/battle_conversation_detail.rs"
[[example]]
name = "battle_conversations"
path = "examples/battle_conversations.rs"
[[example]]
name = "battle_herd"
path = "examples/battle_herd.rs"
[[example]]
name = "battle_params"
path = "examples/battle_params.rs"
[[example]]
name = "battle_qail_row"
path = "examples/battle_qail_row.rs"
required-features = [
"chrono",
"uuid",
]
[[example]]
name = "battle_restart"
path = "examples/battle_restart.rs"
[[example]]
name = "battle_rls"
path = "examples/battle_rls.rs"
[[example]]
name = "battle_test"
path = "examples/battle_test.rs"
[[example]]
name = "benchmark"
path = "examples/benchmark.rs"
[[example]]
name = "builder_test"
path = "examples/builder_test.rs"
[[example]]
name = "cte_real_test"
path = "examples/cte_real_test.rs"
[[example]]
name = "db_benchmark"
path = "examples/db_benchmark.rs"
[[example]]
name = "encoder_chaos_test"
path = "examples/encoder_chaos_test.rs"
[[example]]
name = "encoding_benchmark"
path = "examples/encoding_benchmark.rs"
[[example]]
name = "fifty_million"
path = "examples/fifty_million.rs"
[[example]]
name = "hundred_million"
path = "examples/hundred_million.rs"
[[example]]
name = "libpq_benchmark"
path = "examples/libpq_benchmark.rs"
required-features = ["libpq"]
[[example]]
name = "libpq_only"
path = "examples/libpq_only.rs"
required-features = ["libpq"]
[[example]]
name = "libpq_pool"
path = "examples/libpq_pool.rs"
required-features = ["libpq"]
[[example]]
name = "million"
path = "examples/million.rs"
[[example]]
name = "million_ast"
path = "examples/million_ast.rs"
[[example]]
name = "million_blocking"
path = "examples/million_blocking.rs"
[[example]]
name = "million_cached"
path = "examples/million_cached.rs"
[[example]]
name = "million_complex"
path = "examples/million_complex.rs"
[[example]]
name = "million_complex_fair"
path = "examples/million_complex_fair.rs"
[[example]]
name = "million_giant"
path = "examples/million_giant.rs"
[[example]]
name = "million_local"
path = "examples/million_local.rs"
[[example]]
name = "million_prepared"
path = "examples/million_prepared.rs"
[[example]]
name = "million_raw"
path = "examples/million_raw.rs"
[[example]]
name = "pool_correct"
path = "examples/pool_correct.rs"
[[example]]
name = "prepared_ast_vs_cached"
path = "examples/prepared_ast_vs_cached.rs"
[[example]]
name = "profile_detailed"
path = "examples/profile_detailed.rs"
[[example]]
name = "profile_pipeline"
path = "examples/profile_pipeline.rs"
[[example]]
name = "qail_native_pgx_once"
path = "examples/qail_native_pgx_once.rs"
[[example]]
name = "qail_pgx_modes_once"
path = "examples/qail_pgx_modes_once.rs"
[[example]]
name = "qail_strict_once"
path = "examples/qail_strict_once.rs"
[[example]]
name = "qailpg_only"
path = "examples/qailpg_only.rs"
[[example]]
name = "qailpg_pool"
path = "examples/qailpg_pool.rs"
[[example]]
name = "real_db_test"
path = "examples/real_db_test.rs"
[[example]]
name = "ssl_test"
path = "examples/ssl_test.rs"
[[example]]
name = "test_subquery_sql"
path = "examples/test_subquery_sql.rs"
[[example]]
name = "tokio_postgres_strict_once"
path = "examples/tokio_postgres_strict_once.rs"
[[example]]
name = "type_test"
path = "examples/type_test.rs"
[[example]]
name = "wire_bytes_demo"
path = "examples/wire_bytes_demo.rs"
[[test]]
name = "access_checked_live"
path = "tests/access_checked_live.rs"
[[test]]
name = "cached_desync_hardening"
path = "tests/cached_desync_hardening.rs"
[[test]]
name = "copy_protocol_hardening"
path = "tests/copy_protocol_hardening.rs"
[[test]]
name = "cursor_live"
path = "tests/cursor_live.rs"
[[test]]
name = "gss_linux_smoke"
path = "tests/gss_linux_smoke.rs"
[[test]]
name = "gssenc_negotiation"
path = "tests/gssenc_negotiation.rs"
[[test]]
name = "integration"
path = "tests/integration.rs"
[[test]]
name = "io_uring_backend_smoke"
path = "tests/io_uring_backend_smoke.rs"
[[test]]
name = "merge_integration"
path = "tests/merge_integration.rs"
[[test]]
name = "pool_hot_statement_hardening"
path = "tests/pool_hot_statement_hardening.rs"
[[test]]
name = "protocol_version_negotiation"
path = "tests/protocol_version_negotiation.rs"
[[test]]
name = "raw_usage_guard"
path = "tests/raw_usage_guard.rs"
[[test]]
name = "recursive_cte_live"
path = "tests/recursive_cte_live.rs"
[[test]]
name = "red_team_wire"
path = "tests/red_team_wire.rs"
[[test]]
name = "replication_e2e"
path = "tests/replication_e2e.rs"
[[test]]
name = "replication_protocol_hardening"
path = "tests/replication_protocol_hardening.rs"
[[test]]
name = "rls_integration"
path = "tests/rls_integration.rs"
[[test]]
name = "rls_pipeline_hardening"
path = "tests/rls_pipeline_hardening.rs"
[[test]]
name = "set_ops_live"
path = "tests/set_ops_live.rs"
[[test]]
name = "startup_protocol_hardening"
path = "tests/startup_protocol_hardening.rs"
[[test]]
name = "tls_integration"
path = "tests/tls_integration.rs"
[[test]]
name = "wire_decode_fuzz"
path = "tests/wire_decode_fuzz.rs"
[[test]]
name = "wire_proptest"
path = "tests/wire_proptest.rs"
[[test]]
name = "wire_protocol_hardening"
path = "tests/wire_protocol_hardening.rs"
[dependencies.base64]
version = "0.22"
[dependencies.bytes]
version = "1.5"
[dependencies.chrono]
version = "0.4"
optional = true
[dependencies.hmac]
version = "0.12"
[dependencies.itoa]
version = "1"
[dependencies.md-5]
version = "0.10"
[dependencies.metrics]
version = "0.24"
[dependencies.pbkdf2]
version = "0.12"
features = ["simple"]
[dependencies.postgres-protocol]
version = "0.6"
[dependencies.qail-core]
version = "2.0.0"
[dependencies.rand]
version = "0.10"
[dependencies.rustls-native-certs]
version = "0.8"
[dependencies.ryu]
version = "1"
[dependencies.sha2]
version = "0.10"
[dependencies.tokio]
version = "1.50.0"
features = [
"net",
"io-util",
"sync",
"rt",
"time",
]
[dependencies.tokio-rustls]
version = "0.26"
[dependencies.tracing]
version = "0.1"
[dependencies.uuid]
version = "1.23"
optional = true
[dev-dependencies.chrono]
version = "0.4"
[dev-dependencies.futures-util]
version = "0.3"
[dev-dependencies.proptest]
version = "1.11.0"
[dev-dependencies.tokio]
version = "1.50.0"
features = [
"rt-multi-thread",
"macros",
]
[dev-dependencies.tokio-postgres]
version = "0.7.17"
[dev-dependencies.uuid]
version = "1.23"
features = ["v4"]
[target.'cfg(target_os = "linux")'.dependencies.io-uring]
version = "0.7"
optional = true
[lints.rust]
dead_code = "deny"
unused = "deny"
unused_imports = "deny"
unused_variables = "deny"
warnings = "deny"