@@ -164,14 +164,14 @@ impl Table for KipTable {
164164 }
165165
166166 fn append ( & mut self , tuple : Tuple ) -> Result < ( ) , StorageError > {
167- let ( key, value) = self . table_codec . encode_tuple ( & tuple) ;
167+ let ( key, value) = self . table_codec . encode_tuple ( & tuple) ? ;
168168 self . tx . set ( key, value) ;
169169
170170 Ok ( ( ) )
171171 }
172172
173173 fn delete ( & mut self , tuple_id : TupleId ) -> Result < ( ) , StorageError > {
174- let key = self . table_codec . encode_tuple_key ( & tuple_id) ;
174+ let key = self . table_codec . encode_tuple_key ( & tuple_id) ? ;
175175 self . tx . remove ( & key) ?;
176176
177177 Ok ( ( ) )
@@ -205,33 +205,31 @@ impl Transaction for KipTraction<'_> {
205205 }
206206 }
207207
208- self . iter
209- . try_next ( ) ?
210- . and_then ( |( key, bytes) | {
211- bytes. and_then ( |value| {
212- self . table_codec . decode_tuple ( & key, & value)
213- . map ( |tuple| {
214- let projection_len = self . projections . len ( ) ;
215-
216- let mut columns = Vec :: with_capacity ( projection_len) ;
217- let mut values = Vec :: with_capacity ( projection_len) ;
218-
219- for expr in self . projections . iter ( ) {
220- values. push ( expr. eval_column ( & tuple) ?) ;
221- columns. push ( expr. output_columns ( & tuple) ) ;
222- }
223-
224- self . limit = self . limit . map ( |num| num - 1 ) ;
225-
226- Ok ( Tuple {
227- id : tuple. id ,
228- columns,
229- values,
230- } )
231- } )
232- } )
233- } )
234- . transpose ( )
208+ while let Some ( item) = self . iter . try_next ( ) ? {
209+ if let ( _, Some ( value) ) = item {
210+ let tuple = self . table_codec . decode_tuple ( & value) ;
211+
212+ let projection_len = self . projections . len ( ) ;
213+
214+ let mut columns = Vec :: with_capacity ( projection_len) ;
215+ let mut values = Vec :: with_capacity ( projection_len) ;
216+
217+ for expr in self . projections . iter ( ) {
218+ values. push ( expr. eval_column ( & tuple) ?) ;
219+ columns. push ( expr. output_columns ( & tuple) ) ;
220+ }
221+
222+ self . limit = self . limit . map ( |num| num - 1 ) ;
223+
224+ return Ok ( Some ( Tuple {
225+ id : tuple. id ,
226+ columns,
227+ values,
228+ } ) )
229+ }
230+ }
231+
232+ Ok ( None )
235233 }
236234}
237235
@@ -246,6 +244,7 @@ mod test {
246244 use crate :: storage:: { Storage , StorageError , Transaction , Table } ;
247245 use crate :: storage:: memory:: test:: data_filling;
248246 use crate :: types:: LogicalType ;
247+ use crate :: types:: value:: DataValue ;
249248
250249 #[ tokio:: test]
251250 async fn test_in_kipdb_storage_works_with_data ( ) -> Result < ( ) , StorageError > {
@@ -282,7 +281,7 @@ mod test {
282281 ) ?;
283282
284283 let option_1 = tx. next_tuple ( ) ?;
285- assert_eq ! ( option_1. unwrap( ) . id, Some ( 1 ) ) ;
284+ assert_eq ! ( option_1. unwrap( ) . id, Some ( Arc :: new ( DataValue :: Int32 ( Some ( 2 ) ) ) ) ) ;
286285
287286 let option_2 = tx. next_tuple ( ) ?;
288287 assert_eq ! ( option_2, None ) ;
0 commit comments