Skip to content

Commit 33579ae

Browse files
committed
Fix self lifetimes in GenericClient
1 parent afc9b28 commit 33579ae

File tree

3 files changed

+30
-53
lines changed

3 files changed

+30
-53
lines changed

tokio-postgres/src/client.rs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -505,17 +505,17 @@ impl Client {
505505
}
506506

507507
#[async_trait]
508-
impl GenericClient for Client {
508+
impl GenericClient for &Client {
509509
/// Like `Client::execute`.
510-
async fn execute<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
510+
async fn execute<T>(self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
511511
where
512512
T: ?Sized + ToStatement + Sync + Send,
513513
{
514514
self.execute(query, params).await
515515
}
516516

517517
/// Like `Client::execute_raw`.
518-
async fn execute_raw<'b, I, T>(&self, statement: &T, params: I) -> Result<u64, Error>
518+
async fn execute_raw<'b, I, T>(self, statement: &T, params: I) -> Result<u64, Error>
519519
where
520520
T: ?Sized + ToStatement + Sync + Send,
521521
I: IntoIterator<Item = &'b dyn ToSql> + Sync + Send,
@@ -525,23 +525,15 @@ impl GenericClient for Client {
525525
}
526526

527527
/// Like `Client::query`.
528-
async fn query<T>(
529-
&mut self,
530-
query: &T,
531-
params: &[&(dyn ToSql + Sync)],
532-
) -> Result<Vec<Row>, Error>
528+
async fn query<T>(self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Vec<Row>, Error>
533529
where
534530
T: ?Sized + ToStatement + Sync + Send,
535531
{
536532
self.query(query, params).await
537533
}
538534

539535
/// Like `Client::query_one`.
540-
async fn query_one<T>(
541-
&self,
542-
statement: &T,
543-
params: &[&(dyn ToSql + Sync)],
544-
) -> Result<Row, Error>
536+
async fn query_one<T>(self, statement: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Row, Error>
545537
where
546538
T: ?Sized + ToStatement + Sync + Send,
547539
{
@@ -550,7 +542,7 @@ impl GenericClient for Client {
550542

551543
/// Like `Client::query_opt`.
552544
async fn query_opt<T>(
553-
&self,
545+
self,
554546
statement: &T,
555547
params: &[&(dyn ToSql + Sync)],
556548
) -> Result<Option<Row>, Error>
@@ -561,7 +553,7 @@ impl GenericClient for Client {
561553
}
562554

563555
/// Like `Client::query_raw`.
564-
async fn query_raw<'b, T, I>(&self, statement: &T, params: I) -> Result<RowStream, Error>
556+
async fn query_raw<'b, T, I>(self, statement: &T, params: I) -> Result<RowStream, Error>
565557
where
566558
T: ?Sized + ToStatement + Sync + Send,
567559
I: IntoIterator<Item = &'b dyn ToSql> + Sync + Send,
@@ -571,21 +563,21 @@ impl GenericClient for Client {
571563
}
572564

573565
/// Like `Client::prepare`.
574-
async fn prepare(&mut self, query: &str) -> Result<Statement, Error> {
566+
async fn prepare(self, query: &str) -> Result<Statement, Error> {
575567
self.prepare(query).await
576568
}
577569

578570
/// Like `Client::prepare_typed`.
579571
async fn prepare_typed(
580-
&self,
572+
self,
581573
query: &str,
582574
parameter_types: &[Type],
583575
) -> Result<Statement, Error> {
584576
self.prepare_typed(query, parameter_types).await
585577
}
586578

587579
/// Like `Client::transaction`.
588-
async fn transaction(&mut self) -> Result<Transaction<'_>, Error> {
580+
async fn transaction<'b>(self) -> Result<Transaction<'b>, Error> {
589581
self.transaction().await
590582
}
591583
}

tokio-postgres/src/generic_client.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,25 @@ use async_trait::async_trait;
77
#[async_trait]
88
pub trait GenericClient {
99
/// Like `Client::execute`.
10-
async fn execute<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
10+
async fn execute<T>(self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
1111
where
1212
T: ?Sized + ToStatement + Sync + Send;
1313

1414
/// Like `Client::execute_raw`.
15-
async fn execute_raw<'b, I, T>(&self, statement: &T, params: I) -> Result<u64, Error>
15+
async fn execute_raw<'b, I, T>(self, statement: &T, params: I) -> Result<u64, Error>
1616
where
1717
T: ?Sized + ToStatement + Sync + Send,
1818
I: IntoIterator<Item = &'b dyn ToSql> + Sync + Send,
1919
I::IntoIter: ExactSizeIterator;
2020

2121
/// Like `Client::query`.
22-
async fn query<T>(
23-
&mut self,
24-
query: &T,
25-
params: &[&(dyn ToSql + Sync)],
26-
) -> Result<Vec<Row>, Error>
22+
async fn query<T>(self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Vec<Row>, Error>
2723
where
2824
T: ?Sized + ToStatement + Sync + Send;
2925

3026
/// Like `Client::query_one`.
3127
async fn query_one<T>(
32-
&self,
28+
self,
3329
statement: &T,
3430
params: &[&(dyn ToSql + Sync)],
3531
) -> Result<Row, Error>
@@ -38,30 +34,27 @@ pub trait GenericClient {
3834

3935
/// Like `Client::query_opt`.
4036
async fn query_opt<T>(
41-
&self,
37+
self,
4238
statement: &T,
4339
params: &[&(dyn ToSql + Sync)],
4440
) -> Result<Option<Row>, Error>
4541
where
4642
T: ?Sized + ToStatement + Sync + Send;
4743

4844
/// Like `Client::query_raw`.
49-
async fn query_raw<'b, T, I>(&self, statement: &T, params: I) -> Result<RowStream, Error>
45+
async fn query_raw<'b, T, I>(self, statement: &T, params: I) -> Result<RowStream, Error>
5046
where
5147
T: ?Sized + ToStatement + Sync + Send,
5248
I: IntoIterator<Item = &'b dyn ToSql> + Sync + Send,
5349
I::IntoIter: ExactSizeIterator;
5450

5551
/// Like `Client::prepare`.
56-
async fn prepare(&mut self, query: &str) -> Result<Statement, Error>;
52+
async fn prepare(self, query: &str) -> Result<Statement, Error>;
5753

5854
/// Like `Client::prepare_typed`.
59-
async fn prepare_typed(
60-
&self,
61-
query: &str,
62-
parameter_types: &[Type],
63-
) -> Result<Statement, Error>;
55+
async fn prepare_typed(self, query: &str, parameter_types: &[Type])
56+
-> Result<Statement, Error>;
6457

6558
/// Like `Client::transaction`.
66-
async fn transaction(&mut self) -> Result<Transaction<'_>, Error>;
59+
async fn transaction<'b>(self) -> Result<Transaction<'b>, Error>;
6760
}

tokio-postgres/src/transaction.rs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -288,17 +288,17 @@ impl<'a> Transaction<'a> {
288288
}
289289

290290
#[async_trait]
291-
impl crate::GenericClient for Transaction<'_> {
291+
impl crate::GenericClient for &Transaction<'_> {
292292
/// Like `Transaction::execute`.
293-
async fn execute<T>(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
293+
async fn execute<T>(self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<u64, Error>
294294
where
295295
T: ?Sized + ToStatement + Sync + Send,
296296
{
297297
self.execute(query, params).await
298298
}
299299

300300
/// Like `Transaction::execute_raw`.
301-
async fn execute_raw<'b, I, T>(&self, statement: &T, params: I) -> Result<u64, Error>
301+
async fn execute_raw<'b, I, T>(self, statement: &T, params: I) -> Result<u64, Error>
302302
where
303303
T: ?Sized + ToStatement + Sync + Send,
304304
I: IntoIterator<Item = &'b dyn ToSql> + Sync + Send,
@@ -308,23 +308,15 @@ impl crate::GenericClient for Transaction<'_> {
308308
}
309309

310310
/// Like `Transaction::query`.
311-
async fn query<T>(
312-
&mut self,
313-
query: &T,
314-
params: &[&(dyn ToSql + Sync)],
315-
) -> Result<Vec<Row>, Error>
311+
async fn query<T>(self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Vec<Row>, Error>
316312
where
317313
T: ?Sized + ToStatement + Sync + Send,
318314
{
319315
self.query(query, params).await
320316
}
321317

322318
/// Like `Transaction::query_one`.
323-
async fn query_one<T>(
324-
&self,
325-
statement: &T,
326-
params: &[&(dyn ToSql + Sync)],
327-
) -> Result<Row, Error>
319+
async fn query_one<T>(self, statement: &T, params: &[&(dyn ToSql + Sync)]) -> Result<Row, Error>
328320
where
329321
T: ?Sized + ToStatement + Sync + Send,
330322
{
@@ -333,7 +325,7 @@ impl crate::GenericClient for Transaction<'_> {
333325

334326
/// Like `Transaction::query_opt`.
335327
async fn query_opt<T>(
336-
&self,
328+
self,
337329
statement: &T,
338330
params: &[&(dyn ToSql + Sync)],
339331
) -> Result<Option<Row>, Error>
@@ -344,7 +336,7 @@ impl crate::GenericClient for Transaction<'_> {
344336
}
345337

346338
/// Like `Transaction::query_raw`.
347-
async fn query_raw<'b, T, I>(&self, statement: &T, params: I) -> Result<RowStream, Error>
339+
async fn query_raw<'b, T, I>(self, statement: &T, params: I) -> Result<RowStream, Error>
348340
where
349341
T: ?Sized + ToStatement + Sync + Send,
350342
I: IntoIterator<Item = &'b dyn ToSql> + Sync + Send,
@@ -354,13 +346,13 @@ impl crate::GenericClient for Transaction<'_> {
354346
}
355347

356348
/// Like `Transaction::prepare`.
357-
async fn prepare(&mut self, query: &str) -> Result<Statement, Error> {
349+
async fn prepare(self, query: &str) -> Result<Statement, Error> {
358350
self.prepare(query).await
359351
}
360352

361353
/// Like `Transaction::prepare_typed`.
362354
async fn prepare_typed(
363-
&self,
355+
self,
364356
query: &str,
365357
parameter_types: &[Type],
366358
) -> Result<Statement, Error> {
@@ -369,7 +361,7 @@ impl crate::GenericClient for Transaction<'_> {
369361

370362
/// Like `Transaction::transaction`.
371363
#[allow(clippy::needless_lifetimes)]
372-
async fn transaction<'a>(&'a mut self) -> Result<Transaction<'a>, Error> {
364+
async fn transaction<'b>(self) -> Result<Transaction<'b>, Error> {
373365
self.transaction().await
374366
}
375367
}

0 commit comments

Comments
 (0)