Skip to content

Commit 463eab8

Browse files
committed
chore: simplified the implementation and definition of QueryParameter, that now does not have a lifetime bound
1 parent 73c68d8 commit 463eab8

33 files changed

Lines changed: 173 additions & 182 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ assert_eq!(
8484
);
8585
```
8686

87-
Note the leading reference on the `find_by_pk(...)` parameter. This associated function receives an `&dyn QueryParameter<'_>` as argument, not a value.
87+
Note the leading reference on the `find_by_pk(...)` parameter. This associated function receives an `&dyn QueryParameter` as argument, not a value.
8888

8989
### :wrench: Building more complex queries
9090

canyon_core/src/connection/clients/mssql.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub(crate) mod sqlserver_query_launcher {
2020
#[inline(always)]
2121
pub(crate) async fn query<'a, S, R>(
2222
stmt: S,
23-
params: &[&'a dyn QueryParameter<'a>],
23+
params: &[&'a dyn QueryParameter],
2424
conn: &SqlServerConnection,
2525
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
2626
where
@@ -41,7 +41,7 @@ pub(crate) mod sqlserver_query_launcher {
4141
#[inline(always)]
4242
pub(crate) async fn query_rows<'a>(
4343
stmt: &str,
44-
params: &[&'a dyn QueryParameter<'a>],
44+
params: &[&'a dyn QueryParameter],
4545
conn: &SqlServerConnection,
4646
) -> Result<CanyonRows, Box<(dyn Error + Send + Sync)>> {
4747
let result = execute_query(stmt, params, conn)
@@ -57,7 +57,7 @@ pub(crate) mod sqlserver_query_launcher {
5757

5858
pub(crate) async fn query_one<'a, R>(
5959
stmt: &str,
60-
params: &[&'a dyn QueryParameter<'a>],
60+
params: &[&'a dyn QueryParameter],
6161
conn: &SqlServerConnection,
6262
) -> Result<Option<R::Output>, Box<(dyn Error + Send + Sync)>>
6363
where
@@ -73,7 +73,7 @@ pub(crate) mod sqlserver_query_launcher {
7373

7474
pub(crate) async fn query_one_for<'a, T: FromSqlOwnedValue<T>>(
7575
stmt: &str,
76-
params: &[&'a dyn QueryParameter<'a>],
76+
params: &[&'a dyn QueryParameter],
7777
conn: &SqlServerConnection,
7878
) -> Result<T, Box<(dyn Error + Send + Sync)>> {
7979
let row = execute_query(stmt, params, conn)
@@ -93,7 +93,7 @@ pub(crate) mod sqlserver_query_launcher {
9393

9494
pub(crate) async fn execute<'a>(
9595
stmt: &str,
96-
params: &[&'a dyn QueryParameter<'a>],
96+
params: &[&'a dyn QueryParameter],
9797
conn: &SqlServerConnection,
9898
) -> Result<u64, Box<(dyn Error + Send + Sync)>> {
9999
let mssql_query = generate_mssql_stmt(stmt, params).await;
@@ -111,7 +111,7 @@ pub(crate) mod sqlserver_query_launcher {
111111

112112
async fn execute_query<'a>(
113113
stmt: &str,
114-
params: &[&'a (dyn QueryParameter<'a>)],
114+
params: &[&'a (dyn QueryParameter)],
115115
conn: &SqlServerConnection,
116116
) -> Result<QueryStream<'a>, Box<(dyn Error + Send + Sync)>> {
117117
let mssql_query = generate_mssql_stmt(stmt, params).await;
@@ -122,10 +122,7 @@ pub(crate) mod sqlserver_query_launcher {
122122
Ok(mssql_query.query(sqlservconn.client).await?)
123123
}
124124

125-
async fn generate_mssql_stmt<'a>(
126-
stmt: &str,
127-
params: &[&'a (dyn QueryParameter<'a>)],
128-
) -> Query<'a> {
125+
async fn generate_mssql_stmt<'a>(stmt: &str, params: &[&'a (dyn QueryParameter)]) -> Query<'a> {
129126
let mut stmt = String::from(stmt);
130127
if stmt.contains("RETURNING") {
131128
let c = stmt.clone();

canyon_core/src/connection/clients/mysql.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub(crate) mod mysql_query_launcher {
3232
#[inline(always)]
3333
pub async fn query<S, R>(
3434
stmt: S,
35-
params: &[&'_ dyn QueryParameter<'_>],
35+
params: &[&'_ dyn QueryParameter],
3636
conn: &MysqlConnection,
3737
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
3838
where
@@ -50,7 +50,7 @@ pub(crate) mod mysql_query_launcher {
5050
#[inline(always)]
5151
pub(crate) async fn query_rows<'a>(
5252
stmt: &str,
53-
params: &[&'a dyn QueryParameter<'a>],
53+
params: &[&'a dyn QueryParameter],
5454
conn: &MysqlConnection,
5555
) -> Result<CanyonRows, Box<(dyn Error + Send + Sync)>> {
5656
Ok(CanyonRows::MySQL(execute_query(stmt, params, conn).await?))
@@ -59,7 +59,7 @@ pub(crate) mod mysql_query_launcher {
5959
#[inline(always)]
6060
pub(crate) async fn query_one<'a, R>(
6161
stmt: &str,
62-
params: &[&'a dyn QueryParameter<'a>],
62+
params: &[&'a dyn QueryParameter],
6363
conn: &MysqlConnection,
6464
) -> Result<Option<R::Output>, Box<(dyn Error + Send + Sync)>>
6565
where
@@ -76,7 +76,7 @@ pub(crate) mod mysql_query_launcher {
7676
#[inline(always)]
7777
pub(crate) async fn query_one_for<'a, T: FromSqlOwnedValue<T>>(
7878
stmt: &str,
79-
params: &[&'a dyn QueryParameter<'a>],
79+
params: &[&'a dyn QueryParameter],
8080
conn: &MysqlConnection,
8181
) -> Result<T, Box<(dyn Error + Send + Sync)>> {
8282
Ok(execute_query(stmt, params, conn)
@@ -91,7 +91,7 @@ pub(crate) mod mysql_query_launcher {
9191
#[inline(always)]
9292
async fn execute_query<S>(
9393
stmt: S,
94-
params: &[&'_ dyn QueryParameter<'_>],
94+
params: &[&'_ dyn QueryParameter],
9595
conn: &MysqlConnection,
9696
) -> Result<Vec<Row>, Box<(dyn Error + Send + Sync)>>
9797
where
@@ -121,7 +121,7 @@ pub(crate) mod mysql_query_launcher {
121121

122122
pub(crate) async fn execute<S>(
123123
stmt: S,
124-
params: &[&'_ dyn QueryParameter<'_>],
124+
params: &[&'_ dyn QueryParameter],
125125
conn: &MysqlConnection,
126126
) -> Result<u64, Box<(dyn Error + Send + Sync)>>
127127
where
@@ -136,7 +136,7 @@ pub(crate) mod mysql_query_launcher {
136136
#[cfg(feature = "mysql")]
137137
fn generate_mysql_stmt(
138138
stmt: &str,
139-
params: &[&'_ dyn QueryParameter<'_>],
139+
params: &[&'_ dyn QueryParameter],
140140
) -> Result<QueryWithParams<String, Vec<Value>>, Box<dyn Error + Send + Sync>> {
141141
let stmt_with_escape_characters = regex::escape(stmt);
142142
let query_string =
@@ -162,8 +162,8 @@ pub(crate) mod mysql_query_launcher {
162162
#[cfg(feature = "mysql")]
163163
fn reorder_params<T>(
164164
stmt: &str,
165-
params: &[&'_ dyn QueryParameter<'_>],
166-
fn_parser: impl Fn(&&dyn QueryParameter<'_>) -> T,
165+
params: &[&'_ dyn QueryParameter],
166+
fn_parser: impl Fn(&&dyn QueryParameter) -> T,
167167
) -> Result<Vec<T>, Box<dyn Error + Send + Sync>> {
168168
use mysql_query_launcher::DETECT_PARAMS_IN_QUERY;
169169

canyon_core/src/connection/clients/postgresql.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub(crate) mod postgres_query_launcher {
2121
#[inline(always)]
2222
pub(crate) async fn query<S, R>(
2323
stmt: S,
24-
params: &[&'_ (dyn QueryParameter<'_>)],
24+
params: &[&'_ (dyn QueryParameter)],
2525
conn: &PostgreSqlConnection,
2626
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
2727
where
@@ -41,7 +41,7 @@ pub(crate) mod postgres_query_launcher {
4141
#[inline(always)]
4242
pub(crate) async fn query_rows<'a>(
4343
stmt: &str,
44-
params: &[&'a dyn QueryParameter<'a>],
44+
params: &[&'a dyn QueryParameter],
4545
conn: &PostgreSqlConnection,
4646
) -> Result<CanyonRows, Box<(dyn Error + Send + Sync)>> {
4747
let m_params: Vec<_> = params
@@ -57,7 +57,7 @@ pub(crate) mod postgres_query_launcher {
5757
#[inline(always)]
5858
pub(crate) async fn query_one<'a, R>(
5959
stmt: &str,
60-
params: &[&'a dyn QueryParameter<'a>],
60+
params: &[&'a dyn QueryParameter],
6161
conn: &PostgreSqlConnection,
6262
) -> Result<Option<R::Output>, Box<(dyn Error + Send + Sync)>>
6363
where
@@ -81,7 +81,7 @@ pub(crate) mod postgres_query_launcher {
8181
#[inline(always)]
8282
pub(crate) async fn query_one_for<'a, T: FromSqlOwnedValue<T>>(
8383
stmt: &str,
84-
params: &[&'a dyn QueryParameter<'a>],
84+
params: &[&'a dyn QueryParameter],
8585
conn: &PostgreSqlConnection,
8686
) -> Result<T, Box<(dyn Error + Send + Sync)>> {
8787
let m_params: Vec<_> = params
@@ -95,7 +95,7 @@ pub(crate) mod postgres_query_launcher {
9595
#[inline(always)]
9696
pub(crate) async fn execute<S>(
9797
stmt: S,
98-
params: &[&'_ (dyn QueryParameter<'_>)],
98+
params: &[&'_ (dyn QueryParameter)],
9999
conn: &PostgreSqlConnection,
100100
) -> Result<u64, Box<(dyn Error + Send + Sync)>>
101101
where
@@ -107,7 +107,7 @@ pub(crate) mod postgres_query_launcher {
107107
.map_err(From::from)
108108
}
109109

110-
fn get_psql_params<'a>(params: &[&'a (dyn QueryParameter<'_>)]) -> Vec<&'a (dyn ToSql + Sync)> {
110+
fn get_psql_params<'a>(params: &[&'a (dyn QueryParameter)]) -> Vec<&'a (dyn ToSql + Sync)> {
111111
params
112112
.as_ref()
113113
.iter()

canyon_core/src/connection/contracts/impl/database_connection.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ impl DbConnection for DatabaseConnection {
1212
async fn query_rows<'a>(
1313
&self,
1414
stmt: &str,
15-
params: &[&'a dyn QueryParameter<'a>],
15+
params: &[&'a dyn QueryParameter],
1616
) -> Result<CanyonRows, Box<(dyn Error + Send + Sync)>> {
1717
db_conn_query_rows_impl(self, stmt, params).await
1818
}
1919

2020
async fn query<'a, S, R>(
2121
&self,
2222
stmt: S,
23-
params: &[&'a (dyn QueryParameter<'a>)],
23+
params: &[&'a (dyn QueryParameter)],
2424
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
2525
where
2626
S: AsRef<str> + Send,
@@ -33,7 +33,7 @@ impl DbConnection for DatabaseConnection {
3333
async fn query_one<'a, R>(
3434
&self,
3535
stmt: &str,
36-
params: &[&'a dyn QueryParameter<'a>],
36+
params: &[&'a dyn QueryParameter],
3737
) -> Result<Option<R::Output>, Box<(dyn Error + Send + Sync)>>
3838
where
3939
R: RowMapper,
@@ -44,15 +44,15 @@ impl DbConnection for DatabaseConnection {
4444
async fn query_one_for<'a, T: FromSqlOwnedValue<T>>(
4545
&self,
4646
stmt: &str,
47-
params: &[&'a dyn QueryParameter<'a>],
47+
params: &[&'a dyn QueryParameter],
4848
) -> Result<T, Box<(dyn Error + Send + Sync)>> {
4949
db_conn_query_one_for_impl::<T>(self, stmt, params).await
5050
}
5151

5252
async fn execute<'a>(
5353
&self,
5454
stmt: &str,
55-
params: &[&'a dyn QueryParameter<'a>],
55+
params: &[&'a dyn QueryParameter],
5656
) -> Result<u64, Box<(dyn Error + Send + Sync)>> {
5757
db_conn_execute_impl(self, stmt, params).await
5858
}
@@ -66,15 +66,15 @@ impl DbConnection for &mut DatabaseConnection {
6666
async fn query_rows<'a>(
6767
&self,
6868
stmt: &str,
69-
params: &[&'a dyn QueryParameter<'a>],
69+
params: &[&'a dyn QueryParameter],
7070
) -> Result<CanyonRows, Box<(dyn Error + Send + Sync)>> {
7171
db_conn_query_rows_impl(self, stmt, params).await
7272
}
7373

7474
async fn query<'a, S, R>(
7575
&self,
7676
stmt: S,
77-
params: &[&'a (dyn QueryParameter<'a>)],
77+
params: &[&'a (dyn QueryParameter)],
7878
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
7979
where
8080
S: AsRef<str> + Send,
@@ -87,7 +87,7 @@ impl DbConnection for &mut DatabaseConnection {
8787
async fn query_one<'a, R>(
8888
&self,
8989
stmt: &str,
90-
params: &[&'a dyn QueryParameter<'a>],
90+
params: &[&'a dyn QueryParameter],
9191
) -> Result<Option<R::Output>, Box<(dyn Error + Send + Sync)>>
9292
where
9393
R: RowMapper,
@@ -98,15 +98,15 @@ impl DbConnection for &mut DatabaseConnection {
9898
async fn query_one_for<'a, T: FromSqlOwnedValue<T>>(
9999
&self,
100100
stmt: &str,
101-
params: &[&'a dyn QueryParameter<'a>],
101+
params: &[&'a dyn QueryParameter],
102102
) -> Result<T, Box<(dyn Error + Send + Sync)>> {
103103
db_conn_query_one_for_impl::<T>(self, stmt, params).await
104104
}
105105

106106
async fn execute<'a>(
107107
&self,
108108
stmt: &str,
109-
params: &[&'a dyn QueryParameter<'a>],
109+
params: &[&'a dyn QueryParameter],
110110
) -> Result<u64, Box<(dyn Error + Send + Sync)>> {
111111
db_conn_execute_impl(self, stmt, params).await
112112
}
@@ -119,7 +119,7 @@ impl DbConnection for &mut DatabaseConnection {
119119
pub(crate) async fn db_conn_query_rows_impl<'a>(
120120
c: &DatabaseConnection,
121121
stmt: &str,
122-
params: &[&'a (dyn QueryParameter<'a> + 'a)],
122+
params: &[&'a (dyn QueryParameter + 'a)],
123123
) -> Result<CanyonRows, Box<dyn Error + Send + Sync>> {
124124
match c {
125125
#[cfg(feature = "postgres")]
@@ -136,7 +136,7 @@ pub(crate) async fn db_conn_query_rows_impl<'a>(
136136
pub(crate) async fn db_conn_query_one_impl<'a, R>(
137137
c: &DatabaseConnection,
138138
stmt: &str,
139-
params: &[&'a (dyn QueryParameter<'a> + 'a)],
139+
params: &[&'a (dyn QueryParameter + 'a)],
140140
) -> Result<Option<R::Output>, Box<dyn Error + Send + Sync>>
141141
where
142142
R: RowMapper,
@@ -156,7 +156,7 @@ where
156156
pub(crate) async fn db_conn_query_impl<'a, S, R>(
157157
c: &DatabaseConnection,
158158
stmt: S,
159-
params: &[&'a (dyn QueryParameter<'a>)],
159+
params: &[&'a (dyn QueryParameter)],
160160
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
161161
where
162162
S: AsRef<str> + Send,
@@ -178,7 +178,7 @@ where
178178
pub(crate) async fn db_conn_query_one_for_impl<'a, T>(
179179
c: &DatabaseConnection,
180180
stmt: &str,
181-
params: &[&'a dyn QueryParameter<'a>],
181+
params: &[&'a dyn QueryParameter],
182182
) -> Result<T, Box<(dyn Error + Send + Sync)>>
183183
where
184184
T: FromSqlOwnedValue<T>,
@@ -198,7 +198,7 @@ where
198198
pub(crate) async fn db_conn_execute_impl<'a>(
199199
c: &DatabaseConnection,
200200
stmt: &str,
201-
params: &[&'a dyn QueryParameter<'a>],
201+
params: &[&'a dyn QueryParameter],
202202
) -> Result<u64, Box<(dyn Error + Send + Sync)>> {
203203
match c {
204204
#[cfg(feature = "postgres")]

canyon_core/src/connection/contracts/impl/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@ impl_db_connection!(&str);
2525
impl<T> DbConnection for Arc<Mutex<T>>
2626
where
2727
T: DbConnection + Send,
28-
Self: Clone
28+
Self: Clone,
2929
{
3030
async fn query_rows<'a>(
3131
&self,
3232
stmt: &str,
33-
params: &[&'a dyn QueryParameter<'a>],
33+
params: &[&'a dyn QueryParameter],
3434
) -> Result<CanyonRows, Box<(dyn Error + Send + Sync)>> {
3535
self.lock().await.query_rows(stmt, params).await
3636
}
3737

3838
async fn query<'a, S, R>(
3939
&self,
4040
stmt: S,
41-
params: &[&'a (dyn QueryParameter<'a>)],
41+
params: &[&'a (dyn QueryParameter)],
4242
) -> Result<Vec<R>, Box<(dyn Error + Send + Sync)>>
4343
where
4444
S: AsRef<str> + Send,
@@ -51,7 +51,7 @@ where
5151
async fn query_one<'a, R>(
5252
&self,
5353
stmt: &str,
54-
params: &[&'a (dyn QueryParameter<'a>)],
54+
params: &[&'a (dyn QueryParameter)],
5555
) -> Result<Option<R::Output>, Box<(dyn Error + Send + Sync)>>
5656
where
5757
R: RowMapper,
@@ -62,15 +62,15 @@ where
6262
async fn query_one_for<'a, F: FromSqlOwnedValue<F>>(
6363
&self,
6464
stmt: &str,
65-
params: &[&'a (dyn QueryParameter<'a>)],
65+
params: &[&'a (dyn QueryParameter)],
6666
) -> Result<F, Box<(dyn Error + Send + Sync)>> {
6767
self.lock().await.query_one_for::<F>(stmt, params).await
6868
}
6969

7070
async fn execute<'a>(
7171
&self,
7272
stmt: &str,
73-
params: &[&'a (dyn QueryParameter<'a>)],
73+
params: &[&'a (dyn QueryParameter)],
7474
) -> Result<u64, Box<(dyn Error + Send + Sync)>> {
7575
self.lock().await.execute(stmt, params).await
7676
}

0 commit comments

Comments
 (0)