@@ -375,9 +375,8 @@ pub fn read_index(path: &str) -> io::Result<Vec<(String, u64)>> {
375375 Ok ( index)
376376}
377377
378- pub fn merge_jstables ( tables : & [ JSTable ] ) -> JSTable {
379- let mut sorted_tables: Vec < & JSTable > = tables. iter ( ) . collect ( ) ;
380- sorted_tables. sort_by_key ( |t| t. timestamp ) ;
378+ pub fn merge_jstables ( mut tables : Vec < JSTable > ) -> JSTable {
379+ tables. sort_by_key ( |t| t. timestamp ) ;
381380
382381 let mut merged_schema = Schema :: new ( InstanceType :: Object ) ;
383382 let mut merged_documents = BTreeMap :: new ( ) ;
@@ -389,14 +388,12 @@ pub fn merge_jstables(tables: &[JSTable]) -> JSTable {
389388 String :: new ( )
390389 } ;
391390
392- for table in sorted_tables {
391+ for mut table in tables {
393392 if table. timestamp > max_timestamp {
394393 max_timestamp = table. timestamp ;
395394 }
396- merged_schema. merge ( table. schema . clone ( ) ) ;
397- for ( id, doc) in & table. documents {
398- merged_documents. insert ( id. clone ( ) , doc. clone ( ) ) ;
399- }
395+ merged_schema. merge ( table. schema ) ;
396+ merged_documents. append ( & mut table. documents ) ;
400397 }
401398
402399 // Filter nulls (tombstones) - Value::Null matches jsonb Null
@@ -552,7 +549,7 @@ mod tests {
552549 let t2 = JSTable :: new ( 200 , "test_col" . to_string ( ) , schema. clone ( ) , docs2) ;
553550
554551 // Case 1: t1 (older) then t2 (newer) in the slice
555- let merged = merge_jstables ( & [ t1, t2] ) ;
552+ let merged = merge_jstables ( vec ! [ t1, t2] ) ;
556553 assert_eq ! (
557554 jsonb_to_serde( merged. documents. get( "id1" ) . unwrap( ) ) ,
558555 json!( { "v" : 2 } )
@@ -569,7 +566,7 @@ mod tests {
569566 docs2. insert ( "id1" . to_string ( ) , serde_to_jsonb ( json ! ( { "v" : 2 } ) ) ) ;
570567 let t2b = JSTable :: new ( 200 , "test_col" . to_string ( ) , schema. clone ( ) , docs2) ;
571568
572- let merged_reverse = merge_jstables ( & [ t2b, t1b] ) ;
569+ let merged_reverse = merge_jstables ( vec ! [ t2b, t1b] ) ;
573570 assert_eq ! (
574571 jsonb_to_serde( merged_reverse. documents. get( "id1" ) . unwrap( ) ) ,
575572 json!( { "v" : 2 } )
0 commit comments