@@ -311,8 +311,28 @@ def generate_domain_query(
311311 return (view_name , domain_select )
312312
313313
314- def create_summary_queries (connection : RocpdImportData , by_rank = False ):
315- """Create summary queries for eligible temporary views in the database."""
314+ def _view_matches_category (view_name : str , category : str ) -> bool :
315+ """Return True if view name matches the category (e.g. 'kernels' matches 'kernel')."""
316+ v = view_name .lower ()
317+ c = category .lower ()
318+ return (
319+ v == c
320+ or v .startswith (c + "_" )
321+ or v == c + "s"
322+ or v .startswith (c + "s_" )
323+ )
324+
325+
326+ def create_summary_queries (
327+ connection : RocpdImportData ,
328+ by_rank = False ,
329+ only_view_categories = None ,
330+ ):
331+ """Create summary queries for eligible temporary views in the database.
332+
333+ When only_view_categories is set (e.g. ["kernel"]), only include views whose
334+ name matches one of the categories (e.g. "kernels" matches "kernel").
335+ """
316336
317337 NAME_COLUMN_MAP = {
318338 "memory_allocations" : "type" ,
@@ -330,6 +350,13 @@ def create_summary_queries(connection: RocpdImportData, by_rank=False):
330350 if any (pattern in view_name for pattern in avoid_view_pattern ):
331351 continue
332352
353+ if only_view_categories is not None :
354+ if not any (
355+ _view_matches_category (view_name , cat )
356+ for cat in only_view_categories
357+ ):
358+ continue
359+
333360 columns = get_temp_view_columns (connection , view_name )
334361 if not required_columns .issubset (columns ):
335362 continue
@@ -477,8 +504,24 @@ def generate_all_summaries(connection: RocpdImportData, **kwargs: Any) -> None:
477504
478505 summary_queries = {}
479506
480- # Create the summary queries
481- summary_queries .update (create_summary_queries (connection , by_rank ))
507+ # Create the summary queries.
508+ # When region_categories is specified (and not NONE), only include view-based
509+ # summaries that match those categories (e.g. "kernels" view for KERNEL) and
510+ # only region summaries for those categories. With --region-categories NONE we
511+ # only skip region summaries and still include all view-based summaries.
512+ is_none_categories = (
513+ region_categories is not None
514+ and len (region_categories ) == 1
515+ and str (region_categories [0 ]).strip ().upper () == "NONE"
516+ )
517+ if region_categories is None or is_none_categories :
518+ summary_queries .update (create_summary_queries (connection , by_rank ))
519+ else :
520+ summary_queries .update (
521+ create_summary_queries (
522+ connection , by_rank , only_view_categories = region_categories
523+ )
524+ )
482525 summary_queries .update (
483526 create_summary_region_queries (
484527 connection , by_rank , region_categories = region_categories
0 commit comments