@@ -5,17 +5,23 @@ use std::time::Duration;
55
66use crate :: bindings;
77use crate :: error:: Error ;
8-
8+ use crate :: error :: Result ;
99#[ derive( Clone ) ]
10- pub struct QueryResult ( pub ( crate ) * mut bindings:: local_result_v2 ) ;
10+ pub struct QueryResult {
11+ inner : * mut bindings:: local_result_v2 ,
12+ }
1113
1214impl QueryResult {
13- pub fn data_utf8 ( & self ) -> Result < String , Error > {
14- String :: from_utf8 ( self . data_ref ( ) . to_vec ( ) )
15- . map_err ( |e| Error :: NonUtf8Sequence ( e. to_string ( ) ) )
15+ pub ( crate ) fn new ( inner : * mut bindings:: local_result_v2 ) -> Self {
16+ Self { inner }
1617 }
18+ pub fn data_utf8 ( & self ) -> Result < String > {
19+ let buf = self . data_ref ( ) ;
1720
18- pub fn data_utf8_lossy < ' a > ( & ' a self ) -> Cow < ' a , str > {
21+ String :: from_utf8 ( buf. to_vec ( ) ) . map_err ( Error :: NonUtf8Sequence )
22+ }
23+
24+ pub fn data_utf8_lossy ( & self ) -> Cow < str > {
1925 String :: from_utf8_lossy ( self . data_ref ( ) )
2026 }
2127
@@ -24,30 +30,37 @@ impl QueryResult {
2430 }
2531
2632 pub fn data_ref ( & self ) -> & [ u8 ] {
27- let buf = unsafe { ( * self . 0 ) . buf } ;
28- let len = unsafe { ( * self . 0 ) . len } ;
33+ let inner = self . inner ;
34+ let buf = unsafe { ( * inner) . buf } ;
35+ let len = unsafe { ( * inner) . len } ;
2936 let bytes: & [ u8 ] = unsafe { slice:: from_raw_parts ( buf as * const u8 , len) } ;
3037 bytes
3138 }
3239
3340 pub fn rows_read ( & self ) -> u64 {
34- ( unsafe { * self . 0 } ) . rows_read
41+ let inner = self . inner ;
42+ unsafe { * inner } . rows_read
3543 }
3644
3745 pub fn bytes_read ( & self ) -> u64 {
38- unsafe { ( * self . 0 ) . bytes_read }
46+ let inner = self . inner ;
47+ unsafe { * inner } . bytes_read
3948 }
4049
4150 pub fn elapsed ( & self ) -> Duration {
42- let elapsed = unsafe { ( * self . 0 ) . elapsed } ;
51+ let elapsed = unsafe { ( * self . inner ) . elapsed } ;
4352 Duration :: from_secs_f64 ( elapsed)
4453 }
4554
46- pub ( crate ) fn check_error ( self ) -> Result < Self , Error > {
47- let err_ptr = unsafe { ( * self . 0 ) . error_message } ;
55+ pub ( crate ) fn check_error ( self ) -> Result < Self > {
56+ self . check_error_ref ( ) ?;
57+ Ok ( self )
58+ }
59+ pub ( crate ) fn check_error_ref ( & self ) -> Result < ( ) > {
60+ let err_ptr = unsafe { ( * self . inner ) . error_message } ;
4861
4962 if err_ptr. is_null ( ) {
50- return Ok ( self ) ;
63+ return Ok ( ( ) ) ;
5164 }
5265
5366 Err ( Error :: QueryError ( unsafe {
@@ -58,6 +71,6 @@ impl QueryResult {
5871
5972impl Drop for QueryResult {
6073 fn drop ( & mut self ) {
61- unsafe { bindings:: free_result_v2 ( self . 0 ) } ;
74+ unsafe { bindings:: free_result_v2 ( self . inner ) } ;
6275 }
6376}
0 commit comments