#![doc = include_str!("../README.md")]
#![warn(missing_docs)]
#![deny(unsafe_code)]
pub mod blob;
pub mod blob_stream;
pub(crate) mod browser;
pub mod bulk;
pub mod cancel;
pub mod change_tracking;
pub mod client;
#[cfg(feature = "always-encrypted")]
pub(crate) mod column_decryptor;
pub(crate) mod column_parser;
pub mod config;
pub mod encryption;
pub mod error;
#[cfg(all(windows, feature = "filestream"))]
#[allow(unsafe_code)] pub mod filestream;
pub mod from_row;
pub mod instrumentation;
pub(crate) mod plp;
pub mod procedure;
pub mod query;
pub mod row;
pub(crate) mod row_source;
pub mod row_stream;
pub mod state;
pub(crate) mod statement_cache;
pub mod stream;
pub mod to_params;
pub mod transaction;
pub mod tvp;
pub(crate) mod validation;
pub use bulk::{
BulkColumn, BulkInsert, BulkInsertBuilder, BulkInsertResult, BulkOptions, BulkWriter,
};
pub use cancel::CancelHandle;
pub use client::Client;
pub use config::{ApplicationIntent, Config, RedirectConfig, RetryPolicy, TimeoutConfig};
pub use error::{Error, SharedIoError};
pub use mssql_auth::AuthError;
pub use mssql_codec::CodecError;
#[cfg(feature = "tls")]
pub use mssql_tls::TlsError;
pub use mssql_types::TypeError;
pub use tds_protocol::ProtocolError;
#[cfg(feature = "tls")]
pub use mssql_tls::{CertificateDer, TlsConfig};
#[cfg(feature = "always-encrypted")]
pub use mssql_auth::KeyStoreProvider;
pub use tds_protocol::token::Collation;
#[cfg(feature = "derive")]
pub use mssql_derive::{FromRow, ToParams, Tvp};
#[doc(hidden)]
pub mod __private {
pub use mssql_types::{ToSql, TypeError};
}
pub use from_row::{FromRow, MapRows, RowIteratorExt};
pub use mssql_auth::Credentials;
pub use tds_protocol::version::TdsVersion;
#[cfg(feature = "zeroize")]
pub use mssql_auth::{SecretString, SecureCredentials};
pub use mssql_types::{
Binary, Char, EncryptedParamType, FromSql, NChar, SqlTyped, SqlValue, ToSql, TypedNull, binary,
char, nchar, null,
};
#[cfg(feature = "chrono")]
pub use mssql_types::{
DateTime2, DateTimeLegacy, DateTimeOffset, SmallDateTime, Time, datetime, datetime2,
datetimeoffset, time,
};
#[cfg(feature = "decimal")]
pub use mssql_types::{Money, Numeric, SmallMoney, numeric};
pub use procedure::ProcedureBuilder;
pub use query::in_params;
pub use row::{Column, Row};
pub use state::{
Connected, ConnectionState, Disconnected, InTransaction, ProtocolState, Ready, Streaming,
};
#[cfg(feature = "fuzzing")]
#[doc(hidden)]
pub mod __fuzzing {
pub use crate::column_parser::parse_column_value;
}
pub use blob_stream::BlobStream;
pub use row_stream::RowStream;
pub use stream::{
ExecuteResult, MultiResultStream, OutputParam, ProcedureResult, QueryStream, ResultSet,
};
pub use to_params::{NamedParam, ParamList, ToParams};
pub use transaction::{IsolationLevel, SavePoint, Transaction};
pub use tvp::{Tvp, TvpColumn, TvpRow, TvpValue};
#[cfg(all(windows, feature = "filestream"))]
pub use filestream::{FileStream, FileStreamAccess, open_options as filestream_options};
#[cfg(feature = "always-encrypted")]
pub use encryption::EncryptionContext;
pub use encryption::{
EncryptionConfig, ParameterCryptoInfo, ParameterEncryptionInfo, ResultSetEncryptionInfo,
};
pub use instrumentation::{
DatabaseMetrics, OperationTimer, SanitizationConfig, attributes, metric_names, span_names,
};
pub use change_tracking::{
ChangeMetadata, ChangeOperation, ChangeTracking, ChangeTrackingQuery, SyncVersionStatus,
};
#[cfg(test)]
mod auto_trait_tests {
use super::*;
fn assert_send<T: Send>() {}
fn assert_sync<T: Sync>() {}
#[test]
fn client_ready_is_send_sync() {
assert_send::<Client<Ready>>();
assert_sync::<Client<Ready>>();
}
#[test]
fn client_in_transaction_is_send_sync() {
assert_send::<Client<InTransaction>>();
assert_sync::<Client<InTransaction>>();
}
#[test]
fn client_disconnected_is_send_sync() {
assert_send::<Client<Disconnected>>();
assert_sync::<Client<Disconnected>>();
}
#[test]
fn client_connected_is_send_sync() {
assert_send::<Client<Connected>>();
assert_sync::<Client<Connected>>();
}
#[test]
fn client_streaming_is_send_sync() {
assert_send::<Client<Streaming>>();
assert_sync::<Client<Streaming>>();
}
#[test]
fn config_is_send_sync() {
assert_send::<Config>();
assert_sync::<Config>();
}
#[test]
fn query_stream_is_send_sync() {
assert_send::<QueryStream<'_>>();
assert_sync::<QueryStream<'_>>();
}
#[test]
fn row_stream_is_send_sync() {
assert_send::<RowStream<'_>>();
assert_sync::<RowStream<'_>>();
}
#[test]
fn blob_stream_is_send_sync() {
assert_send::<BlobStream<'_>>();
assert_sync::<BlobStream<'_>>();
}
#[test]
fn multi_result_stream_is_send_sync() {
assert_send::<MultiResultStream<'_>>();
assert_sync::<MultiResultStream<'_>>();
}
#[test]
fn result_set_is_send_sync() {
assert_send::<ResultSet>();
assert_sync::<ResultSet>();
}
#[test]
fn execute_result_is_send_sync() {
assert_send::<ExecuteResult>();
assert_sync::<ExecuteResult>();
}
#[test]
fn procedure_result_is_send_sync() {
assert_send::<ProcedureResult>();
assert_sync::<ProcedureResult>();
}
#[test]
fn procedure_builder_is_send_sync() {
assert_send::<ProcedureBuilder<'_, Ready>>();
assert_sync::<ProcedureBuilder<'_, Ready>>();
}
#[test]
fn bulk_insert_is_send_sync() {
assert_send::<BulkInsert>();
assert_sync::<BulkInsert>();
}
#[test]
fn bulk_insert_builder_is_send_sync() {
assert_send::<BulkInsertBuilder>();
assert_sync::<BulkInsertBuilder>();
}
#[test]
fn bulk_options_is_send_sync() {
assert_send::<BulkOptions>();
assert_sync::<BulkOptions>();
}
#[test]
fn cancel_handle_is_send_sync() {
assert_send::<CancelHandle>();
assert_sync::<CancelHandle>();
}
#[test]
fn row_is_send_sync() {
assert_send::<Row>();
assert_sync::<Row>();
}
#[test]
fn column_is_send_sync() {
assert_send::<Column>();
assert_sync::<Column>();
}
#[test]
fn statement_cache_is_send_sync() {
use crate::statement_cache::StatementCache;
assert_send::<StatementCache>();
assert_sync::<StatementCache>();
}
#[test]
fn error_is_send_sync() {
assert_send::<Error>();
assert_sync::<Error>();
}
}