@@ -123,7 +123,6 @@ impl Connection {
123
123
124
124
#[ derive( Debug ) ]
125
125
pub struct Query {
126
- res : xdb_res_t ,
127
126
ptr : * mut xdb_res_t ,
128
127
columns : Columns ,
129
128
}
@@ -141,28 +140,27 @@ unsafe impl Sync for Query {}
141
140
142
141
impl Query {
143
142
pub ( crate ) unsafe fn from_res ( ptr : * mut xdb_res_t ) -> Result < Self > {
144
- let res = * ptr;
145
- if res . errcode != xdb_errno_e_XDB_OK as u16 {
143
+ let code = xdb_errcode ( ptr) ;
144
+ if code != xdb_errno_e_XDB_OK {
146
145
let msg = CStr :: from_ptr ( xdb_errmsg ( ptr) ) . to_str ( ) ?. to_string ( ) ;
147
- return Err ( Error :: Query ( res . errcode , msg) ) ;
146
+ return Err ( Error :: Query ( code , msg) ) ;
148
147
}
149
148
Ok ( Self {
150
- res,
151
149
ptr,
152
150
columns : Columns :: from_res ( ptr) ,
153
151
} )
154
152
}
155
153
156
154
pub fn column_count ( & self ) -> usize {
157
- self . res . col_count as usize
155
+ unsafe { xdb_column_count ( self . ptr ) as usize }
158
156
}
159
157
160
158
pub fn row_count ( & self ) -> usize {
161
- self . res . row_count as usize
159
+ unsafe { xdb_row_count ( self . ptr ) as usize }
162
160
}
163
161
164
162
pub fn affected_rows ( & self ) -> u64 {
165
- self . res . affected_rows
163
+ unsafe { xdb_affected_rows ( self . ptr ) as u64 }
166
164
}
167
165
168
166
pub fn columns ( & self ) -> & Columns {
@@ -179,7 +177,7 @@ impl Query {
179
177
self . fetch_row ( ) . map ( |row| row. deserialize ( ) )
180
178
}
181
179
182
- pub fn fetch_rows_as < ' a , T : DeserializeOwned > ( & mut self ) -> Result < Vec < T > , DeError > {
180
+ pub fn fetch_rows_as < T : DeserializeOwned > ( & mut self ) -> Result < Vec < T > , DeError > {
183
181
let mut rows = Vec :: with_capacity ( self . row_count ( ) ) ;
184
182
while let Some ( row) = self . fetch_row ( ) {
185
183
rows. push ( row. deserialize ( ) ?) ;
@@ -189,14 +187,14 @@ impl Query {
189
187
190
188
fn inner_fetch_row_values ( & mut self ) -> Option < Vec < Value < ' _ > > > {
191
189
unsafe {
192
- let row = xdb_fetch_row ( self . ptr ) ;
190
+ let row: * mut c_void = xdb_fetch_row ( self . ptr ) ;
193
191
if row. is_null ( ) {
194
192
return None ;
195
193
}
196
- let mut values = Vec :: with_capacity ( self . column_count ( ) ) ;
197
- let iter = from_raw_parts ( row, self . column_count ( ) ) . iter ( ) . enumerate ( ) ;
194
+ let count = self . columns . len ( ) ;
195
+ let mut values = Vec :: with_capacity ( count) ;
196
+ let iter = from_raw_parts ( row, count) . iter ( ) . enumerate ( ) ;
198
197
for ( i, ptr) in iter {
199
- let ptr = * ptr as * const c_void ;
200
198
values. push ( Value :: from_ptr ( ptr, self . columns . datatype ( i) ) ) ;
201
199
}
202
200
Some ( values)
0 commit comments