@@ -767,45 +767,46 @@ def update(self, other_data: CoverageData, aliases: PathAliases | None = None) -
767
767
# Prepare arc and line rows to be inserted by converting the file
768
768
# and context strings with integer ids. Then use the efficient
769
769
# `executemany()` to insert all rows at once.
770
- arc_rows = (
771
- (file_ids [file ], context_ids [context ], fromno , tono )
772
- for file , context , fromno , tono in arcs
773
- )
774
770
775
771
# Get line data.
776
- with con .execute (
777
- "select file.path, context.context, line_bits.numbits " +
778
- "from line_bits " +
779
- "inner join file on file.id = line_bits.file_id " +
780
- "inner join context on context.id = line_bits.context_id" ,
781
- ) as cur :
782
- for path , context , numbits in cur :
783
- key = (aliases .map (path ), context )
784
- if key in lines :
785
- numbits = numbits_union (lines [key ], numbits )
786
- lines [key ] = numbits
772
+ if lines :
773
+ self ._choose_lines_or_arcs (lines = True )
774
+
775
+ with con .execute (
776
+ "select file.path, context.context, line_bits.numbits " +
777
+ "from line_bits " +
778
+ "inner join file on file.id = line_bits.file_id " +
779
+ "inner join context on context.id = line_bits.context_id" ,
780
+ ) as cur :
781
+ for path , context , numbits in cur :
782
+ key = (aliases .map (path ), context )
783
+ if key in lines :
784
+ lines [key ] = numbits_union (lines [key ], numbits )
785
+
786
+ con .executemany_void (
787
+ "insert or replace into line_bits " +
788
+ "(file_id, context_id, numbits) values (?, ?, ?)" ,
789
+ [
790
+ (file_ids [file ], context_ids [context ], numbits )
791
+ for (file , context ), numbits in lines .items ()
792
+ ],
793
+ )
787
794
788
795
if arcs :
789
796
self ._choose_lines_or_arcs (arcs = True )
790
797
798
+ arc_rows = (
799
+ (file_ids [file ], context_ids [context ], fromno , tono )
800
+ for file , context , fromno , tono in arcs
801
+ )
802
+
791
803
# Write the combined data.
792
804
con .executemany_void (
793
805
"insert or ignore into arc " +
794
806
"(file_id, context_id, fromno, tono) values (?, ?, ?, ?)" ,
795
807
arc_rows ,
796
808
)
797
809
798
- if lines :
799
- self ._choose_lines_or_arcs (lines = True )
800
- con .execute_void ("delete from line_bits" )
801
- con .executemany_void (
802
- "insert into line_bits " +
803
- "(file_id, context_id, numbits) values (?, ?, ?)" ,
804
- [
805
- (file_ids [file ], context_ids [context ], numbits )
806
- for (file , context ), numbits in lines .items ()
807
- ],
808
- )
809
810
con .executemany_void (
810
811
"insert or ignore into tracer (file_id, tracer) values (?, ?)" ,
811
812
((file_ids [filename ], tracer ) for filename , tracer in tracer_map .items ()),
0 commit comments