You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Multi-platform support — SchemaSmith now supports PostgreSQL and MySQL alongside SQL Server across all three CLI tools (SchemaQuench, SchemaTongs, DataTongs)
Platform-specific domain models — Dedicated domain types for PostgreSQL (materialized views, exclude constraints, range types) and MySQL (multi-column full-text indexes, generated columns, tablespace support)
ShouldApplyExpression — Template-level conditional deployment using SQL expressions evaluated at runtime
Secondary servers — Deploy the same product to additional server instances in a single run
Extensions custom properties carrier — User-extensible Extensions (JToken) on every domain object (Table, Column, Index, ForeignKey, IndexedView, MaterializedView, etc.). Because Extensions serialize alongside core properties, any custom metadata you attach is queryable from your scripts through the {{TableSchema}}, {{IndexedViewSchema}}, and {{MaterializedViewSchema}} auto-tokens — or through per-object tokens like <*SpecificTable*>. Opens the door to replication metadata, data dictionaries, environment-driven behavior, custom validation rules, anything your deployment needs. Preserved during SchemaTongs re-extraction.
Modular table quench — Monolithic TableQuench replaced with focused procedures: MissingTableAndColumnQuench, ModifiedTableQuench, MissingIndexesAndConstraintsQuench, ForeignKeyQuench, plus ParseTableJsonIntoTempTables for shared JSON parsing
IndexOnlyQuench — Template-level IndexOnlyTableQuenches mode for managing indexes without modifying table structure
Expanded execution slots — 9 total (7 template + 2 product): added BetweenTablesAndKeys, AfterTablesScripts, Product Before, Product After
GenerateIndexedViewJson / IndexedViewQuench — Stored procedures for indexed view extraction and deployment with ownership tracking
Materialized view support (PostgreSQL) — SchemaTongs extraction and SchemaQuench diff-based deployment of PostgreSQL materialized views with full index management; index-only changes skip the materialized view rebuild
GenerateMaterializedViewJson / MaterializedViewQuench / MissingMaterializedViewIndexesQuench — Stored procedures for materialized view extraction and deployment, with ownership tracking and validation/fixup helpers
Per-table and per-index UpdateFillFactor — Granular fill factor control at table and index level (OR'd with template setting)
ConnectionProperties — Config section for arbitrary connection string properties, plus Port field and --ConnectionString CLI override
DataTongs: Auto PK detection — KeyColumns is now optional; auto-detected from primary key or best unique index when blank
DataTongs: Geometry and HierarchyID support — Added handling for GEOMETRY, HIERARCHYID data types; sql_variant/rowversion/timestamp excluded
DataTongs: MySQL tokenization — Full token resolution support for MySQL merge scripts (parity with other platforms)
WhatIf improvements — Detailed per-script logging across all phases ("Would APPLY"/"Would SKIP (previously quenched)")
RunScriptsTwice — SchemaQuench setting that runs object scripts twice to verify idempotency; a CI/testing tool for catching [ALWAYS] script bugs before production
SchemaTongs: Subfolder preservation — ExtractionFileIndex per-folder tracking; scripts written back to same subfolder on re-extraction
SchemaTongs: Script validation — Post-extraction syntax validation with .sqlerror files for invalid SQL
SchemaTongs: CheckConstraintStyle — Product-level switch for ColumnLevel or TableLevel constraint extraction
SchemaTongs: --WriteSchemasOnly — Regenerate JSON schema validation (.schema) files from C# types without a database connection
Script tokens in every script — {{TokenName}} resolution extended to every script folder — Before/After, object scripts, migrations, table data — not just the select few it used to work in. Tokens are defined in Product.json and Template.json with environment-variable overrides, so one package parameterizes cleanly across dev, test, and prod.
Advanced token tags — Token values can now carry <*Query*> (result of an inline SQL query), <*QueryFile*> (query loaded from a file), <*File*> / <*BinaryFile*> (file contents as text or hex), and <*SpecificTable*> / <*SpecificIndexedView*> / <*SpecificMaterializedView*> (single-object JSON). Resolvable anywhere simple tokens are — object scripts, migrations, validation, everywhere.
{{TableSchema}} / {{IndexedViewSchema}} / {{MaterializedViewSchema}} auto-tokens — The template's full table, indexed view, and materialized view definitions are exposed as JSON tokens at deployment time. Combined with the Extensions carrier, scripts can query any core OR custom property through standard JSON operations — no hand-authored metadata pipeline required.
Parallel execution — Quench all databases for a template in parallel
Parallel file token resolution — Token replacement and script loading parallelized within folders
VerboseLogging setting — Controls whether SQL informational messages appear in deployment logs; when disabled (default), noisy SQL info messages are suppressed
Template Required property — Marks templates as required so misconfigured deploys fail fast instead of silently skipping
Filesystem-illegal character handling — FileNameEncoder percent-encodes \ / : * ? " < > | in output filenames; original names preserved in content
Demo products — AdventureWorks, Chinook, Northwind, and Sakila across all three platforms with full data delivery for testing and docker-compose validation
Self-contained executables — Single-file builds for all tools across 6 RIDs (win/linux/osx × x64/arm64)
Release workflow — Automated build, package, and GitHub Release creation via workflow_dispatch
Authenticode signing — Windows binaries (SchemaQuench.exe, SchemaTongs.exe, DataTongs.exe) are signed via Azure Trusted Signing on every release. Eliminates SmartScreen "Windows protected your PC" warnings and lets users verify provenance with signtool verify /pa /v.
Chocolatey package — choco install schemasmith installs all three CLI tools as a single combined package on Windows. Embedded signed binaries — no checksum maintenance, no .NET runtime install needed. Triggered automatically on GitHub Release publish.
Linux .deb and .rpm packages — single combined schemasmith package per (amd64/arm64) × (.deb/.rpm) covers Debian/Ubuntu and RHEL/Fedora/Amazon Linux. dpkg -i / rpm -i installs all three CLI commands (schemaquench, schematongs, datatongs) onto PATH from one download — binaries land under /usr/lib/schemasmith/ with /usr/bin/ symlinks. Zero declared dependencies; the bundled binaries are fully self-contained. Built via nfpm and attached to every GitHub Release alongside the bundle ZIPs.
Cross-platform install.sh — single POSIX-sh script that detects OS and architecture (Linux/macOS, x64/arm64), resolves the latest release without a GitHub API token, downloads the matching .tar.gz bundle, verifies SHA-256 against the release manifest, and installs the three CLIs onto PATH. curl -fsSL https://raw.githubusercontent.com/Schema-Smith/SchemaSmith/main/packaging/install/install.sh | sh is the canonical invocation. Supports INSTALL_VERSION and INSTALL_DIR env-var overrides.
Release-level SHA256SUMS manifest — every GitHub Release publishes a single SHA256SUMS file covering every artifact (bundle archives, .deb, .rpm). Enables one-shot verification with sha256sum -c SHA256SUMS (Linux) or shasum -a 256 -c SHA256SUMS (macOS) after downloading the artifacts you want; install.sh performs the same check automatically.
Linux and macOS bundles in .tar.gz — Linux and macOS RIDs ship as .tar.gz instead of .zip for native compatibility with tar -xzf, install.sh, and standard Unix tooling. Windows bundles continue as .zip.
Libicu-independent runtime — Self-contained Linux publishes of all three CLI tools bundle a private ICU runtime (Microsoft.ICU.ICU4C.Runtime 72.1.0.3) so the binaries run on minimal Linux containers (slim Docker images, hardened distros) that ship without libicu. Three ICU shared libraries (libicudata, libicui18n, libicuuc) install alongside the binaries in a single dir — /usr/lib/schemasmith/ for .deb/.rpm packages — and one shared set serves all three CLIs. Zero declared system dependencies for ICU on the Linux package side.
Copyright header CI — Validates headers on all .cs and .sql files on every push
TreatWarningsAsErrors — Enabled globally in Directory.Build.props
Multi-platform CI — Parallel SQL Server, PostgreSQL, and MySQL integration test jobs with service containers
Checkpoint/resume for SchemaQuench — --ResumeQuench and --CheckpointDirectory skip already-completed steps and migration scripts after a failed run; checkpoints cleaned up automatically on success
FK-aware data delivery — Declarative DataDelivery block on table JSON drives automatic foreign-key dependency ordering; two-pass delivery handles nullable FK columns without hand-authored merge scripts
DataTongs --ConfigureDataDelivery — Writes DataDelivery settings (ContentFile, MergeType, MatchColumns, MergeFilter, and trigger/rule flags) into table JSON files after extraction so the declarative pipeline can take over
Changed
.NET 10 — Upgraded from .NET 9 / .NET 4.8.1 dual-targeting to .NET 10 single target
Backslash escaping for MySQL — Platform-specific escaping (SQL Server/PostgreSQL don't need it)
TrustServerCertificate default — Removed from platform-agnostic defaults (broke MySQL connections)
Docker release image UID — Fixed UID 1000 conflict with Ubuntu 24.04 base image
<*BinaryFile*> PostgreSQL output — Resolver now emits PostgreSQL BYTEA literal syntax (E'\\x...'::bytea) when the product platform is PostgreSQL; SQL Server and MySQL continue to receive 0x<hex> literals. Previously emitted 0x<hex> unconditionally, which parses as an invalid integer on PostgreSQL and silently broke binary token insertion into BYTEA columns.