@@ -562,12 +562,11 @@ impl InnerPostgresConnection {
562
562
let stmt_name = format ! ( "statement_{}" , self . next_stmt_id) ;
563
563
self . next_stmt_id += 1 ;
564
564
565
- let types = [ ] ;
566
565
try_pg ! ( self . write_messages( [
567
566
Parse {
568
567
name: stmt_name,
569
568
query: query,
570
- param_types: types
569
+ param_types: [ ]
571
570
} ,
572
571
Describe {
573
572
variant: 'S' as u8 ,
@@ -606,27 +605,8 @@ impl InnerPostgresConnection {
606
605
try!( self . wait_for_ready ( ) ) ;
607
606
608
607
// now that the connection is ready again, get unknown type names
609
- for param in param_types. mut_iter ( ) {
610
- match * param {
611
- PgUnknownType { oid, .. } =>
612
- * param = PgUnknownType {
613
- name : try!( self . get_type_name ( oid) ) ,
614
- oid : oid
615
- } ,
616
- _ => { }
617
- }
618
- }
619
-
620
- for desc in result_desc. mut_iter ( ) {
621
- match desc. ty {
622
- PgUnknownType { oid, .. } =>
623
- desc. ty = PgUnknownType {
624
- name : try!( self . get_type_name ( oid) ) ,
625
- oid : oid
626
- } ,
627
- _ => { }
628
- }
629
- }
608
+ try!( self . set_type_names ( param_types. mut_iter ( ) ) ) ;
609
+ try!( self . set_type_names ( result_desc. mut_iter ( ) . map ( |d| & mut d. ty ) ) ) ;
630
610
631
611
Ok ( PostgresStatement {
632
612
conn : conn,
@@ -638,8 +618,16 @@ impl InnerPostgresConnection {
638
618
} )
639
619
}
640
620
641
- fn is_desynchronized ( & self ) -> bool {
642
- self . desynchronized
621
+ fn set_type_names < ' a , I : Iterator < & ' a mut PostgresType > > ( & mut self , mut it : I )
622
+ -> Result < ( ) , PostgresError > {
623
+ for ty in it {
624
+ match * ty {
625
+ PgUnknownType { oid, ref mut name } =>
626
+ * name = try!( self . get_type_name ( oid) ) ,
627
+ _ => { }
628
+ }
629
+ }
630
+ Ok ( ( ) )
643
631
}
644
632
645
633
fn get_type_name ( & mut self , oid : Oid ) -> Result < ~str , PostgresError > {
@@ -654,6 +642,10 @@ impl InnerPostgresConnection {
654
642
Ok ( name)
655
643
}
656
644
645
+ fn is_desynchronized ( & self ) -> bool {
646
+ self . desynchronized
647
+ }
648
+
657
649
fn wait_for_ready ( & mut self ) -> Result < ( ) , PostgresError > {
658
650
match try_pg ! ( self . read_message( ) ) {
659
651
ReadyForQuery { .. } => Ok ( ( ) ) ,
@@ -1045,14 +1037,14 @@ impl<'conn> PostgresStatement<'conn> {
1045
1037
1046
1038
fn inner_execute ( & self , portal_name : & str , row_limit : uint , params : & [ & ToSql ] )
1047
1039
-> Result < ( ) , PostgresError > {
1048
- let mut formats = Vec :: new ( ) ;
1049
- let mut values = Vec :: new ( ) ;
1050
1040
if self . param_types . len ( ) != params. len ( ) {
1051
1041
return Err ( PgWrongParamCount {
1052
1042
expected : self . param_types . len ( ) ,
1053
1043
actual : params. len ( ) ,
1054
1044
} ) ;
1055
1045
}
1046
+ let mut formats = Vec :: new ( ) ;
1047
+ let mut values = Vec :: new ( ) ;
1056
1048
for ( & param, ty) in params. iter ( ) . zip ( self . param_types . iter ( ) ) {
1057
1049
let ( format, value) = try!( param. to_sql ( ty) ) ;
1058
1050
formats. push ( format as i16 ) ;
@@ -1404,11 +1396,10 @@ pub trait RowIndex: Clone {
1404
1396
impl RowIndex for uint {
1405
1397
#[ inline]
1406
1398
fn idx ( & self , stmt : & PostgresStatement ) -> Option < uint > {
1407
- let idx = * self - 1 ;
1408
- if idx >= stmt. result_desc . len ( ) {
1399
+ if * self == 0 || * self > stmt. result_desc . len ( ) {
1409
1400
None
1410
1401
} else {
1411
- Some ( idx )
1402
+ Some ( * self - 1 )
1412
1403
}
1413
1404
}
1414
1405
}
0 commit comments