sql_env / server /synthetic /__main__.py
hjerpe's picture
Upload folder using huggingface_hub
5dd1bb4 verified
Raw
History Blame Contribute Delete
2.64 kB
"""CLI entry point for synthetic database variant generation."""
from __future__ import annotations
import argparse
from pathlib import Path
from .generate import generate_variant, generate_variants_for_question
def _default_output_dir(db_path: str) -> str:
db_name = Path(db_path).stem
return str(Path("data") / "databases" / "variants" / db_name)
def _parse_mutations(value: str | None) -> list[str] | None:
if value is None:
return None
mutations = [item.strip() for item in value.split(",") if item.strip()]
return mutations or None
def _build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
prog="python -m server.synthetic",
description="Generate synthetic SQLite variants for metamorphic SQL testing.",
)
parser.add_argument("--db-path", required=True, help="Path to source SQLite DB")
parser.add_argument("--gold-sql", required=True, help="Gold SQL query to validate")
parser.add_argument(
"--output-dir",
default=None,
help="Directory for generated variants (default: data/databases/variants/{db})",
)
parser.add_argument(
"--n-variants",
type=int,
default=2,
help="Number of variants to generate",
)
parser.add_argument(
"--mutations",
default=None,
help="Comma-separated mutation names (default: all)",
)
return parser
def main(argv: list[str] | None = None) -> int:
"""Run synthetic DB generation CLI and return process exit code."""
parser = _build_parser()
args = parser.parse_args(argv)
output_dir = args.output_dir or _default_output_dir(args.db_path)
selected_mutations = _parse_mutations(args.mutations)
if selected_mutations is None:
results = generate_variants_for_question(
db_path=args.db_path,
gold_sql=args.gold_sql,
output_dir=output_dir,
n_variants=args.n_variants,
)
else:
results = []
for variant_id in range(max(args.n_variants, 0)):
result = generate_variant(
db_path=args.db_path,
gold_sql=args.gold_sql,
output_dir=output_dir,
mutations=selected_mutations,
variant_id=variant_id,
)
if result.gold_sql_valid:
results.append(result)
print(f"Generated {len(results)} valid variant(s) in {output_dir}")
for result in results:
print(f"- {result.variant_path}")
return 0 if results else 1
if __name__ == "__main__":
raise SystemExit(main())