@memberjunction/generic-database-provider 5.28.0 → 5.29.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.
@@ -1 +1 @@
1
- {"version":3,"file":"queryPagingEngine.js","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryPagingEngine.js","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { DatabasePlatform, UserInfo, QueryDependencySpec, QueryParameterInfo } from '@memberjunction/core';
2
+ import { CompositionResult, CompositionCTEInfo } from './queryCompositionEngine.js';
3
+ import { PagingWrappedSQL } from './queryPagingEngine.js';
4
+ import { type QueryTemplateInput } from '@memberjunction/query-processor';
5
+ /**
6
+ * Diagnostic metadata for a single composition operation.
7
+ */
8
+ export interface CompositionDiagnostic {
9
+ /** Name of the dependency query resolved */
10
+ DepName: string;
11
+ /** Category path of the dependency */
12
+ CategoryPath: string;
13
+ /** Generated CTE name in the output */
14
+ CTEName: string;
15
+ /** Whether ORDER BY was stripped from this dep */
16
+ OrderByStripped: boolean;
17
+ /** Number of inner CTEs hoisted from this dep */
18
+ InnerCTEsHoisted: number;
19
+ }
20
+ /**
21
+ * Pipeline trace capturing the SQL state after each pass.
22
+ * Used for error diagnosis — when SQL Server rejects the output, the
23
+ * caller can see what each pass produced to identify which pass
24
+ * mangled the SQL.
25
+ */
26
+ export interface RenderTrace {
27
+ /** SQL after composition ({{ }}/{% %} tokens still present) */
28
+ AfterComposition: string;
29
+ /** Composition metadata: which deps resolved, which CTEs generated */
30
+ CompositionDiagnostics: CompositionDiagnostic[];
31
+ /** SQL after Nunjucks template evaluation (fully resolved, executable) */
32
+ AfterTemplates: string;
33
+ /** SQL after paging (final) — only set if paging was applied */
34
+ AfterPaging: string | null;
35
+ }
36
+ /**
37
+ * Context passed to {@link RenderPipeline.Run} controlling each pipeline stage.
38
+ */
39
+ export interface RenderContext {
40
+ /** Target database platform */
41
+ Platform: DatabasePlatform;
42
+ /** User context for permission checks on referenced queries */
43
+ ContextUser?: UserInfo;
44
+ /** Parameter values from the caller */
45
+ Parameters?: Record<string, string>;
46
+ /** Formal parameter definitions (for validation). Null = skip validation. */
47
+ ParameterDefinitions?: QueryParameterInfo[];
48
+ /** Whether the outer query uses Nunjucks templates */
49
+ UsesTemplate?: boolean;
50
+ /** Inline dependency specs for transient query testing */
51
+ Dependencies?: QueryDependencySpec[];
52
+ /** Original (pre-composition) SQL — used for template input metadata */
53
+ OriginalSQL?: string;
54
+ /** Full query metadata object (saved query path). When provided, passed
55
+ * directly to processQueryTemplate for parameter validation. When omitted,
56
+ * a synthetic QueryTemplateInput is built from OriginalSQL + ParameterDefinitions. */
57
+ QueryInfo?: QueryTemplateInput;
58
+ /** Paging parameters (omit to skip paging) */
59
+ Paging?: {
60
+ StartRow: number;
61
+ MaxRows: number;
62
+ };
63
+ /** MaxRows safety limit for transient query testing */
64
+ MaxRows?: number;
65
+ }
66
+ /**
67
+ * Result returned by {@link RenderPipeline.Run}.
68
+ */
69
+ export interface RenderResult {
70
+ /** The final SQL ready for execution */
71
+ FinalSQL: string;
72
+ /** Parameters that were applied during template processing */
73
+ AppliedParameters: Record<string, string>;
74
+ /** Whether composition tokens were found and resolved */
75
+ HasCompositions: boolean;
76
+ /** Metadata about each CTE generated during composition */
77
+ CTEs: CompositionCTEInfo[];
78
+ /** Pipeline trace for error diagnosis */
79
+ Trace: RenderTrace;
80
+ /** Paging result (if paging was applied) */
81
+ PagingResult: PagingWrappedSQL | null;
82
+ }
83
+ /**
84
+ * RenderPipeline wraps the existing composition → template → paging calls
85
+ * into a single entry point with enforced ordering and diagnostic tracing.
86
+ *
87
+ * **Pipeline order** (this is a data dependency, not a convention):
88
+ * 1. **Composition** resolves `{{query:"..."}}` tokens into CTEs. Must run
89
+ * BEFORE Nunjucks because pass-through parameters rename `{{ innerParam }}`
90
+ * to `{{ outerParam }}` — Nunjucks needs those tokens intact.
91
+ * 2. **Nunjucks** evaluates `{{ param | filter }}` and `{% if/for %}` blocks.
92
+ * Must run AFTER composition and BEFORE paging.
93
+ * 3. **Paging** detects ORDER BY and injects OFFSET/FETCH or LIMIT/OFFSET.
94
+ * Must run AFTER Nunjucks because it needs to detect whether
95
+ * `{% if SortField %} ORDER BY ... {% endif %}` resolved to an actual
96
+ * ORDER BY or not — that depends on runtime parameter values.
97
+ *
98
+ * The `Trace` field on the result captures the SQL state after each pass,
99
+ * enabling diagnosis when SQL Server rejects the output.
100
+ */
101
+ export declare class RenderPipeline {
102
+ /**
103
+ * Runs the full rendering pipeline: composition → Nunjucks → paging.
104
+ *
105
+ * @param sql - Raw SQL with potential composition tokens and template expressions
106
+ * @param ctx - Pipeline context (platform, user, parameters, paging, etc.)
107
+ * @returns Final SQL, applied parameters, composition metadata, and diagnostic trace
108
+ */
109
+ static Run(sql: string, ctx: RenderContext): RenderResult;
110
+ /**
111
+ * Resolves only the composition step — for callers that need composition
112
+ * without the full pipeline (e.g., save-time token analysis).
113
+ *
114
+ * Wraps {@link QueryCompositionEngine.ResolveComposition} to maintain the
115
+ * existing public API while the internal implementation may change.
116
+ */
117
+ static ResolveCompositionOnly(sql: string, platform: DatabasePlatform, contextUser: UserInfo, outerParams?: Record<string, string>, inlineDependencies?: QueryDependencySpec[]): CompositionResult;
118
+ /**
119
+ * Checks whether SQL contains composition tokens.
120
+ * Convenience wrapper for callers that need a fast guard.
121
+ */
122
+ static HasCompositionTokens(sql: string): boolean;
123
+ private static runComposition;
124
+ private static runTemplates;
125
+ private static applyMaxRows;
126
+ private static getDialect;
127
+ /**
128
+ * Strips SQL comments (single-line -- and block comments) from a SQL string.
129
+ * Preserves single-quoted string literals to avoid stripping inside them.
130
+ */
131
+ private static stripSQLComments;
132
+ }
133
+ //# sourceMappingURL=renderPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderPipeline.d.ts","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ import { GetDialect } from '@memberjunction/sql-dialect';
2
+ import { QueryCompositionEngine } from './queryCompositionEngine.js';
3
+ import { QueryPagingEngine } from './queryPagingEngine.js';
4
+ import { QueryParameterProcessor } from '@memberjunction/query-processor';
5
+ // ════════════════════════════════════════════════════════════════════
6
+ // Pipeline
7
+ // ════════════════════════════════════════════════════════════════════
8
+ /**
9
+ * RenderPipeline wraps the existing composition → template → paging calls
10
+ * into a single entry point with enforced ordering and diagnostic tracing.
11
+ *
12
+ * **Pipeline order** (this is a data dependency, not a convention):
13
+ * 1. **Composition** resolves `{{query:"..."}}` tokens into CTEs. Must run
14
+ * BEFORE Nunjucks because pass-through parameters rename `{{ innerParam }}`
15
+ * to `{{ outerParam }}` — Nunjucks needs those tokens intact.
16
+ * 2. **Nunjucks** evaluates `{{ param | filter }}` and `{% if/for %}` blocks.
17
+ * Must run AFTER composition and BEFORE paging.
18
+ * 3. **Paging** detects ORDER BY and injects OFFSET/FETCH or LIMIT/OFFSET.
19
+ * Must run AFTER Nunjucks because it needs to detect whether
20
+ * `{% if SortField %} ORDER BY ... {% endif %}` resolved to an actual
21
+ * ORDER BY or not — that depends on runtime parameter values.
22
+ *
23
+ * The `Trace` field on the result captures the SQL state after each pass,
24
+ * enabling diagnosis when SQL Server rejects the output.
25
+ */
26
+ export class RenderPipeline {
27
+ /**
28
+ * Runs the full rendering pipeline: composition → Nunjucks → paging.
29
+ *
30
+ * @param sql - Raw SQL with potential composition tokens and template expressions
31
+ * @param ctx - Pipeline context (platform, user, parameters, paging, etc.)
32
+ * @returns Final SQL, applied parameters, composition metadata, and diagnostic trace
33
+ */
34
+ static Run(sql, ctx) {
35
+ let currentSQL = sql;
36
+ let appliedParameters = {};
37
+ // ── Step 1: Composition ──────────────────────────────────────
38
+ const compositionResult = RenderPipeline.runComposition(currentSQL, ctx);
39
+ currentSQL = compositionResult.ResolvedSQL;
40
+ const afterComposition = currentSQL;
41
+ const compositionDiagnostics = buildCompositionDiagnostics(compositionResult);
42
+ // ── Step 1.5: Strip SQL comments ─────────────────────────────
43
+ // Comments serve no runtime purpose in executed SQL and can contain
44
+ // {{ }} patterns (e.g. documentation examples) that would crash
45
+ // Nunjucks. Strip them after composition (which correctly ignores
46
+ // comment-embedded tokens) and before Nunjucks processes the SQL.
47
+ // Comments are still visible in Trace.AfterComposition for debugging.
48
+ currentSQL = RenderPipeline.stripSQLComments(currentSQL);
49
+ // ── Step 2: Nunjucks template evaluation ─────────────────────
50
+ const templateResult = RenderPipeline.runTemplates(currentSQL, sql, ctx, compositionResult);
51
+ currentSQL = templateResult.processedSQL;
52
+ appliedParameters = templateResult.appliedParameters;
53
+ const afterTemplates = currentSQL;
54
+ // ── Step 3: MaxRows safety limit (if specified) ──────────────
55
+ if (ctx.MaxRows != null && ctx.MaxRows > 0) {
56
+ currentSQL = RenderPipeline.applyMaxRows(currentSQL, ctx.MaxRows, ctx.Platform);
57
+ }
58
+ // ── Step 4: Paging (if requested) ────────────────────────────
59
+ let pagingResult = null;
60
+ let afterPaging = null;
61
+ if (ctx.Paging && QueryPagingEngine.ShouldPage(ctx.Paging.StartRow, ctx.Paging.MaxRows)) {
62
+ pagingResult = QueryPagingEngine.WrapWithPaging(currentSQL, ctx.Paging.StartRow, ctx.Paging.MaxRows, ctx.Platform);
63
+ currentSQL = pagingResult.DataSQL;
64
+ afterPaging = currentSQL;
65
+ }
66
+ return {
67
+ FinalSQL: currentSQL,
68
+ AppliedParameters: appliedParameters,
69
+ HasCompositions: compositionResult.HasCompositions,
70
+ CTEs: compositionResult.CTEs,
71
+ Trace: {
72
+ AfterComposition: afterComposition,
73
+ CompositionDiagnostics: compositionDiagnostics,
74
+ AfterTemplates: afterTemplates,
75
+ AfterPaging: afterPaging,
76
+ },
77
+ PagingResult: pagingResult,
78
+ };
79
+ }
80
+ /**
81
+ * Resolves only the composition step — for callers that need composition
82
+ * without the full pipeline (e.g., save-time token analysis).
83
+ *
84
+ * Wraps {@link QueryCompositionEngine.ResolveComposition} to maintain the
85
+ * existing public API while the internal implementation may change.
86
+ */
87
+ static ResolveCompositionOnly(sql, platform, contextUser, outerParams, inlineDependencies) {
88
+ return new QueryCompositionEngine().ResolveComposition(sql, platform, contextUser, outerParams, inlineDependencies);
89
+ }
90
+ /**
91
+ * Checks whether SQL contains composition tokens.
92
+ * Convenience wrapper for callers that need a fast guard.
93
+ */
94
+ static HasCompositionTokens(sql) {
95
+ return new QueryCompositionEngine().HasCompositionTokens(sql);
96
+ }
97
+ // ════════════════════════════════════════════════════════════════
98
+ // Internal pass implementations
99
+ // ═════════════════════════════════════════════════════���══════════
100
+ static runComposition(sql, ctx) {
101
+ const engine = new QueryCompositionEngine();
102
+ if (!engine.HasCompositionTokens(sql) || !ctx.ContextUser) {
103
+ return {
104
+ ResolvedSQL: sql,
105
+ CTEs: [],
106
+ DependencyGraph: new Map(),
107
+ HasCompositions: false,
108
+ AnyDependencyUsesTemplates: false,
109
+ };
110
+ }
111
+ return engine.ResolveComposition(sql, ctx.Platform, ctx.ContextUser, ctx.Parameters, ctx.Dependencies);
112
+ }
113
+ static runTemplates(composedSQL, originalSQL, ctx, compositionResult) {
114
+ const needsTemplateProcessing = ctx.UsesTemplate || compositionResult.AnyDependencyUsesTemplates;
115
+ if (!needsTemplateProcessing) {
116
+ return { processedSQL: composedSQL, appliedParameters: {} };
117
+ }
118
+ // Build the template input. When a QueryInfo object is provided (saved
119
+ // query path), pass it directly so processQueryTemplate gets the real
120
+ // Parameters array for validation. Otherwise build a synthetic input.
121
+ const templateInput = ctx.QueryInfo ?? {
122
+ SQL: ctx.OriginalSQL ?? originalSQL,
123
+ UsesTemplate: ctx.UsesTemplate ?? false,
124
+ Parameters: ctx.ParameterDefinitions ?? [],
125
+ };
126
+ const skipUnknownParamCheck = compositionResult.AnyDependencyUsesTemplates || !ctx.ParameterDefinitions;
127
+ const result = QueryParameterProcessor.processQueryTemplate(templateInput, ctx.Parameters, composedSQL, skipUnknownParamCheck);
128
+ if (!result.success) {
129
+ throw new Error(result.error);
130
+ }
131
+ return {
132
+ processedSQL: result.processedSQL,
133
+ appliedParameters: (result.appliedParameters || {}),
134
+ };
135
+ }
136
+ static applyMaxRows(sql, maxRows, platform) {
137
+ const trimmed = sql.trim();
138
+ if (/\bTOP\s+\d/i.test(trimmed) || /\bLIMIT\s+\d/i.test(trimmed)) {
139
+ return sql;
140
+ }
141
+ const dialect = RenderPipeline.getDialect(platform);
142
+ const limitResult = dialect.LimitClause(maxRows);
143
+ if (limitResult.prefix) {
144
+ // SQL Server style: inject TOP N after SELECT
145
+ return trimmed.replace(/^(SELECT\s+(?:DISTINCT\s+)?)/i, `$1${limitResult.prefix} `);
146
+ }
147
+ // PostgreSQL style: append LIMIT N
148
+ const withoutSemicolon = trimmed.replace(/;\s*$/, '');
149
+ return `${withoutSemicolon}\n${limitResult.suffix}`;
150
+ }
151
+ static getDialect(platform) {
152
+ return GetDialect(platform);
153
+ }
154
+ /**
155
+ * Strips SQL comments (single-line -- and block comments) from a SQL string.
156
+ * Preserves single-quoted string literals to avoid stripping inside them.
157
+ */
158
+ static stripSQLComments(sql) {
159
+ let result = '';
160
+ let i = 0;
161
+ while (i < sql.length) {
162
+ // Single-quoted string literal — preserve as-is
163
+ if (sql[i] === "'") {
164
+ result += sql[i++];
165
+ while (i < sql.length) {
166
+ if (sql[i] === "'" && i + 1 < sql.length && sql[i + 1] === "'") {
167
+ result += "''";
168
+ i += 2;
169
+ }
170
+ else if (sql[i] === "'") {
171
+ result += sql[i++];
172
+ break;
173
+ }
174
+ else {
175
+ result += sql[i++];
176
+ }
177
+ }
178
+ }
179
+ // Single-line comment: -- to end of line
180
+ else if (sql[i] === '-' && i + 1 < sql.length && sql[i + 1] === '-') {
181
+ while (i < sql.length && sql[i] !== '\n')
182
+ i++;
183
+ }
184
+ // Block comment: /* ... */
185
+ else if (sql[i] === '/' && i + 1 < sql.length && sql[i + 1] === '*') {
186
+ i += 2;
187
+ while (i < sql.length) {
188
+ if (sql[i] === '*' && i + 1 < sql.length && sql[i + 1] === '/') {
189
+ i += 2;
190
+ break;
191
+ }
192
+ i++;
193
+ }
194
+ }
195
+ // Normal character
196
+ else {
197
+ result += sql[i++];
198
+ }
199
+ }
200
+ return result;
201
+ }
202
+ }
203
+ // ════════════════════════════════════════════════════════════════════
204
+ // Helpers
205
+ // ════════════════════════════════════════════════════════════════════
206
+ function buildCompositionDiagnostics(result) {
207
+ return result.CTEs.map(cte => ({
208
+ DepName: cte.QueryName,
209
+ CategoryPath: cte.CategoryPath,
210
+ CTEName: cte.CTEName,
211
+ // We can't easily tell if ORDER BY was stripped without comparing
212
+ // original vs resolved SQL, so this is a best-effort flag based on
213
+ // whether the original had ORDER BY and the resolved doesn't.
214
+ OrderByStripped: /ORDER\s+BY\b/i.test(cte.OriginalSQL) && !/ORDER\s+BY\b/i.test(cte.ResolvedSQL),
215
+ InnerCTEsHoisted: 0, // TODO: track in composition engine
216
+ }));
217
+ }
218
+ //# sourceMappingURL=renderPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderPipeline.js","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { SQLParserDialect } from '@memberjunction/sql-dialect';
2
+ /**
3
+ * Symbol table for managing CTE names during composition.
4
+ *
5
+ * Guarantees uniqueness at CTE creation time — name collisions become
6
+ * impossible by construction.
7
+ *
8
+ * All name comparisons are case-insensitive (SQL Server and PostgreSQL
9
+ * both treat unquoted identifiers case-insensitively for CTEs).
10
+ */
11
+ export declare class SymbolTable {
12
+ /** Allocated names (canonical lowercase → original casing) */
13
+ private allocatedNames;
14
+ /** Dialect for identifier quoting */
15
+ private dialect;
16
+ constructor(dialect: SQLParserDialect);
17
+ /**
18
+ * Registers a name. If the name is already taken, generates a unique
19
+ * suffix (`Name__2`, `Name__3`, ...) and returns the suffixed version.
20
+ *
21
+ * @param desiredName - The preferred name (unquoted)
22
+ * @returns The actual allocated name (may be suffixed if collision)
23
+ */
24
+ Register(desiredName: string): string;
25
+ /**
26
+ * Pre-seeds the table with names that are already taken (e.g., outer CTE names).
27
+ */
28
+ Seed(name: string): void;
29
+ /**
30
+ * Checks if a name (case-insensitive) is already allocated.
31
+ */
32
+ Has(name: string): boolean;
33
+ /**
34
+ * Returns the dialect-quoted form of a name via `dialect.QuoteIdentifier()`.
35
+ */
36
+ Quote(name: string): string;
37
+ /**
38
+ * Generates a composition CTE name from a query name + hash, registers it,
39
+ * and returns the quoted form.
40
+ */
41
+ RegisterCompositionCTE(queryName: string, hashInput: string): string;
42
+ /**
43
+ * Returns the current count of allocated names.
44
+ */
45
+ get Size(): number;
46
+ }
47
+ //# sourceMappingURL=symbolTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolTable.d.ts","sourceRoot":"","sources":["../src/symbolTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACpB,8DAA8D;IAC9D,OAAO,CAAC,cAAc,CAA6B;IAEnD,qCAAqC;IACrC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAIrC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAmBrC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3B;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAYpE;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Symbol table for managing CTE names during composition.
3
+ *
4
+ * Guarantees uniqueness at CTE creation time — name collisions become
5
+ * impossible by construction.
6
+ *
7
+ * All name comparisons are case-insensitive (SQL Server and PostgreSQL
8
+ * both treat unquoted identifiers case-insensitively for CTEs).
9
+ */
10
+ export class SymbolTable {
11
+ constructor(dialect) {
12
+ /** Allocated names (canonical lowercase → original casing) */
13
+ this.allocatedNames = new Map();
14
+ this.dialect = dialect;
15
+ }
16
+ /**
17
+ * Registers a name. If the name is already taken, generates a unique
18
+ * suffix (`Name__2`, `Name__3`, ...) and returns the suffixed version.
19
+ *
20
+ * @param desiredName - The preferred name (unquoted)
21
+ * @returns The actual allocated name (may be suffixed if collision)
22
+ */
23
+ Register(desiredName) {
24
+ const canonical = desiredName.toLowerCase();
25
+ if (!this.allocatedNames.has(canonical)) {
26
+ this.allocatedNames.set(canonical, desiredName);
27
+ return desiredName;
28
+ }
29
+ // Collision — find a fresh name
30
+ let suffix = 2;
31
+ let candidate = `${desiredName}__${suffix}`;
32
+ while (this.allocatedNames.has(candidate.toLowerCase())) {
33
+ suffix++;
34
+ candidate = `${desiredName}__${suffix}`;
35
+ }
36
+ this.allocatedNames.set(candidate.toLowerCase(), candidate);
37
+ return candidate;
38
+ }
39
+ /**
40
+ * Pre-seeds the table with names that are already taken (e.g., outer CTE names).
41
+ */
42
+ Seed(name) {
43
+ const canonical = name.toLowerCase();
44
+ if (this.allocatedNames.has(canonical)) {
45
+ return; // Already seeded — idempotent
46
+ }
47
+ this.allocatedNames.set(canonical, name);
48
+ }
49
+ /**
50
+ * Checks if a name (case-insensitive) is already allocated.
51
+ */
52
+ Has(name) {
53
+ return this.allocatedNames.has(name.toLowerCase());
54
+ }
55
+ /**
56
+ * Returns the dialect-quoted form of a name via `dialect.QuoteIdentifier()`.
57
+ */
58
+ Quote(name) {
59
+ return this.dialect.QuoteIdentifier(name);
60
+ }
61
+ /**
62
+ * Generates a composition CTE name from a query name + hash, registers it,
63
+ * and returns the quoted form.
64
+ */
65
+ RegisterCompositionCTE(queryName, hashInput) {
66
+ const sanitized = queryName
67
+ .replace(/[^a-zA-Z0-9_ ]/g, '')
68
+ .replace(/\s+/g, '_')
69
+ .substring(0, 50);
70
+ const hash = simpleHash(hashInput);
71
+ const desired = `__cte_${sanitized}_${hash}`;
72
+ const actual = this.Register(desired);
73
+ return this.Quote(actual);
74
+ }
75
+ /**
76
+ * Returns the current count of allocated names.
77
+ */
78
+ get Size() {
79
+ return this.allocatedNames.size;
80
+ }
81
+ }
82
+ /**
83
+ * Simple string hash for generating short, deterministic suffixes.
84
+ */
85
+ function simpleHash(input) {
86
+ let hash = 0;
87
+ for (let i = 0; i < input.length; i++) {
88
+ const char = input.charCodeAt(i);
89
+ hash = ((hash << 5) - hash) + char;
90
+ hash = hash & hash;
91
+ }
92
+ return Math.abs(hash).toString(36).substring(0, 6);
93
+ }
94
+ //# sourceMappingURL=symbolTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolTable.js","sourceRoot":"","sources":["../src/symbolTable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/generic-database-provider",
3
3
  "type": "module",
4
- "version": "5.28.0",
4
+ "version": "5.29.0",
5
5
  "description": "Shared database provider logic for MemberJunction — intermediate base class between DatabaseProviderBase and platform-specific providers",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -22,18 +22,18 @@
22
22
  "vitest": "^3.1.1"
23
23
  },
24
24
  "dependencies": {
25
- "@memberjunction/actions": "5.28.0",
26
- "@memberjunction/actions-base": "5.28.0",
27
- "@memberjunction/aiengine": "5.28.0",
28
- "@memberjunction/core": "5.28.0",
29
- "@memberjunction/core-entities": "5.28.0",
30
- "@memberjunction/encryption": "5.28.0",
31
- "@memberjunction/geo-core": "5.28.0",
32
- "@memberjunction/global": "5.28.0",
33
- "@memberjunction/query-processor": "5.28.0",
34
- "@memberjunction/sql-dialect": "5.28.0",
35
- "@memberjunction/sql-parser": "5.28.0",
36
- "@memberjunction/queue": "5.28.0",
25
+ "@memberjunction/actions": "5.29.0",
26
+ "@memberjunction/actions-base": "5.29.0",
27
+ "@memberjunction/aiengine": "5.29.0",
28
+ "@memberjunction/core": "5.29.0",
29
+ "@memberjunction/core-entities": "5.29.0",
30
+ "@memberjunction/encryption": "5.29.0",
31
+ "@memberjunction/geo-core": "5.29.0",
32
+ "@memberjunction/global": "5.29.0",
33
+ "@memberjunction/query-processor": "5.29.0",
34
+ "@memberjunction/sql-dialect": "5.29.0",
35
+ "@memberjunction/sql-parser": "5.29.0",
36
+ "@memberjunction/queue": "5.29.0",
37
37
  "sql-formatter": "^15.7.0",
38
38
  "uuid": "^13.0.0"
39
39
  },