sqlx_odbc/lib.rs
1//! ODBC database driver building blocks for SQLx.
2//!
3//! This crate is being ported as an independent split driver crate. It intentionally depends on
4//! published crates from crates.io only; it does not depend on a local SQLx checkout.
5//!
6//! ## Test Setup
7//!
8//! Fast tests do not require an ODBC data source:
9//!
10//! ```sh
11//! cargo test
12//! ```
13//!
14//! Integration smoke tests use `ODBC_DATABASE_URL` and skip cleanly when it is absent:
15//!
16//! ```sh
17//! ODBC_DATABASE_URL='DSN=MyDataSource;UID=user;PWD=password' cargo test --test odbc
18//! ```
19//!
20//! To run the same tests locally against a known installed driver:
21//!
22//! ```sh
23//! scripts/test-driver.sh duckdb
24//! DUCKDB_ODBC_DRIVER=/absolute/path/to/libduckdb_odbc.so scripts/test-driver.sh duckdb
25//! ODBC_DATABASE_URL='DSN=MyDataSource;UID=user;PWD=password' scripts/test-driver.sh custom
26//! ```
27//!
28//! `ODBC_DATABASE_URL` may be a standard ODBC connection string, a bare DSN name, or the legacy
29//! `odbc:` form:
30//!
31//! ```text
32//! DSN=MyDataSource
33//! Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=test
34//! FILEDSN=/path/to/file.dsn
35//! odbc:DSN=MyDataSource
36//! MyDataSource
37//! ```
38//!
39//! Native requirements are provided by the operating system:
40//!
41//! - Unix-like systems need an ODBC driver manager such as `unixODBC`.
42//! - A database-specific ODBC driver must be installed and visible to the driver manager.
43//! - DSN names must be configured in the driver manager's usual files or registry locations.
44//! - Buffered fetching can truncate long text or binary values when `max_column_size` is set.
45//! - Enable the `vendored-unix-odbc` feature to statically link the unixODBC driver manager.
46
47#![deny(missing_docs)]
48#![deny(rustdoc::broken_intra_doc_links)]
49#![warn(future_incompatible, rust_2018_idioms)]
50
51pub mod any;
52mod arguments;
53mod column;
54mod connection;
55mod database;
56mod error;
57mod options;
58mod query_result;
59mod row;
60mod statement;
61mod transaction;
62mod type_info;
63mod value;
64
65pub use arguments::{OdbcArgumentValue, OdbcArguments, OdbcParameterCollection};
66pub use column::OdbcColumn;
67pub use connection::OdbcConnection;
68pub use database::Odbc;
69pub use error::{OdbcDatabaseError, OdbcError, Result};
70pub use options::{OdbcBufferSettings, OdbcConnectOptions};
71pub use query_result::OdbcQueryResult;
72pub use row::OdbcRow;
73pub use statement::OdbcStatement;
74pub use transaction::OdbcTransactionManager;
75pub use type_info::{DataTypeExt, OdbcTypeInfo};
76pub use value::{OdbcValue, OdbcValueKind};
77
78/// An alias for [`Pool`][sqlx_core::pool::Pool], specialized for ODBC.
79pub type OdbcPool = sqlx_core::pool::Pool<Odbc>;
80
81/// An alias for [`PoolOptions`][sqlx_core::pool::PoolOptions], specialized for ODBC.
82pub type OdbcPoolOptions = sqlx_core::pool::PoolOptions<Odbc>;
83
84/// An alias for [`Transaction`][sqlx_core::transaction::Transaction], specialized for ODBC.
85pub type OdbcTransaction<'c> = sqlx_core::transaction::Transaction<'c, Odbc>;
86
87/// An alias for [`Executor<'_, Database = Odbc>`][sqlx_core::executor::Executor].
88pub trait OdbcExecutor<'c>: sqlx_core::executor::Executor<'c, Database = Odbc> {}
89impl<'c, T> OdbcExecutor<'c> for T where T: sqlx_core::executor::Executor<'c, Database = Odbc> {}