Repository navigation
v2.0.0 — SQL release pipeline: dependants, single-file generation, and a database runner
This release grows the tool from a simple "copy changed files" utility into a three-tab
SQL release pipeline: extract the change set, pull in dependent-module copies, consolidate
into one ordered script per environment, and run it across many databases with error
tracking and retry.
✨ New — Copy Changed Files (tab 1)
- Add Dependent Files: for every changed file under a main SQL folder (e.g.
SQL\ModuleA),
also copy the same-named file from one or more dependent folders (e.g.SQL\ModuleB;SQL\ModuleC).
Covers the case where a module keeps its own copy of an object that wasn't changed in Git
but must still be redeployed.- Name matching ignores a leading run-order prefix (1–2 digits +
_, e.g.1_view.sql),
so0_view.sqlmatchesview.sql, while date-stamped scripts (20240115_…) only match
identical stamps.
- Name matching ignores a leading run-order prefix (1–2 digits +
- Each action lists its own result set in the grid, and the lists are auto-saved as
<Tag>_ChangedFiles.csv/<Tag>_DependentFiles.csvin the target folder.
✨ New — Generate Single SQL File (tab 2)
- Consolidates the change set into one ordered
.sqlper environment, driven by small
JSON config files (Scripts→Folders→ filename order, non-recursive), with each file
emitted as its ownGObatch and no wrapping transaction. - Reuses the Copy Changed Files settings (shown read-only for review), auto-saves into the
release folder as<ToTag>_<Env>_from_<FromTag>.sql, and writes an audit header
(repository, from/to tags, environment, databases, timestamp). - Passes option to emit the ordered set multiple times for forward-dependency resolution.
✨ New — Run On Databases (tab 3)
- Runs a
.sqlfile against every database in an environment JSON viasqlcmd, with a
per-database OK/ERROR results grid and a full error log. - Continues past errors (each
GObatch is independent) and reports every failure. - Export Run Log, plus auto-saved
_RunLog.txt/_RunResults.csv— previous runs are
backed up as_1,_2, … so the clean names always hold the latest run. - Re-run failed only and Load Failed From CSV (auto-detects the results file) to
retry just the failed databases, even across app restarts. - Connection resilience for VPN/remote runs: login timeout, query timeout,
connectivity-only auto-retry (retries + wait), a Cancel button, and a responsive UI. - Password is passed via the
SQLCMDPASSWORDenvironment variable (never on the command line);
input is read as UTF-8.
🐛 Fixes
- Fixed a use-after-free/double-free when the target folder already existed and was non-empty.
- Fixed the extension filter: blank,
*or*.*now correctly means "all files" (previously
matched nothing). - Normalise Git's forward-slash paths so nested sub-folders are always created and copied.
- Fixed mixed-encoding output: UTF-16/ANSI source files are normalised to UTF-8 when
building the single file, eliminatingIncorrect syntax near '?'errors undersqlcmd.
🔧 Other
- All settings (paths, tags, filters, connection details, timeouts) persist to
ChangedGitFiles.ini. - README rewritten with examples and the JSON config-file format.
Requirements
- Git on
PATH; Windows;sqlcmdonPATHfor the Run On Databases tab.