@@ -97,9 +97,7 @@ pub trait LargeObjectTransactionExt {
97
97
impl < ' conn > LargeObjectTransactionExt for Transaction < ' conn > {
98
98
fn open_large_object < ' a > ( & ' a self , oid : Oid , mode : Mode ) -> Result < LargeObject < ' a > > {
99
99
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) ;
103
101
let has_64 = major > 9 || ( major == 9 && minor >= 3 ) ;
104
102
105
103
let stmt = self . prepare_cached ( "SELECT pg_catalog.lo_open($1, $2)" ) ?;
@@ -264,12 +262,20 @@ impl<'a> io::Seek for LargeObject<'a> {
264
262
}
265
263
}
266
264
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
+
267
273
#[ cfg( test) ]
268
274
mod test {
269
275
use postgres:: { Connection , TlsMode } ;
270
276
use postgres:: error:: UNDEFINED_OBJECT ;
271
277
272
- use { LargeObjectExt , LargeObjectTransactionExt , Mode } ;
278
+ use { LargeObjectExt , LargeObjectTransactionExt , Mode , parse_version } ;
273
279
274
280
#[ test]
275
281
fn test_create_delete ( ) {
@@ -379,4 +385,13 @@ mod test {
379
385
lo. read_to_end ( & mut buf) . unwrap ( ) ;
380
386
assert_eq ! ( buf, b"hello\0 \0 \0 \0 \0 " ) ;
381
387
}
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
+ }
382
397
}
0 commit comments