ddlforge 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/src/cli.d.ts +2 -2
  2. package/dist/src/cli.d.ts.map +1 -1
  3. package/dist/src/cli.js +11 -4
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/reporters/index.d.ts +1 -0
  6. package/dist/src/reporters/index.d.ts.map +1 -1
  7. package/dist/src/reporters/index.js +1 -0
  8. package/dist/src/reporters/index.js.map +1 -1
  9. package/dist/src/reporters/sarif.d.ts +72 -0
  10. package/dist/src/reporters/sarif.d.ts.map +1 -0
  11. package/dist/src/reporters/sarif.js +103 -0
  12. package/dist/src/reporters/sarif.js.map +1 -0
  13. package/dist/src/rules/checkConstraintNotValid.d.ts +9 -0
  14. package/dist/src/rules/checkConstraintNotValid.d.ts.map +1 -0
  15. package/dist/src/rules/checkConstraintNotValid.js +116 -0
  16. package/dist/src/rules/checkConstraintNotValid.js.map +1 -0
  17. package/dist/src/rules/index.d.ts +3 -0
  18. package/dist/src/rules/index.d.ts.map +1 -1
  19. package/dist/src/rules/index.js +9 -0
  20. package/dist/src/rules/index.js.map +1 -1
  21. package/dist/src/rules/sessionAdvisoryLock.d.ts +9 -0
  22. package/dist/src/rules/sessionAdvisoryLock.d.ts.map +1 -0
  23. package/dist/src/rules/sessionAdvisoryLock.js +47 -0
  24. package/dist/src/rules/sessionAdvisoryLock.js.map +1 -0
  25. package/dist/src/rules/uniqueConstraintUsingIndex.d.ts +9 -0
  26. package/dist/src/rules/uniqueConstraintUsingIndex.d.ts.map +1 -0
  27. package/dist/src/rules/uniqueConstraintUsingIndex.js +145 -0
  28. package/dist/src/rules/uniqueConstraintUsingIndex.js.map +1 -0
  29. package/dist/src/runner/executor.d.ts +31 -8
  30. package/dist/src/runner/executor.d.ts.map +1 -1
  31. package/dist/src/runner/executor.js +163 -59
  32. package/dist/src/runner/executor.js.map +1 -1
  33. package/package.json +2 -2
package/dist/src/cli.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  export interface CliOptions {
5
5
  targets: string[];
6
6
  pgVersion: number;
7
- format: 'terminal' | 'json' | 'markdown';
7
+ format: 'terminal' | 'json' | 'markdown' | 'sarif';
8
8
  quiet: boolean;
9
9
  changedOnly: boolean;
10
10
  help: boolean;
@@ -22,7 +22,7 @@ export interface ApplyOptions {
22
22
  monitorPollMs: number;
23
23
  help: boolean;
24
24
  }
25
- export declare const VERSION = "0.2.0";
25
+ export declare const VERSION = "0.3.0";
26
26
  export declare function parseArgs(args: string[]): CliOptions;
27
27
  export declare function printHelp(): void;
28
28
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAkFpD;AAED,wBAAgB,SAAS,IAAI,IAAI,CA6ChC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAiH3D;AAGD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CAwB/G;AAgFD,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA0DpF;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8I9D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAkFpD;AAED,wBAAgB,SAAS,IAAI,IAAI,CA6ChC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAiH3D;AAGD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CAwB/G;AAgFD,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DpF;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8I9D"}
package/dist/src/cli.js CHANGED
@@ -8,7 +8,8 @@ import { MigrationAnalyzer } from './engine/analyzer.js';
8
8
  import { formatTerminal } from './reporters/terminal.js';
9
9
  import { formatJson } from './reporters/json.js';
10
10
  import { formatMarkdown } from './reporters/markdown.js';
11
- export const VERSION = '0.2.0';
11
+ import { formatSarif } from './reporters/sarif.js';
12
+ export const VERSION = '0.3.0';
12
13
  export function parseArgs(args) {
13
14
  const options = {
14
15
  targets: [],
@@ -59,7 +60,7 @@ export function parseArgs(args) {
59
60
  i++;
60
61
  if (i < args.length) {
61
62
  const fmt = args[i].toLowerCase();
62
- if (fmt === 'json' || fmt === 'markdown' || fmt === 'terminal') {
63
+ if (fmt === 'json' || fmt === 'markdown' || fmt === 'terminal' || fmt === 'sarif') {
63
64
  options.format = fmt;
64
65
  }
65
66
  }
@@ -68,7 +69,7 @@ export function parseArgs(args) {
68
69
  }
69
70
  if (arg.startsWith('--format=')) {
70
71
  const fmt = arg.slice(9).toLowerCase();
71
- if (fmt === 'json' || fmt === 'markdown' || fmt === 'terminal') {
72
+ if (fmt === 'json' || fmt === 'markdown' || fmt === 'terminal' || fmt === 'sarif') {
72
73
  options.format = fmt;
73
74
  }
74
75
  i++;
@@ -96,7 +97,7 @@ ARGUMENTS:
96
97
 
97
98
  FLAGS:
98
99
  --pg <version> Target PostgreSQL version (default: 16)
99
- --format <type> Output format: terminal | json | markdown (default: terminal)
100
+ --format <type> Output format: terminal | json | markdown | sarif (default: terminal)
100
101
  --quiet, -q Suppress advisories/warnings and emit blockers only
101
102
  --changed-only Use git diff to lint only staged or branch-modified migration files
102
103
  --version, -v Print ddlforge version and exit
@@ -356,6 +357,9 @@ export async function runCli(argv = process.argv.slice(2)) {
356
357
  else if (options.format === 'markdown') {
357
358
  console.log(formatMarkdown([]));
358
359
  }
360
+ else if (options.format === 'sarif') {
361
+ console.log(formatSarif([]));
362
+ }
359
363
  else {
360
364
  console.log('No migration .sql files found to analyze.');
361
365
  }
@@ -383,6 +387,9 @@ export async function runCli(argv = process.argv.slice(2)) {
383
387
  else if (options.format === 'markdown') {
384
388
  console.log(formatMarkdown(results));
385
389
  }
390
+ else if (options.format === 'sarif') {
391
+ console.log(formatSarif(results));
392
+ }
386
393
  else {
387
394
  console.log(formatTerminal(results, { quiet: options.quiet }));
388
395
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,5 @@
4
4
  export * from './terminal.js';
5
5
  export * from './json.js';
6
6
  export * from './markdown.js';
7
+ export * from './sarif.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -4,4 +4,5 @@
4
4
  export * from './terminal.js';
5
5
  export * from './json.js';
6
6
  export * from './markdown.js';
7
+ export * from './sarif.js';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ddlforge - SARIF 2.1.0 reporter for GitHub Code Scanning / Actions annotations.
3
+ *
4
+ * Spec: https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
5
+ */
6
+ import { AnalysisResult } from '../engine/analyzer.js';
7
+ import { Rule } from '../rules/types.js';
8
+ export interface SarifLog {
9
+ $schema: string;
10
+ version: string;
11
+ runs: SarifRun[];
12
+ }
13
+ export interface SarifRun {
14
+ tool: SarifTool;
15
+ results: SarifResult[];
16
+ artifacts: SarifArtifact[];
17
+ }
18
+ export interface SarifTool {
19
+ driver: SarifDriver;
20
+ }
21
+ export interface SarifDriver {
22
+ name: string;
23
+ version: string;
24
+ informationUri: string;
25
+ rules: SarifReportingDescriptor[];
26
+ }
27
+ export interface SarifReportingDescriptor {
28
+ id: string;
29
+ shortDescription: SarifMessage;
30
+ fullDescription: SarifMessage;
31
+ defaultConfiguration: {
32
+ level: 'error' | 'warning' | 'note';
33
+ };
34
+ helpUri: string;
35
+ }
36
+ export interface SarifResult {
37
+ ruleId: string;
38
+ level: 'error' | 'warning' | 'note';
39
+ message: SarifMessage;
40
+ locations: SarifLocation[];
41
+ }
42
+ export interface SarifMessage {
43
+ text: string;
44
+ }
45
+ export interface SarifLocation {
46
+ physicalLocation: SarifPhysicalLocation;
47
+ }
48
+ export interface SarifPhysicalLocation {
49
+ artifactLocation: SarifArtifactLocation;
50
+ region: SarifRegion;
51
+ }
52
+ export interface SarifArtifactLocation {
53
+ uri: string;
54
+ uriBaseId: string;
55
+ }
56
+ export interface SarifRegion {
57
+ startLine: number;
58
+ startColumn: number;
59
+ }
60
+ export interface SarifArtifact {
61
+ location: SarifArtifactLocation;
62
+ }
63
+ /**
64
+ * Formats an array of AnalysisResult objects as a SARIF 2.1.0 JSON string,
65
+ * suitable for consumption by GitHub Code Scanning or other SARIF-aware tools.
66
+ *
67
+ * @param results - Analysis results from the ddlforge engine.
68
+ * @param rules - Rule definitions used to populate `tool.driver.rules`.
69
+ * Defaults to ALL_RULES.
70
+ */
71
+ export declare function formatSarif(results: AnalysisResult[], rules?: Rule[]): string;
72
+ //# sourceMappingURL=sarif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../../src/reporters/sarif.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAWzC,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,wBAAwB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,YAAY,CAAC;IAC/B,eAAe,EAAE,YAAY,CAAC;IAC9B,oBAAoB,EAAE;QACpB,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAsBD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,KAAK,GAAE,IAAI,EAAc,GAAG,MAAM,CA0ExF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * ddlforge - SARIF 2.1.0 reporter for GitHub Code Scanning / Actions annotations.
3
+ *
4
+ * Spec: https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
5
+ */
6
+ import { ALL_RULES } from '../rules/index.js';
7
+ const SARIF_SCHEMA = 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json';
8
+ const SARIF_VERSION = '2.1.0';
9
+ const TOOL_NAME = 'ddlforge';
10
+ const TOOL_VERSION = '0.3.0';
11
+ const TOOL_INFO_URI = 'https://github.com/ddlforge/ddlforge';
12
+ function severityToLevel(severity) {
13
+ switch (severity) {
14
+ case 'BLOCKER': return 'error';
15
+ case 'WARNING': return 'warning';
16
+ case 'ADVISORY': return 'note';
17
+ default: return 'warning';
18
+ }
19
+ }
20
+ function fileToUri(filePath) {
21
+ // Convert Windows backslashes to forward slashes for file:// URIs
22
+ return 'file:///' + filePath.replace(/\\/g, '/');
23
+ }
24
+ // ── Public API ─────────────────────────────────────────────────────────────
25
+ /**
26
+ * Formats an array of AnalysisResult objects as a SARIF 2.1.0 JSON string,
27
+ * suitable for consumption by GitHub Code Scanning or other SARIF-aware tools.
28
+ *
29
+ * @param results - Analysis results from the ddlforge engine.
30
+ * @param rules - Rule definitions used to populate `tool.driver.rules`.
31
+ * Defaults to ALL_RULES.
32
+ */
33
+ export function formatSarif(results, rules = ALL_RULES) {
34
+ // Build tool.driver.rules from the provided rule set
35
+ const sarifRules = rules.map((rule) => ({
36
+ id: rule.id,
37
+ shortDescription: { text: rule.name },
38
+ fullDescription: { text: rule.description },
39
+ defaultConfiguration: {
40
+ level: severityToLevel(rule.defaultSeverity),
41
+ },
42
+ helpUri: `${TOOL_INFO_URI}#${rule.id}`,
43
+ }));
44
+ // Collect all findings across all results
45
+ const sarifResults = [];
46
+ const uniqueFiles = new Set();
47
+ for (const analysisResult of results) {
48
+ for (const finding of analysisResult.findings) {
49
+ uniqueFiles.add(finding.file);
50
+ const messageParts = [finding.message];
51
+ if (finding.detail)
52
+ messageParts.push(finding.detail);
53
+ if (finding.suggestion)
54
+ messageParts.push(`Fix: ${finding.suggestion}`);
55
+ sarifResults.push({
56
+ ruleId: finding.ruleId,
57
+ level: severityToLevel(finding.severity),
58
+ message: { text: messageParts.join('. ') },
59
+ locations: [
60
+ {
61
+ physicalLocation: {
62
+ artifactLocation: {
63
+ uri: fileToUri(finding.file),
64
+ uriBaseId: '%SRCROOT%',
65
+ },
66
+ region: {
67
+ startLine: finding.line,
68
+ startColumn: finding.column,
69
+ },
70
+ },
71
+ },
72
+ ],
73
+ });
74
+ }
75
+ }
76
+ // Build artifacts list from unique file paths
77
+ const artifacts = Array.from(uniqueFiles).map((file) => ({
78
+ location: {
79
+ uri: fileToUri(file),
80
+ uriBaseId: '%SRCROOT%',
81
+ },
82
+ }));
83
+ const log = {
84
+ $schema: SARIF_SCHEMA,
85
+ version: SARIF_VERSION,
86
+ runs: [
87
+ {
88
+ tool: {
89
+ driver: {
90
+ name: TOOL_NAME,
91
+ version: TOOL_VERSION,
92
+ informationUri: TOOL_INFO_URI,
93
+ rules: sarifRules,
94
+ },
95
+ },
96
+ results: sarifResults,
97
+ artifacts,
98
+ },
99
+ ],
100
+ };
101
+ return JSON.stringify(log, null, 2);
102
+ }
103
+ //# sourceMappingURL=sarif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../../src/reporters/sarif.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ddlforge Rule: ADD CONSTRAINT CHECK without NOT VALID
3
+ *
4
+ * Severity: BLOCKER
5
+ * Lock: ACCESS EXCLUSIVE
6
+ */
7
+ import { Rule } from './types.js';
8
+ export declare const checkConstraintNotValidRule: Rule;
9
+ //# sourceMappingURL=checkConstraintNotValid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkConstraintNotValid.d.ts","sourceRoot":"","sources":["../../../src/rules/checkConstraintNotValid.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAwB,MAAM,YAAY,CAAC;AA+ExD,eAAO,MAAM,2BAA2B,EAAE,IAwDzC,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * ddlforge Rule: ADD CONSTRAINT CHECK without NOT VALID
3
+ *
4
+ * Severity: BLOCKER
5
+ * Lock: ACCESS EXCLUSIVE
6
+ */
7
+ import { PostgresLockLevel } from '../engine/locks.js';
8
+ function extractCheckConstraintClauses(tokens) {
9
+ const clauses = [];
10
+ let parenDepth = 0;
11
+ let i = 0;
12
+ while (i < tokens.length) {
13
+ if (tokens[i].value === '(') {
14
+ parenDepth++;
15
+ i++;
16
+ continue;
17
+ }
18
+ if (tokens[i].value === ')') {
19
+ parenDepth--;
20
+ i++;
21
+ continue;
22
+ }
23
+ if (parenDepth === 0 && tokens[i].value === 'ADD') {
24
+ let currentIdx = i + 1;
25
+ let constraintName;
26
+ if (tokens[currentIdx]?.value === 'CONSTRAINT') {
27
+ currentIdx++;
28
+ constraintName = tokens[currentIdx]?.raw;
29
+ currentIdx++;
30
+ }
31
+ // Check if this clause is a CHECK constraint
32
+ if (tokens[currentIdx]?.value === 'CHECK') {
33
+ // Collect all tokens for this constraint until top-level comma or end
34
+ const clauseTokens = [];
35
+ let hasNotValid = false;
36
+ let subParen = 0;
37
+ while (currentIdx < tokens.length) {
38
+ const t = tokens[currentIdx];
39
+ if (t.value === '(')
40
+ subParen++;
41
+ if (t.value === ')')
42
+ subParen--;
43
+ if (subParen === 0 && t.value === ',') {
44
+ break;
45
+ }
46
+ clauseTokens.push(t);
47
+ if (t.value === 'NOT' && tokens[currentIdx + 1]?.value === 'VALID') {
48
+ hasNotValid = true;
49
+ }
50
+ currentIdx++;
51
+ }
52
+ clauses.push({
53
+ constraintName,
54
+ hasNotValid,
55
+ tokens: clauseTokens,
56
+ });
57
+ i = currentIdx;
58
+ continue;
59
+ }
60
+ }
61
+ i++;
62
+ }
63
+ return clauses;
64
+ }
65
+ export const checkConstraintNotValidRule = {
66
+ id: 'check-constraint-not-valid',
67
+ name: 'ADD CONSTRAINT CHECK without NOT VALID',
68
+ description: 'Adding a CHECK constraint without NOT VALID performs an immediate full-table scan under ACCESS EXCLUSIVE lock, blocking ALL reads and writes for the duration of the scan.',
69
+ defaultSeverity: 'BLOCKER',
70
+ lockLevel: PostgresLockLevel.ACCESS_EXCLUSIVE,
71
+ check(context) {
72
+ const findings = [];
73
+ for (const stmt of context.statements) {
74
+ if (stmt.hasIgnore(this.id))
75
+ continue;
76
+ const tokens = stmt.tokens;
77
+ if (tokens.length < 6)
78
+ continue;
79
+ if (tokens[0].value !== 'ALTER' || tokens[1].value !== 'TABLE')
80
+ continue;
81
+ // Extract table name
82
+ let idx = 2;
83
+ if (tokens[idx]?.value === 'ONLY')
84
+ idx++;
85
+ if (tokens[idx]?.value === 'IF' && tokens[idx + 1]?.value === 'EXISTS')
86
+ idx += 2;
87
+ const tableName = tokens[idx]?.raw ?? 'table';
88
+ idx++;
89
+ const clauses = extractCheckConstraintClauses(tokens.slice(idx));
90
+ for (const clause of clauses) {
91
+ if (!clause.hasNotValid) {
92
+ const cName = clause.constraintName ?? 'chk_name';
93
+ const cNameDisplay = clause.constraintName ? ` "${clause.constraintName}"` : '';
94
+ findings.push({
95
+ ruleId: this.id,
96
+ ruleName: this.name,
97
+ severity: this.defaultSeverity,
98
+ lockLevel: this.lockLevel,
99
+ message: `CHECK constraint${cNameDisplay} on table "${tableName}" added without NOT VALID.`,
100
+ detail: `Adding a CHECK constraint without NOT VALID performs an immediate full-table scan under ACCESS EXCLUSIVE lock, blocking ALL reads and writes for the duration of the scan.`,
101
+ suggestion: `1. Add constraint without scanning existing rows:\n` +
102
+ ` ALTER TABLE ${tableName} ADD CONSTRAINT ${cName} CHECK (...) NOT VALID;\n` +
103
+ `2. Validate in a separate transaction (no ACCESS EXCLUSIVE lock on existing rows):\n` +
104
+ ` ALTER TABLE ${tableName} VALIDATE CONSTRAINT ${cName};`,
105
+ file: context.filePath,
106
+ line: stmt.startLine,
107
+ column: stmt.startColumn,
108
+ codeSnippet: stmt.raw,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ return findings;
114
+ },
115
+ };
116
+ //# sourceMappingURL=checkConstraintNotValid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkConstraintNotValid.js","sourceRoot":"","sources":["../../../src/rules/checkConstraintNotValid.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export { foreignKeyNotValidRule } from './foreignKeyNotValid.js';
9
9
  export { prismaRenameDropAddRule } from './prismaRenameDropAdd.js';
10
10
  export { setNotNullFullScanRule } from './setNotNullFullScan.js';
11
11
  export { unbatchedBackfillRule } from './unbatchedBackfill.js';
12
+ export { checkConstraintNotValidRule } from './checkConstraintNotValid.js';
13
+ export { uniqueConstraintUsingIndexRule } from './uniqueConstraintUsingIndex.js';
14
+ export { sessionAdvisoryLockRule } from './sessionAdvisoryLock.js';
12
15
  import { Rule } from './types.js';
13
16
  export declare const ALL_RULES: Rule[];
14
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASlC,eAAO,MAAM,SAAS,EAAE,IAAI,EAQ3B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYlC,eAAO,MAAM,SAAS,EAAE,IAAI,EAW3B,CAAC"}
@@ -9,6 +9,9 @@ export { foreignKeyNotValidRule } from './foreignKeyNotValid.js';
9
9
  export { prismaRenameDropAddRule } from './prismaRenameDropAdd.js';
10
10
  export { setNotNullFullScanRule } from './setNotNullFullScan.js';
11
11
  export { unbatchedBackfillRule } from './unbatchedBackfill.js';
12
+ export { checkConstraintNotValidRule } from './checkConstraintNotValid.js';
13
+ export { uniqueConstraintUsingIndexRule } from './uniqueConstraintUsingIndex.js';
14
+ export { sessionAdvisoryLockRule } from './sessionAdvisoryLock.js';
12
15
  import { indexConcurrentlyRule } from './indexConcurrently.js';
13
16
  import { transactionTrapRule } from './transactionTrap.js';
14
17
  import { addColumnNotNullRule } from './addColumnNotNull.js';
@@ -16,6 +19,9 @@ import { foreignKeyNotValidRule } from './foreignKeyNotValid.js';
16
19
  import { prismaRenameDropAddRule } from './prismaRenameDropAdd.js';
17
20
  import { setNotNullFullScanRule } from './setNotNullFullScan.js';
18
21
  import { unbatchedBackfillRule } from './unbatchedBackfill.js';
22
+ import { checkConstraintNotValidRule } from './checkConstraintNotValid.js';
23
+ import { uniqueConstraintUsingIndexRule } from './uniqueConstraintUsingIndex.js';
24
+ import { sessionAdvisoryLockRule } from './sessionAdvisoryLock.js';
19
25
  export const ALL_RULES = [
20
26
  indexConcurrentlyRule,
21
27
  transactionTrapRule,
@@ -24,5 +30,8 @@ export const ALL_RULES = [
24
30
  prismaRenameDropAddRule,
25
31
  setNotNullFullScanRule,
26
32
  unbatchedBackfillRule,
33
+ checkConstraintNotValidRule,
34
+ uniqueConstraintUsingIndexRule,
35
+ sessionAdvisoryLockRule,
27
36
  ];
28
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;CACtB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,2BAA2B;IAC3B,8BAA8B;IAC9B,uBAAuB;CACxB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ddlforge Rule: Session-level advisory lock
3
+ *
4
+ * Severity: WARNING
5
+ * Lock: NONE
6
+ */
7
+ import { Rule } from './types.js';
8
+ export declare const sessionAdvisoryLockRule: Rule;
9
+ //# sourceMappingURL=sessionAdvisoryLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionAdvisoryLock.d.ts","sourceRoot":"","sources":["../../../src/rules/sessionAdvisoryLock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAwB,MAAM,YAAY,CAAC;AAGxD,eAAO,MAAM,uBAAuB,EAAE,IA8CrC,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * ddlforge Rule: Session-level advisory lock
3
+ *
4
+ * Severity: WARNING
5
+ * Lock: NONE
6
+ */
7
+ import { PostgresLockLevel } from '../engine/locks.js';
8
+ export const sessionAdvisoryLockRule = {
9
+ id: 'session-advisory-lock',
10
+ name: 'Session-level advisory lock',
11
+ description: 'Session-level advisory locks (pg_advisory_lock / pg_try_advisory_lock) are tied to the database connection, not the transaction. In connection-pooled environments, these locks leak across connections.',
12
+ defaultSeverity: 'WARNING',
13
+ lockLevel: PostgresLockLevel.NONE,
14
+ check(context) {
15
+ const findings = [];
16
+ for (const stmt of context.statements) {
17
+ if (stmt.hasIgnore(this.id))
18
+ continue;
19
+ for (const token of stmt.tokens) {
20
+ const raw = token.raw;
21
+ // Match pg_advisory_lock or pg_try_advisory_lock (case-insensitive)
22
+ // but NOT pg_advisory_xact_lock or pg_try_advisory_xact_lock
23
+ if (/^pg_(try_)?advisory_lock$/i.test(raw) &&
24
+ !/^pg_(try_)?advisory_xact_lock$/i.test(raw)) {
25
+ findings.push({
26
+ ruleId: this.id,
27
+ ruleName: this.name,
28
+ severity: this.defaultSeverity,
29
+ lockLevel: this.lockLevel,
30
+ message: `Session-level advisory lock "${raw}(...)" detected.`,
31
+ detail: `Session-level advisory locks (pg_advisory_lock / pg_try_advisory_lock) are tied to the database connection, not the transaction. ` +
32
+ `In connection-pooled environments (PgBouncer transaction mode), these locks leak across connections, leading to stranded locks and potential migration deadlocks.`,
33
+ suggestion: `Replace with transaction-scoped variants that auto-release on COMMIT or ROLLBACK:\n` +
34
+ ` pg_advisory_xact_lock(key) -- blocks until acquired\n` +
35
+ ` pg_try_advisory_xact_lock(key) -- returns false if not immediately available`,
36
+ file: context.filePath,
37
+ line: stmt.startLine,
38
+ column: stmt.startColumn,
39
+ codeSnippet: stmt.raw,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ return findings;
45
+ },
46
+ };
47
+ //# sourceMappingURL=sessionAdvisoryLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionAdvisoryLock.js","sourceRoot":"","sources":["../../../src/rules/sessionAdvisoryLock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAS;IAC3C,EAAE,EAAE,uBAAuB;IAC3B,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,0MAA0M;IACvN,eAAe,EAAE,SAAS;IAC1B,SAAS,EAAE,iBAAiB,CAAC,IAAI;IAEjC,KAAK,CAAC,OAAoB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,SAAS;YAEtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;gBAEtB,oEAAoE;gBACpE,6DAA6D;gBAC7D,IACE,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC;oBACtC,CAAC,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC5C,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC;wBACZ,MAAM,EAAE,IAAI,CAAC,EAAE;wBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,QAAQ,EAAE,IAAI,CAAC,eAAe;wBAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,OAAO,EAAE,gCAAgC,GAAG,kBAAkB;wBAC9D,MAAM,EACJ,mIAAmI;4BACnI,mKAAmK;wBACrK,UAAU,EACR,qFAAqF;4BACrF,8DAA8D;4BAC9D,iFAAiF;wBACnF,IAAI,EAAE,OAAO,CAAC,QAAQ;wBACtB,IAAI,EAAE,IAAI,CAAC,SAAS;wBACpB,MAAM,EAAE,IAAI,CAAC,WAAW;wBACxB,WAAW,EAAE,IAAI,CAAC,GAAG;qBACtB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ddlforge Rule: ADD CONSTRAINT UNIQUE without pre-built index
3
+ *
4
+ * Severity: BLOCKER
5
+ * Lock: SHARE
6
+ */
7
+ import { Rule } from './types.js';
8
+ export declare const uniqueConstraintUsingIndexRule: Rule;
9
+ //# sourceMappingURL=uniqueConstraintUsingIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniqueConstraintUsingIndex.d.ts","sourceRoot":"","sources":["../../../src/rules/uniqueConstraintUsingIndex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAwB,MAAM,YAAY,CAAC;AA0GxD,eAAO,MAAM,8BAA8B,EAAE,IAyD5C,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * ddlforge Rule: ADD CONSTRAINT UNIQUE without pre-built index
3
+ *
4
+ * Severity: BLOCKER
5
+ * Lock: SHARE
6
+ */
7
+ import { PostgresLockLevel } from '../engine/locks.js';
8
+ function extractUniqueConstraintClauses(tokens) {
9
+ const clauses = [];
10
+ let parenDepth = 0;
11
+ let i = 0;
12
+ while (i < tokens.length) {
13
+ if (tokens[i].value === '(') {
14
+ parenDepth++;
15
+ i++;
16
+ continue;
17
+ }
18
+ if (tokens[i].value === ')') {
19
+ parenDepth--;
20
+ i++;
21
+ continue;
22
+ }
23
+ if (parenDepth === 0 && tokens[i].value === 'ADD') {
24
+ let currentIdx = i + 1;
25
+ let constraintName;
26
+ if (tokens[currentIdx]?.value === 'CONSTRAINT') {
27
+ currentIdx++;
28
+ constraintName = tokens[currentIdx]?.raw;
29
+ currentIdx++;
30
+ }
31
+ // Check if this clause is a UNIQUE constraint
32
+ if (tokens[currentIdx]?.value === 'UNIQUE') {
33
+ currentIdx++;
34
+ // If next significant token is USING, it's the safe USING INDEX form
35
+ const isUsingIndex = tokens[currentIdx]?.value === 'USING' &&
36
+ tokens[currentIdx + 1]?.value === 'INDEX';
37
+ // Collect column list from the (...) after UNIQUE, if present
38
+ let columns = '<columns>';
39
+ if (!isUsingIndex && tokens[currentIdx]?.value === '(') {
40
+ // Collect raw tokens inside the parens
41
+ const colTokens = [];
42
+ let subParen = 1;
43
+ currentIdx++; // move past '('
44
+ while (currentIdx < tokens.length && subParen > 0) {
45
+ const t = tokens[currentIdx];
46
+ if (t.value === '(')
47
+ subParen++;
48
+ else if (t.value === ')') {
49
+ subParen--;
50
+ if (subParen === 0)
51
+ break;
52
+ }
53
+ colTokens.push(t.raw);
54
+ currentIdx++;
55
+ }
56
+ columns = colTokens.join(', ');
57
+ }
58
+ // Collect all tokens for this constraint until top-level comma or end
59
+ const clauseTokens = [];
60
+ let subParen = 0;
61
+ // Reset to position right after UNIQUE keyword (already advanced above)
62
+ // Re-scan from after UNIQUE to gather full clause tokens
63
+ let scanIdx = i + 1;
64
+ // Skip past CONSTRAINT <name> and UNIQUE
65
+ if (tokens[scanIdx]?.value === 'CONSTRAINT')
66
+ scanIdx += 2;
67
+ scanIdx++; // skip UNIQUE
68
+ while (scanIdx < tokens.length) {
69
+ const t = tokens[scanIdx];
70
+ if (t.value === '(')
71
+ subParen++;
72
+ if (t.value === ')')
73
+ subParen--;
74
+ if (subParen === 0 && t.value === ',')
75
+ break;
76
+ clauseTokens.push(t);
77
+ scanIdx++;
78
+ }
79
+ clauses.push({
80
+ constraintName,
81
+ columns,
82
+ isUsingIndex,
83
+ tokens: clauseTokens,
84
+ });
85
+ i = scanIdx;
86
+ continue;
87
+ }
88
+ }
89
+ i++;
90
+ }
91
+ return clauses;
92
+ }
93
+ export const uniqueConstraintUsingIndexRule = {
94
+ id: 'unique-constraint-using-index',
95
+ name: 'ADD CONSTRAINT UNIQUE without pre-built index',
96
+ description: 'Adding a UNIQUE constraint directly takes a SHARE lock and performs a full-table scan, blocking all concurrent writes (INSERT, UPDATE, DELETE) for the entire duration.',
97
+ defaultSeverity: 'BLOCKER',
98
+ lockLevel: PostgresLockLevel.SHARE,
99
+ check(context) {
100
+ const findings = [];
101
+ for (const stmt of context.statements) {
102
+ if (stmt.hasIgnore(this.id))
103
+ continue;
104
+ const tokens = stmt.tokens;
105
+ if (tokens.length < 6)
106
+ continue;
107
+ if (tokens[0].value !== 'ALTER' || tokens[1].value !== 'TABLE')
108
+ continue;
109
+ // Extract table name
110
+ let idx = 2;
111
+ if (tokens[idx]?.value === 'ONLY')
112
+ idx++;
113
+ if (tokens[idx]?.value === 'IF' && tokens[idx + 1]?.value === 'EXISTS')
114
+ idx += 2;
115
+ const tableName = tokens[idx]?.raw ?? 'table';
116
+ idx++;
117
+ const clauses = extractUniqueConstraintClauses(tokens.slice(idx));
118
+ for (const clause of clauses) {
119
+ if (!clause.isUsingIndex) {
120
+ const cName = clause.constraintName ?? 'uq_name';
121
+ const cNameDisplay = clause.constraintName ? ` "${clause.constraintName}"` : '';
122
+ const idxName = clause.constraintName ? `${clause.constraintName}_idx` : 'uq_idx_name';
123
+ findings.push({
124
+ ruleId: this.id,
125
+ ruleName: this.name,
126
+ severity: this.defaultSeverity,
127
+ lockLevel: this.lockLevel,
128
+ message: `UNIQUE constraint${cNameDisplay} on table "${tableName}" added without a pre-built index.`,
129
+ detail: `Adding a UNIQUE constraint directly takes a SHARE lock and performs a full-table scan, blocking all concurrent writes (INSERT, UPDATE, DELETE) for the entire duration.`,
130
+ suggestion: `1. Build the unique index concurrently first (no table lock):\n` +
131
+ ` CREATE UNIQUE INDEX CONCURRENTLY ${idxName} ON ${tableName} (${clause.columns});\n` +
132
+ `2. Attach it as a constraint without a table scan:\n` +
133
+ ` ALTER TABLE ${tableName} ADD CONSTRAINT ${cName} UNIQUE USING INDEX ${idxName};`,
134
+ file: context.filePath,
135
+ line: stmt.startLine,
136
+ column: stmt.startColumn,
137
+ codeSnippet: stmt.raw,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ return findings;
143
+ },
144
+ };
145
+ //# sourceMappingURL=uniqueConstraintUsingIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniqueConstraintUsingIndex.js","sourceRoot":"","sources":["../../../src/rules/uniqueConstraintUsingIndex.ts"],"names":[],"mappings":"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"}
@@ -6,14 +6,23 @@
6
6
  * 1. Dynamically imports `pg` at runtime (graceful error if not installed).
7
7
  * 2. Parses SQL migration files into individual statements (reuses the existing
8
8
  * zero-dependency lexer — no duplicate parser code).
9
- * 3. For each statement:
10
- * a. Opens a transaction on a fresh client.
11
- * b. Injects `SET LOCAL lock_timeout` and `SET LOCAL statement_timeout`.
12
- * c. Executes the statement.
13
- * d. On error 55P03 (lock_not_available) or 57014 (query_canceled):
14
- * – Rolls back, waits for a full-jitter backoff interval, retries.
15
- * e. On avalanche detected by the lock monitor: rolls back and aborts.
16
- * f. On success: commits and proceeds to the next statement.
9
+ * 3. For each statement, selects one of two execution paths:
10
+ *
11
+ * a. **Non-transactional path** (CREATE/DROP INDEX CONCURRENTLY, REINDEX
12
+ * CONCURRENTLY, VACUUM):
13
+ * Sets session-level `lock_timeout` / `statement_timeout`.
14
+ * – Executes the statement outside any transaction block.
15
+ * Always RESETs the session timeouts in a `finally` block.
16
+ *
17
+ * b. **Transactional path** (all other statements):
18
+ * – Opens a transaction with `BEGIN`.
19
+ * – Injects `SET LOCAL lock_timeout` and `SET LOCAL statement_timeout`.
20
+ * – Executes the statement.
21
+ * – On error 55P03 (lock_not_available) or 57014 (query_canceled):
22
+ * Rolls back, waits for a full-jitter backoff interval, retries.
23
+ * – On avalanche detected by the lock monitor: rolls back and aborts.
24
+ * – On success: commits and proceeds to the next statement.
25
+ *
17
26
  * 4. Reports live progress via an optional EventEmitter-compatible callback.
18
27
  *
19
28
  * Zero-dependency invariant
@@ -65,6 +74,20 @@ export interface ExecutionResult {
65
74
  error?: string;
66
75
  avalanche?: boolean;
67
76
  }
77
+ /**
78
+ * Returns true for statements that PostgreSQL forbids inside a transaction
79
+ * block and must therefore run outside BEGIN … COMMIT:
80
+ * - CREATE INDEX CONCURRENTLY
81
+ * - CREATE UNIQUE INDEX CONCURRENTLY
82
+ * - DROP INDEX CONCURRENTLY
83
+ * - REINDEX … CONCURRENTLY
84
+ * - VACUUM (any form)
85
+ *
86
+ * Detection is intentionally conservative: we normalise whitespace and
87
+ * uppercase the first ~120 characters so that leading comments or extra
88
+ * spaces never cause a false negative.
89
+ */
90
+ export declare function isConcurrentStatement(sql: string): boolean;
68
91
  /**
69
92
  * Executes a SQL migration file against a PostgreSQL database with:
70
93
  * - per-statement lock-timeout injection
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/runner/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAUH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuGD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,CAAC,CAmQ1B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/runner/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAUH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqFD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS1D;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,CAAC,CA2U1B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D"}
@@ -6,14 +6,23 @@
6
6
  * 1. Dynamically imports `pg` at runtime (graceful error if not installed).
7
7
  * 2. Parses SQL migration files into individual statements (reuses the existing
8
8
  * zero-dependency lexer — no duplicate parser code).
9
- * 3. For each statement:
10
- * a. Opens a transaction on a fresh client.
11
- * b. Injects `SET LOCAL lock_timeout` and `SET LOCAL statement_timeout`.
12
- * c. Executes the statement.
13
- * d. On error 55P03 (lock_not_available) or 57014 (query_canceled):
14
- * – Rolls back, waits for a full-jitter backoff interval, retries.
15
- * e. On avalanche detected by the lock monitor: rolls back and aborts.
16
- * f. On success: commits and proceeds to the next statement.
9
+ * 3. For each statement, selects one of two execution paths:
10
+ *
11
+ * a. **Non-transactional path** (CREATE/DROP INDEX CONCURRENTLY, REINDEX
12
+ * CONCURRENTLY, VACUUM):
13
+ * Sets session-level `lock_timeout` / `statement_timeout`.
14
+ * – Executes the statement outside any transaction block.
15
+ * Always RESETs the session timeouts in a `finally` block.
16
+ *
17
+ * b. **Transactional path** (all other statements):
18
+ * – Opens a transaction with `BEGIN`.
19
+ * – Injects `SET LOCAL lock_timeout` and `SET LOCAL statement_timeout`.
20
+ * – Executes the statement.
21
+ * – On error 55P03 (lock_not_available) or 57014 (query_canceled):
22
+ * Rolls back, waits for a full-jitter backoff interval, retries.
23
+ * – On avalanche detected by the lock monitor: rolls back and aborts.
24
+ * – On success: commits and proceeds to the next statement.
25
+ *
17
26
  * 4. Reports live progress via an optional EventEmitter-compatible callback.
18
27
  *
19
28
  * Zero-dependency invariant
@@ -83,6 +92,32 @@ function pgErrorCode(err) {
83
92
  }
84
93
  return '';
85
94
  }
95
+ /**
96
+ * Returns true for statements that PostgreSQL forbids inside a transaction
97
+ * block and must therefore run outside BEGIN … COMMIT:
98
+ * - CREATE INDEX CONCURRENTLY
99
+ * - CREATE UNIQUE INDEX CONCURRENTLY
100
+ * - DROP INDEX CONCURRENTLY
101
+ * - REINDEX … CONCURRENTLY
102
+ * - VACUUM (any form)
103
+ *
104
+ * Detection is intentionally conservative: we normalise whitespace and
105
+ * uppercase the first ~120 characters so that leading comments or extra
106
+ * spaces never cause a false negative.
107
+ */
108
+ export function isConcurrentStatement(sql) {
109
+ // Strip leading whitespace / line comments and take the first ~120 chars.
110
+ const head = sql.trimStart().slice(0, 120).replace(/\s+/g, ' ').toUpperCase();
111
+ if (/^CREATE(\s+UNIQUE)?\s+INDEX\s+CONCURRENTLY\b/.test(head))
112
+ return true;
113
+ if (/^DROP\s+INDEX\s+CONCURRENTLY\b/.test(head))
114
+ return true;
115
+ if (/^REINDEX\b/.test(head) && head.includes('CONCURRENTLY'))
116
+ return true;
117
+ if (/^VACUUM\b/.test(head))
118
+ return true;
119
+ return false;
120
+ }
86
121
  /* ------------------------------------------------------------------ */
87
122
  /* Statement text reconstruction */
88
123
  /* ------------------------------------------------------------------ */
@@ -215,64 +250,133 @@ export async function executeMigration(sql, options) {
215
250
  signal,
216
251
  })
217
252
  : null;
218
- try {
219
- // Open transaction
220
- await client.query('BEGIN');
221
- // Inject session-local timeouts (scoped to this transaction)
222
- await client.query(`SET LOCAL lock_timeout = '${lockTimeoutMs}'`);
223
- await client.query(`SET LOCAL statement_timeout = '${statementTimeoutMs}'`);
224
- // Execute the DDL statement
225
- await client.query(stmtSql);
226
- // Commit
227
- await client.query('COMMIT');
228
- // Stop monitor — execution succeeded, no avalanche
229
- monitor?.stop();
230
- const monResult = await monitor?.result;
231
- if (monResult?.avalanche) {
232
- // Race condition: monitor fired just as we committed.
233
- // The COMMIT succeeded so we treat this as a success.
234
- // (pg_cancel_backend after COMMIT is a no-op.)
253
+ const isConcurrent = isConcurrentStatement(stmtSql);
254
+ if (isConcurrent) {
255
+ // ── Non-transactional path (CONCURRENTLY / VACUUM) ─────────────
256
+ // PostgreSQL forbids these inside a transaction block.
257
+ // Apply session-level timeouts instead of transaction-local ones
258
+ // and always RESET them in the finally block.
259
+ try {
260
+ await client.query(`SET lock_timeout = '${lockTimeoutMs}'`);
261
+ await client.query(`SET statement_timeout = '${statementTimeoutMs}'`);
262
+ // Execute the statement outside any transaction
263
+ await client.query(stmtSql);
264
+ // Stop monitor — execution succeeded, no avalanche
265
+ monitor?.stop();
266
+ const monResult = await monitor?.result;
267
+ if (monResult?.avalanche) {
268
+ // Race: monitor fired just as the statement completed.
269
+ // Statement already succeeded so treat as success.
270
+ }
271
+ succeeded = true;
272
+ stmtError = undefined;
273
+ break; // exit retry loop
274
+ }
275
+ catch (err) {
276
+ const code = pgErrorCode(err);
277
+ // Stop monitor before doing anything else
278
+ monitor?.stop();
279
+ const monResult = await monitor?.result;
280
+ // No transaction to roll back for concurrent statements.
281
+ if (monResult?.avalanche) {
282
+ // Lock-queue avalanche: abort the entire migration
283
+ onProgress?.({
284
+ kind: 'avalanche-abort',
285
+ statementIndex: i,
286
+ totalStatements: total,
287
+ statementSql: stmtSql,
288
+ attempt,
289
+ elapsedMs: Date.now() - migrationStart,
290
+ error: `Lock-queue avalanche: ${monResult.blockedCount} backend(s) queued. Cancelled at ${monResult.cancelledAt}.`,
291
+ });
292
+ globalError = `Lock-queue avalanche detected. ${monResult.blockedCount} backend(s) were waiting behind migration PID ${migrationPid}. Migration aborted to protect connection pool.`;
293
+ avalanche = true;
294
+ break;
295
+ }
296
+ if (isLockError(code) && attempt < maxRetries) {
297
+ // Retryable lock error — continue retry loop
298
+ stmtError = `[${code}] ${err.message ?? String(err)}`;
299
+ continue;
300
+ }
301
+ // Non-retryable error or max retries exhausted
302
+ stmtError = `[${code || 'ERR'}] ${err.message ?? String(err)}`;
303
+ break;
304
+ }
305
+ finally {
306
+ // Always reset session-level timeouts so the connection is
307
+ // returned to the pool in a clean state.
308
+ try {
309
+ await client.query('RESET lock_timeout');
310
+ }
311
+ catch { /* ignore */ }
312
+ try {
313
+ await client.query('RESET statement_timeout');
314
+ }
315
+ catch { /* ignore */ }
316
+ client.release?.();
235
317
  }
236
- succeeded = true;
237
- stmtError = undefined;
238
- break; // exit retry loop
239
318
  }
240
- catch (err) {
241
- const code = pgErrorCode(err);
242
- // Stop monitor before doing anything else
243
- monitor?.stop();
244
- const monResult = await monitor?.result;
245
- // Rollback the failed transaction
319
+ else {
320
+ // ── Transactional path (all other DDL / DML) ────────────────────
246
321
  try {
247
- await client.query('ROLLBACK');
322
+ // Open transaction
323
+ await client.query('BEGIN');
324
+ // Inject session-local timeouts (scoped to this transaction)
325
+ await client.query(`SET LOCAL lock_timeout = '${lockTimeoutMs}'`);
326
+ await client.query(`SET LOCAL statement_timeout = '${statementTimeoutMs}'`);
327
+ // Execute the DDL statement
328
+ await client.query(stmtSql);
329
+ // Commit
330
+ await client.query('COMMIT');
331
+ // Stop monitor — execution succeeded, no avalanche
332
+ monitor?.stop();
333
+ const monResult = await monitor?.result;
334
+ if (monResult?.avalanche) {
335
+ // Race condition: monitor fired just as we committed.
336
+ // The COMMIT succeeded so we treat this as a success.
337
+ // (pg_cancel_backend after COMMIT is a no-op.)
338
+ }
339
+ succeeded = true;
340
+ stmtError = undefined;
341
+ break; // exit retry loop
248
342
  }
249
- catch { /* ignore */ }
250
- if (monResult?.avalanche) {
251
- // Lock-queue avalanche: abort the entire migration
252
- onProgress?.({
253
- kind: 'avalanche-abort',
254
- statementIndex: i,
255
- totalStatements: total,
256
- statementSql: stmtSql,
257
- attempt,
258
- elapsedMs: Date.now() - migrationStart,
259
- error: `Lock-queue avalanche: ${monResult.blockedCount} backend(s) queued. Cancelled at ${monResult.cancelledAt}.`,
260
- });
261
- globalError = `Lock-queue avalanche detected. ${monResult.blockedCount} backend(s) were waiting behind migration PID ${migrationPid}. Migration aborted to protect connection pool.`;
262
- avalanche = true;
343
+ catch (err) {
344
+ const code = pgErrorCode(err);
345
+ // Stop monitor before doing anything else
346
+ monitor?.stop();
347
+ const monResult = await monitor?.result;
348
+ // Rollback the failed transaction
349
+ try {
350
+ await client.query('ROLLBACK');
351
+ }
352
+ catch { /* ignore */ }
353
+ if (monResult?.avalanche) {
354
+ // Lock-queue avalanche: abort the entire migration
355
+ onProgress?.({
356
+ kind: 'avalanche-abort',
357
+ statementIndex: i,
358
+ totalStatements: total,
359
+ statementSql: stmtSql,
360
+ attempt,
361
+ elapsedMs: Date.now() - migrationStart,
362
+ error: `Lock-queue avalanche: ${monResult.blockedCount} backend(s) queued. Cancelled at ${monResult.cancelledAt}.`,
363
+ });
364
+ globalError = `Lock-queue avalanche detected. ${monResult.blockedCount} backend(s) were waiting behind migration PID ${migrationPid}. Migration aborted to protect connection pool.`;
365
+ avalanche = true;
366
+ break;
367
+ }
368
+ if (isLockError(code) && attempt < maxRetries) {
369
+ // Retryable lock error — continue retry loop
370
+ stmtError = `[${code}] ${err.message ?? String(err)}`;
371
+ continue;
372
+ }
373
+ // Non-retryable error or max retries exhausted
374
+ stmtError = `[${code || 'ERR'}] ${err.message ?? String(err)}`;
263
375
  break;
264
376
  }
265
- if (isLockError(code) && attempt < maxRetries) {
266
- // Retryable lock error — continue retry loop
267
- stmtError = `[${code}] ${err.message ?? String(err)}`;
268
- continue;
377
+ finally {
378
+ client.release?.();
269
379
  }
270
- // Non-retryable error or max retries exhausted
271
- stmtError = `[${code || 'ERR'}] ${err.message ?? String(err)}`;
272
- break;
273
- }
274
- finally {
275
- client.release?.();
276
380
  }
277
381
  } // end retry loop
278
382
  if (avalanche)
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/runner/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/runner/executor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ddlforge",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Ultra-fast, zero-runtime-dependency Postgres migration lock linter and data-loss prevention engine CLI in Node.js 20+ and TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -16,7 +16,7 @@
16
16
  "scripts": {
17
17
  "build": "tsc && node -e \"const fs=require('fs'); try{fs.chmodSync('dist/bin/ddlforge.js', 0o755)}catch{}\"",
18
18
  "test:build": "tsc -p tsconfig.test.json",
19
- "test": "npm run test:build && node --test dist/test/analyzer.test.js dist/test/runner.test.js",
19
+ "test": "npm run test:build && node --test dist/test/analyzer.test.js dist/test/runner.test.js dist/test/linter.test.js dist/test/reporter.test.js",
20
20
  "test:watch": "node --test --watch dist/test/analyzer.test.js dist/test/runner.test.js",
21
21
  "prepack": "node -e \"const fs=require('fs'); try{fs.rmSync('dist/test', {recursive:true, force:true})}catch{}\"",
22
22
  "prepublishOnly": "npm run build && node -e \"const fs=require('fs'); try{fs.rmSync('dist/test', {recursive:true, force:true})}catch{}\""