@@ -165,13 +165,8 @@ pub fn cancel_query<T>(params: T,
165
165
let params = try!( params. into_connect_params ( ) . map_err ( ConnectError :: ConnectParams ) ) ;
166
166
let mut socket = try!( priv_io:: initialize_stream ( & params, tls) ) ;
167
167
168
- let message = frontend:: CancelRequest {
169
- process_id : data. process_id ,
170
- secret_key : data. secret_key ,
171
- } ;
172
168
let mut buf = vec ! [ ] ;
173
- try!( frontend:: Message :: write ( & message, & mut buf) ) ;
174
-
169
+ frontend:: cancel_request ( data. process_id , data. secret_key , & mut buf) ;
175
170
try!( socket. write_all ( & buf) ) ;
176
171
try!( socket. flush ( ) ) ;
177
172
@@ -516,23 +511,31 @@ impl InnerConnection {
516
511
debug ! ( "executing statement {} with parameters: {:?}" ,
517
512
stmt_name,
518
513
params) ;
519
- let mut values = vec ! [ ] ;
520
- for ( param, ty) in params. iter ( ) . zip ( param_types) {
521
- let mut buf = vec ! [ ] ;
522
- match try!( param. to_sql_checked ( ty, & mut buf, & SessionInfo :: new ( self ) )
523
- . map_err ( Error :: Conversion ) ) {
524
- IsNull :: Yes => values. push ( None ) ,
525
- IsNull :: No => values. push ( Some ( buf) ) ,
514
+
515
+ {
516
+ let info = SessionInfo :: new ( & self . parameters ) ;
517
+ let r = self . stream . write_message2 ( |buf| {
518
+ frontend:: bind ( portal_name,
519
+ & stmt_name,
520
+ Some ( 1 ) ,
521
+ params. iter ( ) . zip ( param_types) ,
522
+ |( param, ty) , buf| {
523
+ match param. to_sql_checked ( ty, buf, & info) {
524
+ Ok ( IsNull :: Yes ) => Ok ( postgres_protocol:: IsNull :: Yes ) ,
525
+ Ok ( IsNull :: No ) => Ok ( postgres_protocol:: IsNull :: No ) ,
526
+ Err ( e) => Err ( e) ,
527
+ }
528
+ } ,
529
+ Some ( 1 ) ,
530
+ buf)
531
+ } ) ;
532
+ match r {
533
+ Ok ( ( ) ) => { }
534
+ Err ( frontend:: BindError :: Conversion ( e) ) => return Err ( Error :: Conversion ( e) ) ,
535
+ Err ( frontend:: BindError :: Serialization ( e) ) => return Err ( Error :: Io ( e) ) ,
526
536
}
527
537
}
528
538
529
- try!( self . stream . write_message ( & frontend:: Bind {
530
- portal : portal_name,
531
- statement : & stmt_name,
532
- formats : & [ 1 ] ,
533
- values : & values,
534
- result_formats : & [ 1 ] ,
535
- } ) ) ;
536
539
try!( self . stream . write_message ( & frontend:: Execute {
537
540
portal : portal_name,
538
541
max_rows : row_limit,
@@ -592,10 +595,7 @@ impl InnerConnection {
592
595
}
593
596
594
597
fn close_statement ( & mut self , name : & str , type_ : u8 ) -> Result < ( ) > {
595
- try!( self . stream . write_message ( & frontend:: Close {
596
- variant : type_,
597
- name : name,
598
- } ) ) ;
598
+ try!( self . stream . write_message2 ( |buf| frontend:: close ( type_, name, buf) ) ) ;
599
599
try!( self . stream . write_message ( & frontend:: Sync ) ) ;
600
600
try!( self . stream . flush ( ) ) ;
601
601
let resp = match try!( self . read_message ( ) ) {
@@ -662,7 +662,7 @@ impl InnerConnection {
662
662
let row = rows. pop_front ( ) . unwrap ( ) ;
663
663
664
664
let ( name, type_, elem_oid, rngsubtype, basetype, schema, relid) = {
665
- let ctx = SessionInfo :: new ( self ) ;
665
+ let ctx = SessionInfo :: new ( & self . parameters ) ;
666
666
let name = try!( String :: from_sql ( & Type :: Name , & mut & * * row[ 0 ] . as_ref ( ) . unwrap ( ) , & ctx)
667
667
. map_err ( Error :: Conversion ) ) ;
668
668
let type_ = try!( i8:: from_sql ( & Type :: Char , & mut & * * row[ 1 ] . as_ref ( ) . unwrap ( ) , & ctx)
@@ -740,7 +740,7 @@ impl InnerConnection {
740
740
let mut rows = VecDeque :: new ( ) ;
741
741
try!( self . read_rows ( & mut rows) ) ;
742
742
743
- let ctx = SessionInfo :: new ( self ) ;
743
+ let ctx = SessionInfo :: new ( & self . parameters ) ;
744
744
let mut variants = vec ! [ ] ;
745
745
for row in rows {
746
746
variants. push ( try!( String :: from_sql ( & Type :: Name , & mut & * * row[ 0 ] . as_ref ( ) . unwrap ( ) , & ctx)
@@ -776,7 +776,7 @@ impl InnerConnection {
776
776
let mut fields = vec ! [ ] ;
777
777
for row in rows {
778
778
let ( name, type_) = {
779
- let ctx = SessionInfo :: new ( self ) ;
779
+ let ctx = SessionInfo :: new ( & self . parameters ) ;
780
780
let name =
781
781
try!( String :: from_sql ( & Type :: Name , & mut & * * row[ 0 ] . as_ref ( ) . unwrap ( ) , & ctx)
782
782
. map_err ( Error :: Conversion ) ) ;
@@ -1316,7 +1316,7 @@ trait LazyRowsNew<'trans, 'stmt> {
1316
1316
}
1317
1317
1318
1318
trait SessionInfoNew < ' a > {
1319
- fn new ( conn : & ' a InnerConnection ) -> SessionInfo < ' a > ;
1319
+ fn new ( params : & ' a HashMap < String , String > ) -> SessionInfo < ' a > ;
1320
1320
}
1321
1321
1322
1322
trait StatementInternals < ' conn > {
0 commit comments