@@ -51,6 +51,11 @@ def generate_reports(seen_sql, issues, output_prefix):
5151 out .write (sql + "\n " )
5252
5353 df = pd .DataFrame (issues )
54+
55+ # Rule-level summary
56+ rule_summary = df .groupby ("Rule_ID" ).size ().reset_index (name = "Matches" )
57+ rule_summary ["% of Total" ] = (rule_summary ["Matches" ] / len (seen_sql )) * 100
58+
5459 if df .empty or not {'SQL_Type' , 'Issue' }.issubset (df .columns ):
5560 logging .warning ("⚠️ No compatibility issues found or rules failed to match." )
5661 return
@@ -70,7 +75,11 @@ def generate_reports(seen_sql, issues, output_prefix):
7075 f .write (f"**Total unique SQL/function statements analyzed:** { len (seen_sql )} \n " )
7176 f .write (f"**Total compatibility issues detected:** { len (issues )} \n " )
7277 f .write (f"**Issue rate:** { issue_pct :.2f} %\n \n " )
73- f .write ("## Compatibility Issues Summary\n \n " )
78+ f .write ("## Rule Match Summary\n \n " )
79+ f .write ("| Rule ID | Matches | % of Total |\n |---------|---------|-------------|\n " )
80+ for _ , row in rule_summary .iterrows ():
81+ f .write (f"| { row ['Rule_ID' ]} | { row ['Matches' ]} | { row ['% of Total' ]:.2f} % |\n " )
82+ f .write ("\n ## Compatibility Issues Summary\n \n " )
7483 f .write ("| SQL Type | Issue | Count |\n |----------|-------|-------|\n " )
7584 for _ , row in summary .iterrows ():
7685 f .write (f"| { row ['SQL_Type' ]} | { row ['Issue' ]} | { row ['Count' ]} |\n " )
@@ -146,6 +155,8 @@ def generate_reports(seen_sql, issues, output_prefix):
146155 f"<p><strong>Total SQL/function statements:</strong> { len (seen_sql )} <br><strong>Total issues:</strong> { len (issues )} <br><strong>Issue rate:</strong> { issue_pct :.2f} %</p>"
147156 )
148157 f .write (summary .to_html (index = False ))
158+ f .write ("<h2>Rule Match Summary</h2>" )
159+ f .write (rule_summary .to_html (index = False ))
149160 f .write ("<h2>Sample Issues</h2>" )
150161 for i , row in enumerate (issues [:10 ]):
151162 f .write (f"<h3>{ i + 1 } . { row ['SQL_Type' ]} : { row ['Issue' ]} </h3><pre>{ row ['Example' ]} </pre>" )
0 commit comments