Skip to content

Commit a7224af

Browse files
authored
perf: pre-compute the mapping between other_db.context and main.context (#2038)
Speeds up arc merging by about 33%.
1 parent 5c00c5b commit a7224af

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

coverage/sqldata.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -793,18 +793,28 @@ def update(
793793
# Handle arcs if present in other_db
794794
if has_arcs:
795795
self._choose_lines_or_arcs(arcs=True)
796+
797+
# Create context mapping table for faster lookups
798+
con.execute_void("""
799+
CREATE TEMP TABLE context_mapping AS
800+
SELECT
801+
other_context.id as other_id,
802+
main_context.id as main_id
803+
FROM other_db.context AS other_context
804+
INNER JOIN main.context AS main_context ON other_context.context = main_context.context
805+
""")
806+
796807
con.execute_void("""
797808
INSERT OR IGNORE INTO main.arc (file_id, context_id, fromno, tono)
798809
SELECT
799810
main_file.id,
800-
main_context.id,
811+
context_mapping.main_id,
801812
other_arc.fromno,
802813
other_arc.tono
803814
FROM other_db.arc AS other_arc
804815
INNER JOIN other_file_mapped ON other_arc.file_id = other_file_mapped.other_file_id
805-
INNER JOIN other_db.context AS other_context ON other_arc.context_id = other_context.id
816+
INNER JOIN context_mapping ON other_arc.context_id = context_mapping.other_id
806817
INNER JOIN main.file AS main_file ON other_file_mapped.mapped_path = main_file.path
807-
INNER JOIN main.context AS main_context ON other_context.context = main_context.context
808818
""")
809819

810820
# Handle line_bits if present in other_db

0 commit comments

Comments
 (0)