@@ -18,7 +18,6 @@ use arrow::ffi::{ArrowArray, FFI_ArrowArray, FFI_ArrowSchema};
1818pub struct RawStatement {
1919 ptr : ffi:: duckdb_prepared_statement ,
2020 result : Option < ffi:: duckdb_arrow > ,
21- c_schema : Option < * const FFI_ArrowSchema > ,
2221 schema : Option < SchemaRef > ,
2322}
2423
@@ -28,7 +27,6 @@ impl RawStatement {
2827 RawStatement {
2928 ptr : stmt,
3029 result : None ,
31- c_schema : None ,
3230 schema : None ,
3331 }
3432 }
@@ -60,11 +58,6 @@ impl RawStatement {
6058 let ( mut arrays, mut schema) = ArrowArray :: into_raw ( ArrowArray :: empty ( ) ) ;
6159 let schema = & mut schema;
6260 let arrays = & mut arrays;
63- // TODO: Can we reuse schema?
64- // destroy schema as we don't need it...
65- // Arc::from_raw(schema);
66- // TODO: use this after https://github.com/apache/arrow-rs/pull/612
67- // let mut arrays = Arc::into_raw(Arc::new(FFI_ArrowArray::empty()));
6861 if ffi:: duckdb_query_arrow_array ( self . result_unwrap ( ) , arrays as * mut _ as * mut * mut c_void )
6962 != ffi:: DuckDBSuccess
7063 {
@@ -104,8 +97,8 @@ impl RawStatement {
10497 }
10598
10699 #[ inline]
107- pub fn schema ( & self ) -> & SchemaRef {
108- self . schema . as_ref ( ) . unwrap ( )
100+ pub fn schema ( & self ) -> SchemaRef {
101+ self . schema . clone ( ) . unwrap ( )
109102 }
110103
111104 #[ inline]
@@ -161,14 +154,13 @@ impl RawStatement {
161154
162155 let rows_changed = ffi:: duckdb_arrow_rows_changed ( out) ;
163156 let mut c_schema = Arc :: into_raw ( Arc :: new ( FFI_ArrowSchema :: empty ( ) ) ) ;
164- let schema = & mut c_schema;
165- let rc = ffi:: duckdb_query_arrow_schema ( out, schema as * mut _ as * mut * mut c_void ) ;
157+ let rc = ffi:: duckdb_query_arrow_schema ( out, & mut c_schema as * mut _ as * mut * mut c_void ) ;
166158 if rc != ffi:: DuckDBSuccess {
167159 Arc :: from_raw ( c_schema) ;
168160 result_from_duckdb_arrow ( rc, out) ?;
169161 }
170162 self . schema = Some ( Arc :: new ( Schema :: try_from ( & * c_schema) . unwrap ( ) ) ) ;
171- self . c_schema = Some ( c_schema) ;
163+ Arc :: from_raw ( c_schema) ;
172164
173165 self . result = Some ( out) ;
174166 Ok ( rows_changed as usize )
@@ -178,12 +170,6 @@ impl RawStatement {
178170 #[ inline]
179171 pub fn reset_result ( & mut self ) {
180172 self . schema = None ;
181- if self . c_schema . is_some ( ) {
182- unsafe {
183- Arc :: from_raw ( self . c_schema . unwrap ( ) ) ;
184- }
185- self . c_schema = None ;
186- }
187173 if self . result . is_some ( ) {
188174 unsafe {
189175 ffi:: duckdb_destroy_arrow ( & mut self . result_unwrap ( ) ) ;
0 commit comments