diff --git a/src/database/mock.rs b/src/database/mock.rs
index c57ef63e..7b208a72 100644
--- a/src/database/mock.rs
+++ b/src/database/mock.rs
@@ -75,7 +75,7 @@ impl MockDatabaseTrait for MockDatabase {
result: ExecResultHolder::Mock(std::mem::take(&mut self.exec_results[counter])),
})
} else {
- Err(DbErr::Exec)
+ Err(DbErr::Exec("`exec_results` buffer is empty.".to_owned()))
}
}
@@ -93,7 +93,7 @@ impl MockDatabaseTrait for MockDatabase {
})
.collect())
} else {
- Err(DbErr::Query)
+ Err(DbErr::Query("`query_results` buffer is empty.".to_owned()))
}
}
diff --git a/src/database/mod.rs b/src/database/mod.rs
index dd5fc5ea..4ad1b347 100644
--- a/src/database/mod.rs
+++ b/src/database/mod.rs
@@ -29,6 +29,6 @@ impl Database {
if crate::MockDatabaseConnector::accepts(string) {
return crate::MockDatabaseConnector::connect(string).await;
}
- Err(DbErr::Conn)
+ Err(DbErr::Conn(format!("The connection string '{}' has no supporting driver.", string)))
}
}
diff --git a/src/driver/mod.rs b/src/driver/mod.rs
index 7cb183c3..904e06a9 100644
--- a/src/driver/mod.rs
+++ b/src/driver/mod.rs
@@ -1,5 +1,7 @@
#[cfg(feature = "mock")]
mod mock;
+#[cfg(feature = "sqlx-dep")]
+mod sqlx_common;
#[cfg(feature = "sqlx-mysql")]
mod sqlx_mysql;
#[cfg(feature = "sqlx-sqlite")]
@@ -7,6 +9,8 @@ mod sqlx_sqlite;
#[cfg(feature = "mock")]
pub use mock::*;
+#[cfg(feature = "sqlx-dep")]
+pub use sqlx_common::*;
#[cfg(feature = "sqlx-mysql")]
pub use sqlx_mysql::*;
#[cfg(feature = "sqlx-sqlite")]
diff --git a/src/driver/sqlx_common.rs b/src/driver/sqlx_common.rs
new file mode 100644
index 00000000..5b1f7b35
--- /dev/null
+++ b/src/driver/sqlx_common.rs
@@ -0,0 +1,9 @@
+use crate::DbErr;
+
+pub fn sqlx_error_to_exec_err(err: sqlx::Error) -> DbErr {
+ DbErr::Exec(err.to_string())
+}
+
+pub fn sqlx_error_to_query_err(err: sqlx::Error) -> DbErr {
+ DbErr::Query(err.to_string())
+}
diff --git a/src/driver/sqlx_mysql.rs b/src/driver/sqlx_mysql.rs
index 7ecbd5a2..ebea0a32 100644
--- a/src/driver/sqlx_mysql.rs
+++ b/src/driver/sqlx_mysql.rs
@@ -8,6 +8,8 @@ use sea_query_driver_mysql::bind_query;
use crate::{debug_print, error::*, executor::*, DatabaseConnection, Statement};
+use super::sqlx_common::*;
+
pub struct SqlxMySqlConnector;
pub struct SqlxMySqlPoolConnection {
@@ -25,7 +27,7 @@ impl SqlxMySqlConnector {
SqlxMySqlPoolConnection { pool },
))
} else {
- Err(DbErr::Conn)
+ Err(DbErr::Conn("Failed to connect.".to_owned()))
}
}
}
@@ -42,11 +44,13 @@ impl SqlxMySqlPoolConnection {
let query = sqlx_query(&stmt);
if let Ok(conn) = &mut self.pool.acquire().await {
- if let Ok(res) = query.execute(conn).await {
- return Ok(res.into());
+ match query.execute(conn).await {
+ Ok(res) => Ok(res.into()),
+ Err(err) => Err(sqlx_error_to_exec_err(err)),
}
+ } else {
+ Err(DbErr::Exec("Failed to acquire connection from pool.".to_owned()))
}
- Err(DbErr::Exec)
}
pub async fn query_one(&self, stmt: Statement) -> Result