diff --git a/sqlx-core/src/any/connection/establish.rs b/sqlx-core/src/any/connection/establish.rs deleted file mode 100644 index dac9ab09..00000000 --- a/sqlx-core/src/any/connection/establish.rs +++ /dev/null @@ -1,11 +0,0 @@ -use crate::any::options::AnyConnectOptions; -use crate::any::AnyConnection; -use crate::connection::Connection; -use crate::error::Error; - -impl AnyConnection { - pub(crate) async fn establish(options: &AnyConnectOptions) -> Result { - let driver = crate::any::driver::from_url(&options.database_url)?; - (driver.connect)(options).await - } -} diff --git a/sqlx-core/src/any/connection/executor.rs b/sqlx-core/src/any/connection/executor.rs index ff8a40af..1c10b4e4 100644 --- a/sqlx-core/src/any/connection/executor.rs +++ b/sqlx-core/src/any/connection/executor.rs @@ -1,7 +1,4 @@ -use crate::any::{ - Any, AnyColumn, AnyConnection, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo, -}; -use crate::database::Database; +use crate::any::{Any, AnyConnection, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo}; use crate::describe::Describe; use crate::error::Error; use crate::executor::{Execute, Executor}; @@ -57,23 +54,3 @@ impl<'c> Executor<'c> for &'c mut AnyConnection { self.backend.describe(sql) } } - -fn map_describe(info: Describe) -> Describe -where - AnyTypeInfo: From, - AnyColumn: From, -{ - let parameters = match info.parameters { - None => None, - Some(Either::Right(num)) => Some(Either::Right(num)), - Some(Either::Left(params)) => { - Some(Either::Left(params.into_iter().map(Into::into).collect())) - } - }; - - Describe { - parameters, - nullable: info.nullable, - columns: info.columns.into_iter().map(Into::into).collect(), - } -} diff --git a/sqlx-core/src/any/connection/mod.rs b/sqlx-core/src/any/connection/mod.rs index 57fc726e..b6f79584 100644 --- a/sqlx-core/src/any/connection/mod.rs +++ b/sqlx-core/src/any/connection/mod.rs @@ -10,7 +10,6 @@ pub use backend::AnyConnectionBackend; use crate::transaction::Transaction; mod backend; -mod establish; mod executor; /// A connection to _any_ SQLx database. @@ -33,7 +32,14 @@ impl AnyConnection { self.backend.name() } - pub(crate) fn connect( + pub(crate) fn connect(options: &AnyConnectOptions) -> BoxFuture<'_, crate::Result> { + Box::pin(async { + let driver = crate::any::driver::from_url(&options.database_url)?; + (driver.connect)(options).await + }) + } + + pub(crate) fn connect_with_db( options: &AnyConnectOptions, ) -> BoxFuture<'_, crate::Result> where diff --git a/sqlx-core/src/any/driver.rs b/sqlx-core/src/any/driver.rs index 6770ba7a..12355bec 100644 --- a/sqlx-core/src/any/driver.rs +++ b/sqlx-core/src/any/driver.rs @@ -1,21 +1,12 @@ use crate::any::connection::AnyConnectionBackend; -use crate::any::{ - Any, AnyArguments, AnyConnectOptions, AnyConnection, AnyQueryResult, AnyRow, AnyStatement, - AnyTypeInfo, -}; +use crate::any::{AnyConnectOptions, AnyConnection}; use crate::common::DebugFn; use crate::connection::Connection; use crate::database::Database; -use crate::describe::Describe; -use crate::error::BoxDynError; -use crate::transaction::Transaction; use crate::Error; -use either::Either; use futures_core::future::BoxFuture; -use futures_core::stream::BoxStream; use once_cell::sync::OnceCell; use std::fmt::{Debug, Formatter}; -use std::marker::PhantomData; use url::Url; static DRIVERS: OnceCell<&'static [AnyDriver]> = OnceCell::new(); @@ -52,7 +43,7 @@ impl AnyDriver { Self { name: DB::NAME, url_schemes: DB::URL_SCHEMES, - connect: DebugFn(AnyConnection::connect::), + connect: DebugFn(AnyConnection::connect_with_db::), migrate_database: None, } } diff --git a/sqlx-core/src/any/migrate.rs b/sqlx-core/src/any/migrate.rs index 59a65e22..6fd63c79 100644 --- a/sqlx-core/src/any/migrate.rs +++ b/sqlx-core/src/any/migrate.rs @@ -1,10 +1,8 @@ use crate::any::driver; -use crate::any::kind::AnyKind; use crate::any::{Any, AnyConnection}; use crate::error::Error; use crate::migrate::{AppliedMigration, Migrate, MigrateDatabase, MigrateError, Migration}; use futures_core::future::BoxFuture; -use std::str::FromStr; use std::time::Duration; impl MigrateDatabase for Any { diff --git a/sqlx-core/src/any/mod.rs b/sqlx-core/src/any/mod.rs index 6a499070..56f6dab8 100644 --- a/sqlx-core/src/any/mod.rs +++ b/sqlx-core/src/any/mod.rs @@ -69,8 +69,7 @@ where { fn encode_by_ref(&self, buf: &mut AnyArgumentBuffer<'q>) -> crate::encode::IsNull { if let Some(value) = self { - value.encode_by_ref(buf); - crate::encode::IsNull::No + value.encode_by_ref(buf) } else { buf.0.push(AnyValueKind::Null); crate::encode::IsNull::Yes diff --git a/sqlx-core/src/any/options.rs b/sqlx-core/src/any/options.rs index 8c5d98ad..dfa677e6 100644 --- a/sqlx-core/src/any/options.rs +++ b/sqlx-core/src/any/options.rs @@ -45,7 +45,7 @@ impl ConnectOptions for AnyConnectOptions { #[inline] fn connect(&self) -> BoxFuture<'_, Result> { - Box::pin(AnyConnection::establish(self)) + AnyConnection::connect(self) } fn log_statements(mut self, level: LevelFilter) -> Self { diff --git a/sqlx-core/src/any/value.rs b/sqlx-core/src/any/value.rs index 6c1e1eec..075c9359 100644 --- a/sqlx-core/src/any/value.rs +++ b/sqlx-core/src/any/value.rs @@ -1,14 +1,8 @@ use std::borrow::Cow; -use std::marker::PhantomData; -use std::num::TryFromIntError; -use crate::any::error::mismatched_types; use crate::any::{Any, AnyTypeInfo, AnyTypeInfoKind}; use crate::database::{Database, HasValueRef}; -use crate::decode::Decode; -use crate::error::{BoxDynError, Error}; -use crate::io::Encode; -use crate::type_info::TypeInfo; +use crate::error::BoxDynError; use crate::types::Type; use crate::value::{Value, ValueRef}; diff --git a/sqlx-core/src/net/tls/mod.rs b/sqlx-core/src/net/tls/mod.rs index 0b1df2b3..b49708b2 100644 --- a/sqlx-core/src/net/tls/mod.rs +++ b/sqlx-core/src/net/tls/mod.rs @@ -77,7 +77,7 @@ where #[cfg(feature = "_tls-native-tls")] return Ok(with_socket.with_socket(tls_native_tls::handshake(socket, config).await?)); - #[cfg(feature = "_tls-rustls")] + #[cfg(all(feature = "_tls-rustls", not(feature = "_tls-native-tls")))] return Ok(with_socket.with_socket(tls_rustls::handshake(socket, config).await?)); #[cfg(not(any(feature = "_tls-native-tls", feature = "_tls-rustls")))] diff --git a/sqlx-core/src/net/tls/tls_rustls.rs b/sqlx-core/src/net/tls/tls_rustls.rs index ab0f721f..c105e1b2 100644 --- a/sqlx-core/src/net/tls/tls_rustls.rs +++ b/sqlx-core/src/net/tls/tls_rustls.rs @@ -1,5 +1,4 @@ use futures_util::future; -use rustls::{Certificate, PrivateKey}; use std::io::{self, BufReader, Cursor, Read, Write}; use std::sync::Arc; use std::task::{Context, Poll}; @@ -13,7 +12,7 @@ use rustls::{ use crate::error::Error; use crate::io::ReadBuf; use crate::net::tls::util::StdSocket; -use crate::net::tls::{CertificateInput, TlsConfig}; +use crate::net::tls::TlsConfig; use crate::net::Socket; pub struct RustlsSocket { diff --git a/sqlx-core/src/rt/mod.rs b/sqlx-core/src/rt/mod.rs index dd746521..8cc6dd0b 100644 --- a/sqlx-core/src/rt/mod.rs +++ b/sqlx-core/src/rt/mod.rs @@ -23,7 +23,6 @@ pub enum JoinHandle { _Phantom(PhantomData T>), } -#[track_caller] pub async fn timeout(duration: Duration, f: F) -> Result { #[cfg(feature = "_rt-tokio")] if rt_tokio::available() { @@ -43,7 +42,6 @@ pub async fn timeout(duration: Duration, f: F) -> Result CachingDescribeBlocking { let conn = match cache.entry(database_url.to_string()) { hash_map::Entry::Occupied(hit) => hit.into_mut(), - hash_map::Entry::Vacant(mut miss) => { + hash_map::Entry::Vacant(miss) => { miss.insert(DB::Connection::connect(&database_url).await?) } }; diff --git a/sqlx-macros-core/src/derives/attributes.rs b/sqlx-macros-core/src/derives/attributes.rs index bfbc32f6..7d32e003 100644 --- a/sqlx-macros-core/src/derives/attributes.rs +++ b/sqlx-macros-core/src/derives/attributes.rs @@ -1,5 +1,5 @@ use proc_macro2::{Ident, Span, TokenStream}; -use quote::{quote, quote_spanned}; +use quote::quote; use syn::punctuated::Punctuated; use syn::spanned::Spanned; use syn::token::Comma; diff --git a/sqlx-macros-core/src/query/data.rs b/sqlx-macros-core/src/query/data.rs index 92c290a7..1402f2eb 100644 --- a/sqlx-macros-core/src/query/data.rs +++ b/sqlx-macros-core/src/query/data.rs @@ -10,7 +10,6 @@ use serde::{Serialize, Serializer}; use sqlx_core::database::Database; use sqlx_core::describe::Describe; -use sqlx_core::executor::Executor; use crate::database::DatabaseExt; @@ -26,13 +25,6 @@ pub struct QueryData { } impl QueryData { - pub async fn from_db( - conn: impl Executor<'_, Database = DB>, - query: &str, - ) -> crate::Result { - Ok(Self::from_describe(query, conn.describe(query).await?)) - } - pub fn from_describe(query: &str, describe: Describe) -> Self { QueryData { db_name: SerializeDbName::default(), diff --git a/sqlx-macros-core/src/query/mod.rs b/sqlx-macros-core/src/query/mod.rs index 44f16986..e1148f59 100644 --- a/sqlx-macros-core/src/query/mod.rs +++ b/sqlx-macros-core/src/query/mod.rs @@ -8,7 +8,6 @@ use syn::Type; pub use input::QueryMacroInput; use quote::{format_ident, quote}; -use sqlx_core::connection::Connection; use sqlx_core::database::Database; use sqlx_core::{column::Column, describe::Describe, type_info::TypeInfo}; diff --git a/sqlx-mysql/src/any.rs b/sqlx-mysql/src/any.rs index 768d38ff..247b0696 100644 --- a/sqlx-mysql/src/any.rs +++ b/sqlx-mysql/src/any.rs @@ -7,7 +7,6 @@ use either::Either; use futures_core::future::BoxFuture; use futures_core::stream::BoxStream; use futures_util::{StreamExt, TryFutureExt, TryStreamExt}; -use sqlx_core::any::driver::AnyDriver; use sqlx_core::any::{ Any, AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo, AnyTypeInfoKind, @@ -17,7 +16,6 @@ use sqlx_core::database::Database; use sqlx_core::describe::Describe; use sqlx_core::executor::Executor; use sqlx_core::transaction::TransactionManager; -use std::borrow::Cow; sqlx_core::declare_driver_with_optional_migrate!(DRIVER = MySql); @@ -102,7 +100,7 @@ impl AnyConnectionBackend for MySqlConnection { let args = arguments.as_ref().map(AnyArguments::convert_to); Box::pin(async move { - let mut stream = self.run(query, args, persistent).await?; + let stream = self.run(query, args, persistent).await?; futures_util::pin_mut!(stream); if let Some(Either::Right(row)) = stream.try_next().await? { diff --git a/sqlx-mysql/src/connection/auth.rs b/sqlx-mysql/src/connection/auth.rs index 5802e21e..c533c908 100644 --- a/sqlx-mysql/src/connection/auth.rs +++ b/sqlx-mysql/src/connection/auth.rs @@ -3,7 +3,7 @@ use bytes::Bytes; use digest::{Digest, OutputSizeUser}; use generic_array::GenericArray; use rand::thread_rng; -use rsa::{pkcs8::DecodePublicKey, Oaep, PaddingScheme, PublicKey, RsaPublicKey}; +use rsa::{pkcs8::DecodePublicKey, Oaep, PublicKey, RsaPublicKey}; use sha1::Sha1; use sha2::Sha256; diff --git a/sqlx-postgres/src/any.rs b/sqlx-postgres/src/any.rs index 32effc31..4d1c593d 100644 --- a/sqlx-postgres/src/any.rs +++ b/sqlx-postgres/src/any.rs @@ -1,25 +1,18 @@ use crate::{ - Either, PgArguments, PgColumn, PgConnectOptions, PgConnection, PgQueryResult, PgRow, - PgTransactionManager, PgTypeInfo, Postgres, + Either, PgColumn, PgConnectOptions, PgConnection, PgQueryResult, PgRow, PgTransactionManager, + PgTypeInfo, Postgres, }; use futures_core::future::BoxFuture; use futures_core::stream::BoxStream; use futures_util::{StreamExt, TryFutureExt, TryStreamExt}; -use std::borrow::Cow; -use std::sync::Arc; pub use sqlx_core::any::*; use crate::type_info::PgType; -use sqlx_core::any::driver::AnyDriver; -use sqlx_core::column::Column; use sqlx_core::connection::Connection; use sqlx_core::database::Database; use sqlx_core::describe::Describe; use sqlx_core::executor::Executor; -use sqlx_core::ext::ustr::UStr; -use sqlx_core::row::Row; -use sqlx_core::statement::Statement; use sqlx_core::transaction::TransactionManager; sqlx_core::declare_driver_with_optional_migrate!(DRIVER = Postgres); @@ -105,7 +98,7 @@ impl AnyConnectionBackend for PgConnection { let args = arguments.as_ref().map(AnyArguments::convert_to); Box::pin(async move { - let mut stream = self.run(query, args, 1, persistent, None).await?; + let stream = self.run(query, args, 1, persistent, None).await?; futures_util::pin_mut!(stream); if let Some(Either::Right(row)) = stream.try_next().await? { diff --git a/sqlx-postgres/src/connection/stream.rs b/sqlx-postgres/src/connection/stream.rs index 0bf814fb..bb0ae2db 100644 --- a/sqlx-postgres/src/connection/stream.rs +++ b/sqlx-postgres/src/connection/stream.rs @@ -5,10 +5,7 @@ use std::str::FromStr; use futures_channel::mpsc::UnboundedSender; use futures_util::SinkExt; use log::Level; -use sqlx_core::{ - bytes::{Buf, Bytes}, - logger, -}; +use sqlx_core::bytes::{Buf, Bytes}; use crate::connection::tls::MaybeUpgradeTls; use crate::error::Error; diff --git a/sqlx-sqlite/src/any.rs b/sqlx-sqlite/src/any.rs index e4cfb609..3f2b32c6 100644 --- a/sqlx-sqlite/src/any.rs +++ b/sqlx-sqlite/src/any.rs @@ -5,23 +5,17 @@ use crate::{ use futures_core::future::BoxFuture; use futures_core::stream::BoxStream; use futures_util::{StreamExt, TryFutureExt, TryStreamExt}; -use std::borrow::Cow; -use std::sync::Arc; use sqlx_core::any::{ Any, AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow, - AnyStatement, AnyTypeInfo, AnyTypeInfoKind, AnyValue, AnyValueKind, + AnyStatement, AnyTypeInfo, AnyTypeInfoKind, AnyValueKind, }; use crate::type_info::DataType; -use sqlx_core::any::driver::AnyDriver; -use sqlx_core::column::Column; use sqlx_core::connection::{ConnectOptions, Connection}; use sqlx_core::database::Database; use sqlx_core::describe::Describe; use sqlx_core::executor::Executor; -use sqlx_core::ext::ustr::UStr; -use sqlx_core::row::Row; use sqlx_core::transaction::TransactionManager; sqlx_core::declare_driver_with_optional_migrate!(DRIVER = Sqlite); @@ -109,7 +103,7 @@ impl AnyConnectionBackend for SqliteConnection { let args = arguments.map(map_arguments); Box::pin(async move { - let mut stream = self + let stream = self .worker .execute(query, args, self.row_channel_size, persistent) .map_ok(flume::Receiver::into_stream) diff --git a/sqlx-sqlite/src/connection/handle.rs b/sqlx-sqlite/src/connection/handle.rs index dcdfd5df..bd2bd102 100644 --- a/sqlx-sqlite/src/connection/handle.rs +++ b/sqlx-sqlite/src/connection/handle.rs @@ -86,12 +86,6 @@ impl ConnectionHandle { } } -impl ConnectionHandleRaw { - pub(crate) fn as_ptr(&self) -> *mut sqlite3 { - self.0.as_ptr() - } -} - impl Drop for ConnectionHandle { fn drop(&mut self) { unsafe { diff --git a/sqlx-sqlite/src/connection/worker.rs b/sqlx-sqlite/src/connection/worker.rs index b7f5ef5a..38587c68 100644 --- a/sqlx-sqlite/src/connection/worker.rs +++ b/sqlx-sqlite/src/connection/worker.rs @@ -14,7 +14,6 @@ use sqlx_core::transaction::{ }; use sqlx_core::Either; -use crate::connection::collation::create_collation; use crate::connection::describe::describe; use crate::connection::establish::EstablishParams; use crate::connection::ConnectionState; @@ -30,7 +29,7 @@ use crate::{Sqlite, SqliteArguments, SqliteQueryResult, SqliteRow, SqliteStateme pub(crate) struct ConnectionWorker { command_tx: flume::Sender, /// The `sqlite3` pointer. NOTE: access is unsynchronized! - pub(crate) handle_raw: ConnectionHandleRaw, + pub(crate) _handle_raw: ConnectionHandleRaw, /// Mutex for locking access to the database. pub(crate) shared: Arc, } @@ -64,10 +63,6 @@ enum Command { Rollback { tx: Option>>, }, - CreateCollation { - create_collation: - Box Result<(), Error> + Send + Sync + 'static>, - }, UnlockDb, ClearCache { tx: oneshot::Sender<()>, @@ -109,7 +104,7 @@ impl ConnectionWorker { if establish_tx .send(Ok(Self { command_tx, - handle_raw: conn.handle.to_raw(), + _handle_raw: conn.handle.to_raw(), shared: Arc::clone(&shared), })) .is_err() @@ -241,11 +236,6 @@ impl ConnectionWorker { } } } - Command::CreateCollation { create_collation } => { - if let Err(error) = (create_collation)(&mut conn) { - tracing::warn!(%error, "error applying collation in background worker"); - } - } Command::ClearCache { tx } => { conn.statements.clear(); update_cached_statements_size(&conn, &shared.cached_statements_size); @@ -364,23 +354,6 @@ impl ConnectionWorker { rx.recv().await.map_err(|_| Error::WorkerCrashed) } - pub fn create_collation( - &mut self, - name: &str, - compare: impl Fn(&str, &str) -> std::cmp::Ordering + Send + Sync + 'static, - ) -> Result<(), Error> { - let name = name.to_string(); - - self.command_tx - .send(Command::CreateCollation { - create_collation: Box::new(move |conn| { - create_collation(&mut conn.handle, &name, compare) - }), - }) - .map_err(|_| Error::WorkerCrashed)?; - Ok(()) - } - pub(crate) async fn clear_cache(&mut self) -> Result<(), Error> { self.oneshot_cmd(|tx| Command::ClearCache { tx }).await } diff --git a/sqlx-sqlite/src/migrate.rs b/sqlx-sqlite/src/migrate.rs index 85946eb9..94a39a94 100644 --- a/sqlx-sqlite/src/migrate.rs +++ b/sqlx-sqlite/src/migrate.rs @@ -7,7 +7,6 @@ use crate::migrate::{AppliedMigration, Migration}; use crate::migrate::{Migrate, MigrateDatabase}; use crate::query::query; use crate::query_as::query_as; -use crate::query_scalar::query_scalar; use crate::{Sqlite, SqliteConnectOptions, SqliteConnection, SqliteJournalMode}; use futures_core::future::BoxFuture; use std::str::FromStr;