Skip to content

Commit e831255

Browse files
FSMaxBMax Bruckner
authored and
Max Bruckner
committed
Remove remaining panics in AnyConnectionBackend implementations
1 parent 233ac4c commit e831255

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

sqlx-mysql/src/any.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::{
66
use either::Either;
77
use futures_core::future::BoxFuture;
88
use futures_core::stream::BoxStream;
9-
use futures_util::{StreamExt, TryFutureExt, TryStreamExt};
9+
use futures_util::{stream, StreamExt, TryFutureExt, TryStreamExt};
1010
use sqlx_core::any::{
1111
Any, AnyArguments, AnyColumn, AnyConnectOptions, AnyConnectionBackend, AnyQueryResult, AnyRow,
1212
AnyStatement, AnyTypeInfo, AnyTypeInfoKind,
@@ -16,6 +16,7 @@ use sqlx_core::database::Database;
1616
use sqlx_core::describe::Describe;
1717
use sqlx_core::executor::Executor;
1818
use sqlx_core::transaction::TransactionManager;
19+
use std::future;
1920

2021
sqlx_core::declare_driver_with_optional_migrate!(DRIVER = MySql);
2122

@@ -77,14 +78,15 @@ impl AnyConnectionBackend for MySqlConnection {
7778
arguments: Option<AnyArguments<'q>>,
7879
) -> BoxStream<'q, sqlx_core::Result<Either<AnyQueryResult, AnyRow>>> {
7980
let persistent = arguments.is_some();
80-
let args = arguments
81-
.as_ref()
82-
.map(AnyArguments::convert_to)
83-
.transpose()
84-
.expect("Failed to encode arguments");
81+
let arguments = match arguments.as_ref().map(AnyArguments::convert_to).transpose() {
82+
Ok(arguments) => arguments,
83+
Err(error) => {
84+
return stream::once(future::ready(Err(sqlx_core::Error::Encode(error)))).boxed()
85+
}
86+
};
8587

8688
Box::pin(
87-
self.run(query, args, persistent)
89+
self.run(query, arguments, persistent)
8890
.try_flatten_stream()
8991
.map(|res| {
9092
Ok(match res? {
@@ -101,14 +103,15 @@ impl AnyConnectionBackend for MySqlConnection {
101103
arguments: Option<AnyArguments<'q>>,
102104
) -> BoxFuture<'q, sqlx_core::Result<Option<AnyRow>>> {
103105
let persistent = arguments.is_some();
104-
let args = arguments
106+
let arguments = arguments
105107
.as_ref()
106108
.map(AnyArguments::convert_to)
107109
.transpose()
108-
.expect("Failed to encode arguments");
110+
.map_err(sqlx_core::Error::Encode);
109111

110112
Box::pin(async move {
111-
let stream = self.run(query, args, persistent).await?;
113+
let arguments = arguments?;
114+
let stream = self.run(query, arguments, persistent).await?;
112115
futures_util::pin_mut!(stream);
113116

114117
if let Some(Either::Right(row)) = stream.try_next().await? {

sqlx-postgres/src/any.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use crate::{
44
};
55
use futures_core::future::BoxFuture;
66
use futures_core::stream::BoxStream;
7-
use futures_util::{StreamExt, TryFutureExt, TryStreamExt};
7+
use futures_util::{stream, FutureExt, StreamExt, TryFutureExt, TryStreamExt};
8+
use std::future;
89

910
pub use sqlx_core::any::*;
1011

@@ -76,14 +77,15 @@ impl AnyConnectionBackend for PgConnection {
7677
arguments: Option<AnyArguments<'q>>,
7778
) -> BoxStream<'q, sqlx_core::Result<Either<AnyQueryResult, AnyRow>>> {
7879
let persistent = arguments.is_some();
79-
let args = arguments
80-
.as_ref()
81-
.map(AnyArguments::convert_to)
82-
.transpose()
83-
.expect("Failed to encode arguments");
80+
let arguments = match arguments.as_ref().map(AnyArguments::convert_to).transpose() {
81+
Ok(arguments) => arguments,
82+
Err(error) => {
83+
return stream::once(future::ready(Err(sqlx_core::Error::Encode(error)))).boxed()
84+
}
85+
};
8486

8587
Box::pin(
86-
self.run(query, args, 0, persistent, None)
88+
self.run(query, arguments, 0, persistent, None)
8789
.try_flatten_stream()
8890
.map(
8991
move |res: sqlx_core::Result<Either<PgQueryResult, PgRow>>| match res? {
@@ -100,14 +102,15 @@ impl AnyConnectionBackend for PgConnection {
100102
arguments: Option<AnyArguments<'q>>,
101103
) -> BoxFuture<'q, sqlx_core::Result<Option<AnyRow>>> {
102104
let persistent = arguments.is_some();
103-
let args = arguments
105+
let arguments = arguments
104106
.as_ref()
105107
.map(AnyArguments::convert_to)
106108
.transpose()
107-
.expect("Failed to encode arguments");
109+
.map_err(sqlx_core::Error::Encode);
108110

109111
Box::pin(async move {
110-
let stream = self.run(query, args, 1, persistent, None).await?;
112+
let arguments = arguments?;
113+
let stream = self.run(query, arguments, 1, persistent, None).await?;
111114
futures_util::pin_mut!(stream);
112115

113116
if let Some(Either::Right(row)) = stream.try_next().await? {

0 commit comments

Comments
 (0)