pipekit/pipekit
Paul Trowbridge 002de48bba Make reconcile.py work against SQL Server / linked-server sources
reconcile.py was written against the DB2 LGDAT modules and broke four
different ways on the first GP module (sop30200):

- detect_source_from's regex handled at most a two-part name, so
  CHG.dbo.SOP30200 truncated to CHG.dbo -> "Invalid object name".
  Now matches 1-4 parts, including [bracketed] and "quoted" forms.

- Even fully qualified, that table only exists behind the GPSERVER
  linked server. Detect the module's OPENQUERY wrapper and push the
  aggregate through it, so the scan runs remotely and one row comes
  back instead of 1.6M rows crossing the link.

- OPENQUERY caps its passthrough string at 8000 chars and 291 metrics
  overran it. Split the metric list into chunks that fit and CROSS JOIN
  them back into one row; alias columns c0..cN since OPENQUERY rejects
  unnamed result columns (msg 8155). EXEC(@sql) AT has no such cap but
  needs RPC Out, which GPSERVER has disabled.

- Two dialect bugs that would hit any SQL Server source: T-SQL SUM(int)
  stays int and overflowed at 2^31 where Postgres promotes to bigint,
  and T-SQL has no LENGTH. Added Driver.sum_expression /
  length_expression with mssql overrides -- integer types cast to
  BIGINT (decimals left alone so scale isn't lost), LENGTH -> LEN.

--super-quick and --quick now run clean end to end. Full depth is
syntax-checked only; it wasn't run against the server.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 02:25:24 -04:00
..
api feat: module descriptions, modules-list redesign, abandoned-run sweep 2026-07-22 15:06:42 -04:00
drivers Make reconcile.py work against SQL Server / linked-server sources 2026-08-07 02:25:24 -04:00
engine Add destination-table preflight to the run path 2026-07-24 12:35:02 -04:00
web Keep status pills on one line (white-space: nowrap) 2026-07-27 12:33:48 -04:00
__init__.py Initial commit: Pipekit rewrite. 2026-04-22 00:38:26 -04:00
__main__.py Initial commit: Pipekit rewrite. 2026-04-22 00:38:26 -04:00
cli.py Add destination-table preflight to the run path 2026-07-24 12:35:02 -04:00
config_io.py feat: version-control pipeline definitions via export/apply 2026-07-22 10:56:55 -04:00
config.py Honor api_host in config.yaml; ignore .venv/ created by deploy.sh. 2026-04-23 00:33:56 -04:00
db.py feat: module descriptions, modules-list redesign, abandoned-run sweep 2026-07-22 15:06:42 -04:00
jrunner.py feat: cancel an in-flight module run 2026-07-10 04:06:24 -04:00
repo.py feat: module descriptions, modules-list redesign, abandoned-run sweep 2026-07-22 15:06:42 -04:00
scheduler.py Convert all timestamps to local time for display and scheduling 2026-06-03 23:21:05 -04:00
schema.sql feat: module descriptions, modules-list redesign, abandoned-run sweep 2026-07-22 15:06:42 -04:00