Source code for benchbox.coffeeshop
"""Public entrypoint for the reference-aligned CoffeeShop benchmark."""
from pathlib import Path
from typing import Any, Optional, Union
from benchbox.base import BaseBenchmark
from benchbox.core.coffeeshop.benchmark import CoffeeShopBenchmark
[docs]
class CoffeeShop(BaseBenchmark):
"""High-level wrapper for the CoffeeShop benchmark.
The rewritten benchmark mirrors the public reference generator and now
exposes a compact star schema consisting of:
- ``dim_locations``: geographic metadata and regional weights
- ``dim_products``: canonical product catalog with seasonal availability
- ``order_lines``: exploded fact table (1-5 lines per order) with temporal,
regional, and pricing dynamics
The query suite (``SA*``, ``PR*``, ``TR*``, ``TM*``, ``QC*``) focuses on
sales analysis, product behaviour, trend analysis, and quality checks for the
new schema.
"""
[docs]
def __init__(
self,
scale_factor: float = 1.0,
output_dir: Optional[Union[str, Path]] = None,
**kwargs: Any,
) -> None:
"""Initialise a CoffeeShop benchmark instance."""
super().__init__(scale_factor=scale_factor, output_dir=output_dir, **kwargs)
# Initialize the actual implementation using common pattern
self._initialize_benchmark_implementation(CoffeeShopBenchmark, scale_factor, output_dir, **kwargs)
[docs]
def generate_data(self) -> list[Union[str, Path]]:
"""Generate Coffee Shop benchmark data.
Returns:
A list of paths to the generated data files
"""
return self._impl.generate_data()
[docs]
def get_queries(self, dialect: Optional[str] = None) -> dict[str, str]:
"""Get all Coffee Shop benchmark queries.
Args:
dialect: Target SQL dialect for query translation. If None, returns original queries.
Returns:
A dictionary mapping query IDs to query strings
"""
return self._impl.get_queries(dialect=dialect)
[docs]
def get_query(self, query_id: str, *, params: Optional[dict[str, Any]] = None) -> str:
"""Return a single CoffeeShop analytics query.
Query identifiers follow the updated naming convention (e.g. ``SA1`` for
sales analysis, ``PR1`` for product mix, ``TR1`` for trend review).
"""
return self._impl.get_query(query_id, params=params)
[docs]
def get_schema(self) -> list[dict]:
"""Get the Coffee Shop benchmark schema.
Returns:
A list of dictionaries describing the tables in the schema
"""
return self._impl.get_schema()
[docs]
def get_create_tables_sql(self, dialect: str = "standard", tuning_config=None) -> str:
"""Get SQL to create all Coffee Shop benchmark tables.
Args:
dialect: SQL dialect to use
tuning_config: Unified tuning configuration for constraint settings
Returns:
SQL script for creating all tables
"""
return self._impl.get_create_tables_sql(dialect=dialect, tuning_config=tuning_config)