Revision history for DBIx::Class::MockData v1.0.0 2026-06-21 [ENHANCEMENTS] - Switched to dotted-decimal versioning (v-strings). [DOCUMENTATION] - Small pod changes. 0.05 2026-03-23 [NEW FEATURES] - Added truncate() method for fast, safe table emptying (preserves structure) - Added quiet flag to suppress non-fatal warnings - Added start_year/end_year parameters for configurable date ranges - Added --truncate and --quiet options to CLI tool [ENHANCEMENTS] - Improved dependency graph detection for complex relationships - Better cycle detection with clear error messages - State-based templates in _contextual_string for better performance - Strict argument validation with meaningful error messages - Configurable date ranges (default: 2010-2026) [FIXES] - Fixed closure variable capture in template generators - Fixed SQLite sequence reset in truncate() - Fixed email format to keep salt in local part - Fixed only/exclude filter handling in truncate() - Fixed CLI exit codes on bulk insert failures [DOCUMENTATION] - Clear comparison of truncate vs wipe vs deploy - Documented date range configuration [INTERNAL] - Refactored _generate_value to support pluggable generators - Optimised template matching with state variables - Improved test coverage - Added comprehensive CLI tests for truncate and quiet options 0.04 2026-03-17 [NEW FEATURES] - Added rows_per_table parameter to specify different row counts per table - Added generators parameter for custom column value generation Supports static values, row interpolation ({row}), and Perl code references [ENHANCEMENTS] - Bulk insert using populate() for up to 10x faster performance - Salt value now randomised even when seed is set (ensures cross-run uniqueness) - Better handling of unique constraints across all column types - Improved error handling with graceful failure recovery [DOCUMENTATION] - Added comprehensive examples for rows_per_table and generators - Documented performance improvements and best practices [INTERNAL] - Refactored _generate_value to support custom generators - Added rows_per_table support in generate() loop - Updated CLI tool with --rows-per-table and --generators options - Comprehensive test coverage for all new features 0.03 2026-03-12 New features: - generate() now accepts an 'only' argument (arrayref of source names) to restrict data generation to a specific subset of tables. - generate() now accepts an 'exclude' argument (arrayref of source names) to skip selected tables while populating the rest. - Both filters preserve FK-safe insertion order within the active set. - Both filters are respected by dry_run() as well as generate(). - Passing both 'only' and 'exclude' to new() croaks immediately with a clear error message. - Passing an unknown source name in either argument croaks with a descriptive error identifying the offending name(s). CLI tool: - Added --only (comma-separated) to the dbic-mockdata script. - Added --exclude (comma-separated) to the dbic-mockdata script. - CLI validates mutual exclusion of --only and --exclude before invoking the module. Test suite: - t/04-filter.t -- 16 unit subtests covering only/exclude behaviour, FK ordering within filtered sets, dry_run filtering, invalid input validation, and mutual-exclusion enforcement. - t/03-cli.t -- extended with 7 new subtests for --only and --exclude including single table, comma-separated lists, unknown source names, and the --only + --exclude conflict check. Bug fixes: - _active_sources() previously called $schema->source() to validate names, which caused DBIx::Class to throw its own exception before our error message could be raised. Validation now uses a pre-built lookup hash from the known source list, giving callers a clean, actionable error. 0.02 2026-03-11 - Makefile.PL: added provides block to META_MERGE so MetaCPAN correctly indexes DBIx::Class::MockData with its version. - README.md: corrected SYNOPSIS to use new() with a pre-connected schema instead of the removed schema() entry point. - Bumped version to 0.02 in MockData.pm and script/dbic-mockdata. 0.01 2026-03-11 First release. New features: - new() constructor accepts a connected DBIx::Class::Schema object and schema_dir; connection is entirely the caller's responsibility. - deploy() -- creates missing tables via DBIx::Class schema deployment. - wipe() -- drops all tables and redeploys from scratch (test use only). - generate() -- introspects all result sources, resolves FK insertion order via topological sort, and inserts randomly generated rows. - dry_run() -- prints generated values without touching the database. - All public methods return $self for call chaining. Data generation: - Values derived entirely from each column's declared data_type. - Contextual strings for varchar/text columns matched on column name (email, slug, title, status, url, etc.). - Unique and PK columns salted with a per-run random value to prevent cross-run constraint violations. - Optional seed argument for fully reproducible output. CLI tool: - script/dbic-mockdata with --schema-dir, --namespace, --dsn, --deploy, --wipe, --dry-run, --rows, --seed, --verbose, --help. Test suite: - t/01-basic.t -- unit tests with inline schema. - t/02-schema.t -- integration tests against t/lib/TestSchema (Author -> Book -> Review FK chain). - t/03-cli.t -- subprocess tests for the CLI script via IPC::Open3.