Skip to content

Commit ba1d9d1

Browse files
committed
Split out stmt
1 parent a03e770 commit ba1d9d1

File tree

3 files changed

+79
-35
lines changed

3 files changed

+79
-35
lines changed

postgres-tokio/src/lib.rs

+21-34
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use postgres_shared::RowData;
2323
use std::collections::HashMap;
2424
use std::fmt;
2525
use std::io;
26-
use std::mem;
2726
use std::sync::Arc;
2827
use std::sync::mpsc::{self, Sender, Receiver};
2928
use tokio_core::reactor::Handle;
@@ -33,6 +32,7 @@ pub use postgres_shared::{params, Column, RowIndex};
3332

3433
use error::{ConnectError, Error, DbError, SqlState};
3534
use params::{ConnectParams, IntoConnectParams};
35+
use stmt::Statement;
3636
use stream::PostgresStream;
3737
use tls::Handshake;
3838
use transaction::Transaction;
@@ -41,6 +41,7 @@ use rows::Row;
4141

4242
pub mod error;
4343
pub mod rows;
44+
pub mod stmt;
4445
mod stream;
4546
pub mod tls;
4647
pub mod transaction;
@@ -878,19 +879,17 @@ impl Connection {
878879
let name = format!("s{}", id);
879880
self.raw_prepare(&name, query)
880881
.map(|(params, columns, conn)| {
881-
let stmt = Statement {
882-
close_sender: conn.0.close_sender.clone(),
883-
name: name,
884-
params: params,
885-
columns: Arc::new(columns),
886-
};
882+
let stmt = Statement::new(conn.0.close_sender.clone(),
883+
name,
884+
params,
885+
Arc::new(columns));
887886
(stmt, conn)
888887
})
889888
.boxed()
890889
}
891890

892891
pub fn execute(self, statement: &Statement, params: &[&ToSql]) -> BoxFuture<(u64, Connection), Error> {
893-
self.raw_execute(&statement.name, "", &statement.params, params)
892+
self.raw_execute(statement.name(), "", statement.parameters(), params)
894893
.and_then(|conn| conn.finish_execute())
895894
.boxed()
896895
}
@@ -899,8 +898,8 @@ impl Connection {
899898
statement: &Statement,
900899
params: &[&ToSql])
901900
-> BoxStateStream<Row, Connection, Error> {
902-
let columns = statement.columns.clone();
903-
self.raw_execute(&statement.name, "", &statement.params, params)
901+
let columns = statement.columns_arc().clone();
902+
self.raw_execute(statement.name(), "", statement.parameters(), params)
904903
.map(|c| c.read_rows().map(move |r| Row::new(columns.clone(), r)))
905904
.flatten_state_stream()
906905
.boxed()
@@ -926,30 +925,6 @@ impl Connection {
926925
}
927926
}
928927

929-
pub struct Statement {
930-
close_sender: Sender<(u8, String)>,
931-
name: String,
932-
params: Vec<Type>,
933-
columns: Arc<Vec<Column>>,
934-
}
935-
936-
impl Drop for Statement {
937-
fn drop(&mut self) {
938-
let name = mem::replace(&mut self.name, String::new());
939-
let _ = self.close_sender.send((b'S', name));
940-
}
941-
}
942-
943-
impl Statement {
944-
pub fn parameters(&self) -> &[Type] {
945-
&self.params
946-
}
947-
948-
pub fn columns(&self) -> &[Column] {
949-
&self.columns
950-
}
951-
}
952-
953928
fn connect_err(fields: &mut ErrorFields) -> ConnectError {
954929
match DbError::new(fields) {
955930
Ok(err) => ConnectError::Db(Box::new(err)),
@@ -967,6 +942,18 @@ trait RowNew {
967942
fn new(columns: Arc<Vec<Column>>, data: RowData) -> Row;
968943
}
969944

945+
trait StatementNew {
946+
fn new(close_sender: Sender<(u8, String)>,
947+
name: String,
948+
params: Vec<Type>,
949+
columns: Arc<Vec<Column>>)
950+
-> Statement;
951+
952+
fn columns_arc(&self) -> &Arc<Vec<Column>>;
953+
954+
fn name(&self) -> &str;
955+
}
956+
970957
trait TransactionNew {
971958
fn new(c: Connection) -> Transaction;
972959
}

postgres-tokio/src/stmt.rs

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use std::mem;
2+
use std::sync::Arc;
3+
use std::sync::mpsc::Sender;
4+
5+
#[doc(inline)]
6+
pub use postgres_shared::Column;
7+
8+
use StatementNew;
9+
use types::Type;
10+
11+
pub struct Statement {
12+
close_sender: Sender<(u8, String)>,
13+
name: String,
14+
params: Vec<Type>,
15+
columns: Arc<Vec<Column>>,
16+
}
17+
18+
impl StatementNew for Statement {
19+
fn new(close_sender: Sender<(u8, String)>,
20+
name: String,
21+
params: Vec<Type>,
22+
columns: Arc<Vec<Column>>)
23+
-> Statement {
24+
Statement {
25+
close_sender: close_sender,
26+
name: name,
27+
params: params,
28+
columns: columns,
29+
}
30+
}
31+
32+
fn columns_arc(&self) -> &Arc<Vec<Column>> {
33+
&self.columns
34+
}
35+
36+
fn name(&self) -> &str {
37+
&self.name
38+
}
39+
}
40+
41+
impl Drop for Statement {
42+
fn drop(&mut self) {
43+
let name = mem::replace(&mut self.name, String::new());
44+
let _ = self.close_sender.send((b'S', name));
45+
}
46+
}
47+
48+
impl Statement {
49+
pub fn parameters(&self) -> &[Type] {
50+
&self.params
51+
}
52+
53+
pub fn columns(&self) -> &[Column] {
54+
&self.columns
55+
}
56+
}

postgres-tokio/src/transaction.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use futures::{Future, BoxFuture};
22
use futures_state_stream::{StateStream, BoxStateStream};
33

4-
use {Connection, Statement, TransactionNew};
4+
use {Connection, TransactionNew};
55
use error::Error;
6+
use stmt::Statement;
67
use types::ToSql;
78
use rows::Row;
89

0 commit comments

Comments
 (0)