1#![warn(missing_docs)]
71#![deny(unsafe_code)]
72
73pub mod blob;
88pub mod bulk;
89pub mod cancel;
90pub mod change_tracking;
91pub mod client;
92pub(crate) mod column_parser;
93pub mod config;
94pub mod encryption;
95pub mod error;
96pub mod from_row;
97pub mod instrumentation;
98pub mod query;
99pub mod row;
100pub mod state;
101pub mod statement_cache;
102pub mod stream;
103pub mod to_params;
104pub mod transaction;
105pub mod tvp;
106
107pub use bulk::{BulkColumn, BulkInsert, BulkInsertBuilder, BulkInsertResult, BulkOptions};
109pub use cancel::CancelHandle;
110pub use client::Client;
111pub use config::{Config, RedirectConfig, RetryPolicy, TimeoutConfig};
112pub use error::{Error, SharedIoError};
113
114pub use from_row::{FromRow, MapRows, RowIteratorExt};
116pub use mssql_auth::Credentials;
117pub use tds_protocol::version::TdsVersion;
118
119#[cfg(feature = "zeroize")]
121pub use mssql_auth::{SecretString, SecureCredentials};
122pub use mssql_types::{FromSql, SqlValue, ToSql};
123pub use query::Query;
124pub use row::{Column, Row};
125pub use state::{
126 Connected, ConnectionState, Disconnected, InTransaction, ProtocolState, Ready, Streaming,
127};
128pub use statement_cache::{PreparedStatement, StatementCache, StatementCacheConfig};
129pub use stream::{ExecuteResult, MultiResultStream, OutputParam, QueryStream, ResultSet};
130pub use to_params::{NamedParam, ParamList, ToParams};
131pub use transaction::{IsolationLevel, SavePoint, Transaction};
132pub use tvp::{Tvp, TvpColumn, TvpRow, TvpValue};
133
134#[cfg(feature = "always-encrypted")]
136pub use encryption::EncryptionContext;
137pub use encryption::{
138 EncryptionConfig, ParameterCryptoInfo, ParameterEncryptionInfo, ResultSetEncryptionInfo,
139};
140
141pub use instrumentation::{
143 DatabaseMetrics, OperationTimer, SanitizationConfig, attributes, metric_names, span_names,
144};
145
146pub use change_tracking::{
148 ChangeMetadata, ChangeOperation, ChangeTracking, ChangeTrackingQuery, SyncVersionStatus,
149};
150
151#[cfg(test)]
152mod auto_trait_tests {
153 use super::*;
160
161 fn assert_send<T: Send>() {}
162 fn assert_sync<T: Sync>() {}
163
164 #[test]
166 fn client_ready_is_send_sync() {
167 assert_send::<Client<Ready>>();
168 assert_sync::<Client<Ready>>();
169 }
170
171 #[test]
172 fn client_in_transaction_is_send_sync() {
173 assert_send::<Client<InTransaction>>();
174 assert_sync::<Client<InTransaction>>();
175 }
176
177 #[test]
178 fn client_disconnected_is_send_sync() {
179 assert_send::<Client<Disconnected>>();
180 assert_sync::<Client<Disconnected>>();
181 }
182
183 #[test]
184 fn client_connected_is_send_sync() {
185 assert_send::<Client<Connected>>();
186 assert_sync::<Client<Connected>>();
187 }
188
189 #[test]
190 fn client_streaming_is_send_sync() {
191 assert_send::<Client<Streaming>>();
192 assert_sync::<Client<Streaming>>();
193 }
194
195 #[test]
197 fn config_is_send_sync() {
198 assert_send::<Config>();
199 assert_sync::<Config>();
200 }
201
202 #[test]
204 fn query_stream_is_send_sync() {
205 assert_send::<QueryStream<'_>>();
206 assert_sync::<QueryStream<'_>>();
207 }
208
209 #[test]
210 fn multi_result_stream_is_send_sync() {
211 assert_send::<MultiResultStream<'_>>();
212 assert_sync::<MultiResultStream<'_>>();
213 }
214
215 #[test]
216 fn result_set_is_send_sync() {
217 assert_send::<ResultSet>();
218 assert_sync::<ResultSet>();
219 }
220
221 #[test]
222 fn execute_result_is_send_sync() {
223 assert_send::<ExecuteResult>();
224 assert_sync::<ExecuteResult>();
225 }
226
227 #[test]
229 fn bulk_insert_is_send_sync() {
230 assert_send::<BulkInsert>();
231 assert_sync::<BulkInsert>();
232 }
233
234 #[test]
235 fn bulk_insert_builder_is_send_sync() {
236 assert_send::<BulkInsertBuilder>();
237 assert_sync::<BulkInsertBuilder>();
238 }
239
240 #[test]
241 fn bulk_options_is_send_sync() {
242 assert_send::<BulkOptions>();
243 assert_sync::<BulkOptions>();
244 }
245
246 #[test]
248 fn cancel_handle_is_send_sync() {
249 assert_send::<CancelHandle>();
250 assert_sync::<CancelHandle>();
251 }
252
253 #[test]
255 fn row_is_send_sync() {
256 assert_send::<Row>();
257 assert_sync::<Row>();
258 }
259
260 #[test]
261 fn column_is_send_sync() {
262 assert_send::<Column>();
263 assert_sync::<Column>();
264 }
265
266 #[test]
268 fn statement_cache_is_send_sync() {
269 assert_send::<StatementCache>();
270 assert_sync::<StatementCache>();
271 }
272
273 #[test]
275 fn error_is_send_sync() {
276 assert_send::<Error>();
277 assert_sync::<Error>();
278 }
279}