Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ rustdoc-args = ["--cfg", "docsrs"]
default = ["any", "macros", "migrate", "json"]

derive = ["sqlx-macros/derive"]
macros = ["derive", "sqlx-macros/macros"]
macros = ["derive", "sqlx-macros/macros", "sqlx-core/offline", "sqlx-mysql?/offline", "sqlx-postgres?/offline", "sqlx-sqlite?/offline"]
migrate = ["sqlx-core/migrate", "sqlx-macros?/migrate", "sqlx-mysql?/migrate", "sqlx-postgres?/migrate", "sqlx-sqlite?/migrate"]

# Enable parsing of `sqlx.toml` for configuring macros and migrations.
Expand Down Expand Up @@ -211,7 +211,7 @@ features = ["time", "net", "sync", "fs", "io-util", "rt"]
default-features = false

[dependencies]
sqlx-core = { workspace = true, features = ["offline", "migrate"] }
sqlx-core = { workspace = true, features = ["migrate"] }
sqlx-macros = { workspace = true, optional = true }

sqlx-mysql = { workspace = true, optional = true }
Expand Down
9 changes: 6 additions & 3 deletions sqlx-core/src/any/connection/backend.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::any::{Any, AnyArguments, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo};
use crate::describe::Describe;
use crate::any::{AnyArguments, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo};
use crate::sql_str::SqlStr;
use either::Either;
use futures_core::future::BoxFuture;
Expand Down Expand Up @@ -114,5 +113,9 @@ pub trait AnyConnectionBackend: std::any::Any + Debug + Send + 'static {
parameters: &[AnyTypeInfo],
) -> BoxFuture<'c, crate::Result<AnyStatement>>;

fn describe(&mut self, sql: SqlStr) -> BoxFuture<'_, crate::Result<Describe<Any>>>;
#[cfg(feature = "offline")]
fn describe(
&mut self,
sql: SqlStr,
) -> BoxFuture<'_, crate::Result<crate::describe::Describe<crate::any::Any>>>;
}
7 changes: 5 additions & 2 deletions sqlx-core/src/any/connection/executor.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::any::{Any, AnyConnection, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo};
use crate::describe::Describe;
use crate::error::Error;
use crate::executor::{Execute, Executor};
use crate::sql_str::SqlStr;
Expand Down Expand Up @@ -56,7 +55,11 @@ impl<'c> Executor<'c> for &'c mut AnyConnection {
self.backend.prepare_with(sql, parameters)
}

fn describe<'e>(self, sql: SqlStr) -> BoxFuture<'e, Result<Describe<Self::Database>, Error>>
#[cfg(feature = "offline")]
fn describe<'e>(
self,
sql: SqlStr,
) -> BoxFuture<'e, Result<crate::describe::Describe<Self::Database>, Error>>
where
'c: 'e,
{
Expand Down
7 changes: 5 additions & 2 deletions sqlx-core/src/executor.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::database::Database;
use crate::describe::Describe;
use crate::error::{BoxDynError, Error};
use crate::sql_str::{SqlSafeStr, SqlStr};

Expand Down Expand Up @@ -178,7 +177,11 @@ pub trait Executor<'c>: Send + Debug + Sized {
/// This is used by compile-time verification in the query macros to
/// power their type inference.
#[doc(hidden)]
fn describe<'e>(self, sql: SqlStr) -> BoxFuture<'e, Result<Describe<Self::Database>, Error>>
#[cfg(feature = "offline")]
fn describe<'e>(
self,
sql: SqlStr,
) -> BoxFuture<'e, Result<crate::describe::Describe<Self::Database>, Error>>
where
'c: 'e;
}
Expand Down
8 changes: 6 additions & 2 deletions sqlx-core/src/pool/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ use futures_core::stream::BoxStream;
use futures_util::TryStreamExt;

use crate::database::Database;
use crate::describe::Describe;
use crate::error::Error;
use crate::executor::{Execute, Executor};
use crate::pool::Pool;
Expand Down Expand Up @@ -63,7 +62,11 @@ where
}

#[doc(hidden)]
fn describe<'e>(self, sql: SqlStr) -> BoxFuture<'e, Result<Describe<Self::Database>, Error>> {
#[cfg(feature = "offline")]
fn describe<'e>(
self,
sql: SqlStr,
) -> BoxFuture<'e, Result<crate::describe::Describe<Self::Database>, Error>> {
let pool = self.clone();

Box::pin(async move { pool.acquire().await?.describe(sql).await })
Expand Down Expand Up @@ -127,6 +130,7 @@ where
// }
//
// #[doc(hidden)]
// #[cfg(feature = "offline")]
// #[inline]
// fn describe<'e, 'q: 'e>(
// self,
Expand Down
1 change: 1 addition & 0 deletions sqlx-core/src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ where
// }
//
// #[doc(hidden)]
// #[cfg(feature = "offline")]
// fn describe<'e, 'q: 'e>(
// self,
// query: &'q str,
Expand Down
4 changes: 2 additions & 2 deletions sqlx-mysql/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ rust-version.workspace = true
[features]
json = ["sqlx-core/json", "serde"]
any = ["sqlx-core/any"]
offline = ["sqlx-core/offline", "serde/derive"]
offline = ["sqlx-core/offline", "serde/derive", "bitflags/serde"]
migrate = ["sqlx-core/migrate"]

# Type Integration features
Expand Down Expand Up @@ -52,7 +52,7 @@ uuid = { workspace = true, optional = true }
# Misc
atoi = "2.0"
base64 = { version = "0.22.0", default-features = false, features = ["std"] }
bitflags = { version = "2", default-features = false, features = ["serde"] }
bitflags = { version = "2", default-features = false }
byteorder = { version = "1.4.3", default-features = false, features = ["std"] }
bytes = "1.1.0"
either = "1.6.1"
Expand Down
9 changes: 6 additions & 3 deletions sqlx-mysql/src/any.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ use futures_core::future::BoxFuture;
use futures_core::stream::BoxStream;
use futures_util::{stream, FutureExt, StreamExt, TryFutureExt, TryStreamExt};
use sqlx_core::any::{
Any, AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow,
AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow,
AnyStatement, AnyTypeInfo, AnyTypeInfoKind,
};
use sqlx_core::connection::Connection;
use sqlx_core::database::Database;
use sqlx_core::describe::Describe;
use sqlx_core::executor::Executor;
use sqlx_core::sql_str::SqlStr;
use sqlx_core::transaction::TransactionManager;
Expand Down Expand Up @@ -141,7 +140,11 @@ impl AnyConnectionBackend for MySqlConnection {
})
}

fn describe(&mut self, sql: SqlStr) -> BoxFuture<'_, sqlx_core::Result<Describe<Any>>> {
#[cfg(feature = "offline")]
fn describe(
&mut self,
sql: SqlStr,
) -> BoxFuture<'_, sqlx_core::Result<sqlx_core::describe::Describe<sqlx_core::any::Any>>> {
Box::pin(async move {
let describe = Executor::describe(self, sql).await?;
describe.try_into_any()
Expand Down
1 change: 1 addition & 0 deletions sqlx-mysql/src/column.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ pub struct MySqlColumn {
#[cfg_attr(feature = "offline", serde(default))]
pub(crate) origin: ColumnOrigin,

#[allow(unused)]
#[cfg_attr(feature = "offline", serde(skip))]
pub(crate) flags: Option<ColumnFlags>,
}
Expand Down
13 changes: 8 additions & 5 deletions sqlx-mysql/src/connection/executor.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use super::MySqlStream;
use crate::connection::stream::Waiting;
use crate::describe::Describe;
use crate::error::Error;
use crate::executor::{Execute, Executor};
use crate::ext::ustr::UStr;
Expand All @@ -10,7 +9,7 @@ use crate::protocol::response::Status;
use crate::protocol::statement::{
BinaryRow, Execute as StatementExecute, Prepare, PrepareOk, StmtClose,
};
use crate::protocol::text::{ColumnDefinition, ColumnFlags, Query, TextRow};
use crate::protocol::text::{ColumnDefinition, Query, TextRow};
use crate::statement::{MySqlStatement, MySqlStatementMetadata};
use crate::HashMap;
use crate::{
Expand Down Expand Up @@ -359,7 +358,11 @@ impl<'c> Executor<'c> for &'c mut MySqlConnection {
}

#[doc(hidden)]
fn describe<'e>(self, sql: SqlStr) -> BoxFuture<'e, Result<Describe<MySql>, Error>>
#[cfg(feature = "offline")]
fn describe<'e>(
self,
sql: SqlStr,
) -> BoxFuture<'e, Result<crate::describe::Describe<MySql>, Error>>
where
'c: 'e,
{
Expand All @@ -379,11 +382,11 @@ impl<'c> Executor<'c> for &'c mut MySqlConnection {
.iter()
.map(|col| {
col.flags
.map(|flags| !flags.contains(ColumnFlags::NOT_NULL))
.map(|flags| !flags.contains(crate::protocol::text::ColumnFlags::NOT_NULL))
})
.collect();

Ok(Describe {
Ok(crate::describe::Describe {
parameters: Some(Either::Right(metadata.parameters)),
columns,
nullable,
Expand Down
12 changes: 5 additions & 7 deletions sqlx-postgres/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ rust-version.workspace = true

[features]
any = ["sqlx-core/any"]
json = ["sqlx-core/json"]
json = ["dep:serde", "dep:serde_json", "sqlx-core/json"]
migrate = ["sqlx-core/migrate"]
offline = ["sqlx-core/offline"]
offline = ["json", "sqlx-core/offline", "smallvec/serde"]

# Type Integration features
bigdecimal = ["dep:bigdecimal", "dep:num-bigint", "sqlx-core/bigdecimal"]
Expand Down Expand Up @@ -62,21 +62,19 @@ itoa = "1.0.1"
log = "0.4.18"
memchr = { version = "2.4.1", default-features = false }
num-bigint = { version = "0.4.3", optional = true }
smallvec = { version = "1.7.0", features = ["serde"] }
smallvec = { version = "1.7.0" }
stringprep = "0.1.2"
tracing = { version = "0.1.37", features = ["log"] }
whoami = { version = "1.2.1", default-features = false }

dotenvy.workspace = true
thiserror.workspace = true

serde = { version = "1.0.144", features = ["derive"] }
serde_json = { version = "1.0.85", features = ["raw_value"] }
serde = { version = "1.0.144", optional = true, features = ["derive"] }
serde_json = { version = "1.0.85", optional = true, features = ["raw_value"] }

[dependencies.sqlx-core]
workspace = true
# We use JSON in the driver implementation itself so there's no reason not to enable it here.
features = ["json"]

[dev-dependencies.sqlx]
# FIXME: https://github.com/rust-lang/cargo/issues/15622
Expand Down
11 changes: 7 additions & 4 deletions sqlx-postgres/src/any.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ use sqlx_core::sql_str::SqlStr;
use std::{future, pin::pin};

use sqlx_core::any::{
Any, AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow,
AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow,
AnyStatement, AnyTypeInfo, AnyTypeInfoKind,
};

use crate::type_info::PgType;
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::transaction::TransactionManager;
Expand Down Expand Up @@ -141,7 +140,11 @@ impl AnyConnectionBackend for PgConnection {
})
}

fn describe<'c>(&mut self, sql: SqlStr) -> BoxFuture<'_, sqlx_core::Result<Describe<Any>>> {
#[cfg(feature = "offline")]
fn describe<'c>(
&mut self,
sql: SqlStr,
) -> BoxFuture<'_, sqlx_core::Result<sqlx_core::describe::Describe<sqlx_core::any::Any>>> {
Box::pin(async move {
let describe = Executor::describe(self, sql).await?;

Expand Down Expand Up @@ -172,7 +175,7 @@ impl AnyConnectionBackend for PgConnection {
None => None,
};

Ok(Describe {
Ok(sqlx_core::describe::Describe {
columns,
parameters,
nullable: describe.nullable,
Expand Down
Loading
Loading