@@ -97,9 +97,7 @@ pub trait LargeObjectTransactionExt {
9797impl < ' conn > LargeObjectTransactionExt for Transaction < ' conn > {
9898 fn open_large_object < ' a > ( & ' a self , oid : Oid , mode : Mode ) -> Result < LargeObject < ' a > > {
9999 let version = self . connection ( ) . parameter ( "server_version" ) . unwrap ( ) ;
100- let mut version = version. split ( '.' ) ;
101- let major: i32 = version. next ( ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
102- let minor: i32 = version. next ( ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
100+ let ( major, minor) = parse_version ( & version) ;
103101 let has_64 = major > 9 || ( major == 9 && minor >= 3 ) ;
104102
105103 let stmt = self . prepare_cached ( "SELECT pg_catalog.lo_open($1, $2)" ) ?;
@@ -264,12 +262,20 @@ impl<'a> io::Seek for LargeObject<'a> {
264262 }
265263}
266264
265+ fn parse_version ( version : & str ) -> ( i32 , i32 ) {
266+ let version = version. split ( ' ' ) . next ( ) . unwrap ( ) ;
267+ let mut version = version. split ( '.' ) ;
268+ let major: i32 = version. next ( ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
269+ let minor: i32 = version. next ( ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
270+ ( major, minor)
271+ }
272+
267273#[ cfg( test) ]
268274mod test {
269275 use postgres:: { Connection , TlsMode } ;
270276 use postgres:: error:: UNDEFINED_OBJECT ;
271277
272- use { LargeObjectExt , LargeObjectTransactionExt , Mode } ;
278+ use { LargeObjectExt , LargeObjectTransactionExt , Mode , parse_version } ;
273279
274280 #[ test]
275281 fn test_create_delete ( ) {
@@ -379,4 +385,13 @@ mod test {
379385 lo. read_to_end ( & mut buf) . unwrap ( ) ;
380386 assert_eq ! ( buf, b"hello\0 \0 \0 \0 \0 " ) ;
381387 }
388+
389+ #[ test]
390+ fn test_parse_version ( ) {
391+ let version = parse_version ( "10.3 (Debian 10.3-1.pgdg90+1)" ) ;
392+ assert_eq ! ( version, ( 10 , 3 ) ) ;
393+
394+ let version = parse_version ( "9.5" ) ;
395+ assert_eq ! ( version, ( 9 , 5 ) ) ;
396+ }
382397}
0 commit comments