1#![doc = include_str!("../README.md")]
2#![warn(missing_docs)]
3#![deny(unsafe_code)]
4
5pub mod blob;
21pub mod blob_stream;
22pub(crate) mod browser;
23pub mod bulk;
24pub mod cancel;
25pub mod change_tracking;
26pub mod client;
27#[cfg(feature = "always-encrypted")]
28pub(crate) mod column_decryptor;
29pub(crate) mod column_parser;
30pub mod config;
31pub mod encryption;
32pub mod error;
33#[cfg(all(windows, feature = "filestream"))]
34#[allow(unsafe_code)] pub mod filestream;
36pub mod from_row;
37pub mod instrumentation;
38pub(crate) mod plp;
39pub mod procedure;
40pub mod query;
41pub mod row;
42pub(crate) mod row_source;
44pub mod row_stream;
45pub mod state;
46pub(crate) mod statement_cache;
50pub mod stream;
51pub mod to_params;
52pub mod transaction;
53pub mod tvp;
54pub(crate) mod validation;
55
56pub use bulk::{
58 BulkColumn, BulkInsert, BulkInsertBuilder, BulkInsertResult, BulkOptions, BulkWriter,
59};
60pub use cancel::CancelHandle;
61pub use client::Client;
62pub use config::{ApplicationIntent, Config, RedirectConfig, RetryPolicy, TimeoutConfig};
63pub use error::{Error, SharedIoError};
64pub use mssql_auth::AuthError;
71pub use mssql_codec::CodecError;
72#[cfg(feature = "tls")]
73pub use mssql_tls::TlsError;
74pub use mssql_types::TypeError;
75pub use tds_protocol::ProtocolError;
76
77#[cfg(feature = "tls")]
81pub use mssql_tls::{CertificateDer, TlsConfig};
82
83#[cfg(feature = "always-encrypted")]
87pub use mssql_auth::KeyStoreProvider;
88
89pub use tds_protocol::token::Collation;
93
94#[cfg(feature = "derive")]
101pub use mssql_derive::{FromRow, ToParams, Tvp};
102
103#[doc(hidden)]
107pub mod __private {
108 pub use mssql_types::{ToSql, TypeError};
109}
110
111pub use from_row::{FromRow, MapRows, RowIteratorExt};
113pub use mssql_auth::Credentials;
114pub use tds_protocol::version::TdsVersion;
115
116#[cfg(feature = "zeroize")]
118pub use mssql_auth::{SecretString, SecureCredentials};
119pub use mssql_types::{
120 Binary, Char, EncryptedParamType, FromSql, NChar, SqlTyped, SqlValue, ToSql, TypedNull, binary,
121 char, nchar, null,
122};
123#[cfg(feature = "chrono")]
124pub use mssql_types::{
125 DateTime2, DateTimeLegacy, DateTimeOffset, SmallDateTime, Time, datetime, datetime2,
126 datetimeoffset, time,
127};
128#[cfg(feature = "decimal")]
129pub use mssql_types::{Money, Numeric, SmallMoney, numeric};
130pub use procedure::ProcedureBuilder;
131pub use query::in_params;
132pub use row::{Column, Row};
133pub use state::{Connected, ConnectionState, Disconnected, InTransaction, ProtocolState, Ready};
134
135#[cfg(feature = "fuzzing")]
140#[doc(hidden)]
141pub mod __fuzzing {
142 pub use crate::column_parser::parse_column_value;
143}
144pub use blob_stream::BlobStream;
145pub use row_stream::RowStream;
146pub use stream::{
147 ExecuteResult, MultiResultStream, OutputParam, ProcedureResult, QueryStream, ResultSet,
148};
149pub use to_params::{NamedParam, ParamList, ToParams};
150pub use transaction::{IsolationLevel, SavePoint, Transaction};
151pub use tvp::{Tvp, TvpColumn, TvpRow, TvpValue};
152
153#[cfg(all(windows, feature = "filestream"))]
155pub use filestream::{FileStream, FileStreamAccess, open_options as filestream_options};
156
157pub use encryption::EncryptionConfig;
159
160pub use instrumentation::{
162 DatabaseMetrics, OperationTimer, SanitizationConfig, attributes, metric_names, span_names,
163};
164
165pub use change_tracking::{
167 ChangeMetadata, ChangeOperation, ChangeTracking, ChangeTrackingQuery, SyncVersionStatus,
168};
169
170#[cfg(test)]
171mod auto_trait_tests {
172 use super::*;
179
180 fn assert_send<T: Send>() {}
181 fn assert_sync<T: Sync>() {}
182
183 #[test]
185 fn client_ready_is_send_sync() {
186 assert_send::<Client<Ready>>();
187 assert_sync::<Client<Ready>>();
188 }
189
190 #[test]
191 fn client_in_transaction_is_send_sync() {
192 assert_send::<Client<InTransaction>>();
193 assert_sync::<Client<InTransaction>>();
194 }
195
196 #[test]
197 fn client_disconnected_is_send_sync() {
198 assert_send::<Client<Disconnected>>();
199 assert_sync::<Client<Disconnected>>();
200 }
201
202 #[test]
203 fn client_connected_is_send_sync() {
204 assert_send::<Client<Connected>>();
205 assert_sync::<Client<Connected>>();
206 }
207
208 #[test]
210 fn config_is_send_sync() {
211 assert_send::<Config>();
212 assert_sync::<Config>();
213 }
214
215 #[test]
217 fn query_stream_is_send_sync() {
218 assert_send::<QueryStream<'_>>();
219 assert_sync::<QueryStream<'_>>();
220 }
221
222 #[test]
223 fn row_stream_is_send_sync() {
224 assert_send::<RowStream<'_>>();
225 assert_sync::<RowStream<'_>>();
226 }
227
228 #[test]
229 fn blob_stream_is_send_sync() {
230 assert_send::<BlobStream<'_>>();
231 assert_sync::<BlobStream<'_>>();
232 }
233
234 #[test]
235 fn multi_result_stream_is_send_sync() {
236 assert_send::<MultiResultStream<'_>>();
237 assert_sync::<MultiResultStream<'_>>();
238 }
239
240 #[test]
241 fn result_set_is_send_sync() {
242 assert_send::<ResultSet>();
243 assert_sync::<ResultSet>();
244 }
245
246 #[test]
247 fn execute_result_is_send_sync() {
248 assert_send::<ExecuteResult>();
249 assert_sync::<ExecuteResult>();
250 }
251
252 #[test]
253 fn procedure_result_is_send_sync() {
254 assert_send::<ProcedureResult>();
255 assert_sync::<ProcedureResult>();
256 }
257
258 #[test]
259 fn procedure_builder_is_send_sync() {
260 assert_send::<ProcedureBuilder<'_, Ready>>();
261 assert_sync::<ProcedureBuilder<'_, Ready>>();
262 }
263
264 #[test]
266 fn bulk_insert_is_send_sync() {
267 assert_send::<BulkInsert>();
268 assert_sync::<BulkInsert>();
269 }
270
271 #[test]
272 fn bulk_insert_builder_is_send_sync() {
273 assert_send::<BulkInsertBuilder>();
274 assert_sync::<BulkInsertBuilder>();
275 }
276
277 #[test]
278 fn bulk_options_is_send_sync() {
279 assert_send::<BulkOptions>();
280 assert_sync::<BulkOptions>();
281 }
282
283 #[test]
285 fn cancel_handle_is_send_sync() {
286 assert_send::<CancelHandle>();
287 assert_sync::<CancelHandle>();
288 }
289
290 #[test]
292 fn row_is_send_sync() {
293 assert_send::<Row>();
294 assert_sync::<Row>();
295 }
296
297 #[test]
298 fn column_is_send_sync() {
299 assert_send::<Column>();
300 assert_sync::<Column>();
301 }
302
303 #[test]
305 fn statement_cache_is_send_sync() {
306 use crate::statement_cache::StatementCache;
307 assert_send::<StatementCache>();
308 assert_sync::<StatementCache>();
309 }
310
311 #[test]
313 fn error_is_send_sync() {
314 assert_send::<Error>();
315 assert_sync::<Error>();
316 }
317}