Skip to main content

sqlx_sqlserver/
lib.rs

1//! Microsoft SQL Server driver for SQLx.
2//!
3//! `sqlx-sqlserver` is an independent split driver crate. Use it directly with
4//! `sqlx-core` native APIs, or install its [`Any` driver][any::DRIVER] when an
5//! application wants to open SQL Server URLs through `AnyConnection`.
6//!
7//! # Native connection
8//!
9//! ```no_run
10//! use sqlx_core::connection::{ConnectOptions, Connection};
11//! use sqlx_core::row::Row;
12//! use sqlx_sqlserver::MssqlConnectOptions;
13//!
14//! # async fn run() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
15//! let mut conn = "mssql://sa:Password123!@localhost:1433/master?encrypt=mandatory&trust_server_certificate=true"
16//!     .parse::<MssqlConnectOptions>()?
17//!     .connect()
18//!     .await?;
19//!
20//! let row = sqlx_core::query::query("SELECT 1")
21//!     .fetch_one(&mut conn)
22//!     .await?;
23//!
24//! let value: i32 = row.try_get(0)?;
25//! assert_eq!(value, 1);
26//!
27//! conn.close().await?;
28//! # Ok(())
29//! # }
30//! ```
31//!
32//! # `AnyConnection`
33//!
34//! Install this driver before connecting through SQLx `Any` APIs:
35//!
36//! ```no_run
37//! use sqlx_core::connection::Connection;
38//!
39//! # async fn run() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
40//! sqlx_core::any::driver::install_drivers(&[sqlx_sqlserver::any::DRIVER])?;
41//!
42//! let mut conn = sqlx_core::any::AnyConnection::connect(
43//!     "mssql://sa:Password123!@localhost:1433/master?encrypt=mandatory&trust_server_certificate=true",
44//! )
45//! .await?;
46//!
47//! conn.close().await?;
48//! # Ok(())
49//! # }
50//! ```
51//!
52//! To combine split drivers, install all of them once at application startup:
53//!
54//! ```ignore
55//! fn install() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
56//! sqlx_core::any::driver::install_drivers(&[
57//!     sqlx_sqlserver::any::DRIVER,
58//!     sqlx_odbc::any::DRIVER,
59//! ])?;
60//! Ok(())
61//! }
62//! ```
63//!
64//! The examples use `trust_server_certificate=true` for local development with
65//! SQL Server's self-signed container certificate. Production deployments should
66//! prefer a trusted certificate and, when needed, `hostname_in_certificate` or
67//! `ssl_root_cert` in [`MssqlConnectOptions`].
68
69#![deny(missing_docs)]
70#![deny(rustdoc::broken_intra_doc_links)]
71#![warn(future_incompatible, rust_2018_idioms)]
72
73pub mod any;
74mod arguments;
75mod column;
76mod connection;
77mod database;
78mod error;
79#[cfg(feature = "migrate")]
80mod migrate;
81/// Connection option parsing and configuration for SQL Server.
82pub mod options;
83pub mod protocol;
84mod query_result;
85mod row;
86mod ssrp;
87mod statement;
88mod tls;
89mod transaction;
90mod type_info;
91mod value;
92
93pub use arguments::MssqlArguments;
94pub use column::MssqlColumn;
95pub use connection::MssqlConnection;
96pub use database::Mssql;
97pub use error::MssqlDatabaseError;
98pub use options::{Encrypt, MssqlConnectOptions, MssqlInvalidOption};
99pub use query_result::MssqlQueryResult;
100pub use row::MssqlRow;
101pub use statement::MssqlStatement;
102pub use transaction::MssqlTransactionManager;
103pub use type_info::{MssqlType, MssqlTypeInfo};
104pub use value::{MssqlValue, MssqlValueRef};
105
106/// An alias for [`Pool`][sqlx_core::pool::Pool], specialized for SQL Server.
107pub type MssqlPool = sqlx_core::pool::Pool<Mssql>;
108
109/// An alias for [`PoolOptions`][sqlx_core::pool::PoolOptions], specialized for SQL Server.
110pub type MssqlPoolOptions = sqlx_core::pool::PoolOptions<Mssql>;
111
112/// An alias for [`Transaction`][sqlx_core::transaction::Transaction], specialized for SQL Server.
113pub type MssqlTransaction<'c> = sqlx_core::transaction::Transaction<'c, Mssql>;
114
115/// An alias for [`Executor<'_, Database = Mssql>`][sqlx_core::executor::Executor].
116pub trait MssqlExecutor<'c>: sqlx_core::executor::Executor<'c, Database = Mssql> {}
117impl<'c, T> MssqlExecutor<'c> for T where T: sqlx_core::executor::Executor<'c, Database = Mssql> {}
118
119sqlx_core::impl_into_arguments_for_arguments!(MssqlArguments);
120sqlx_core::impl_encode_for_option!(Mssql);
121sqlx_core::impl_acquire!(Mssql, MssqlConnection);