@memberjunction/codegen-lib 6.1.0-edge.1 → 6.1.0-edge.3
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.
- package/LICENSE +180 -4
- package/README.md +39 -22
- package/dist/Angular/angular-codegen.d.ts +0 -8
- package/dist/Angular/angular-codegen.d.ts.map +1 -1
- package/dist/Angular/angular-codegen.js +32 -22
- package/dist/Angular/angular-codegen.js.map +1 -1
- package/dist/Angular/entity-data-grid-related-entity-component.js +2 -2
- package/dist/Angular/entity-data-grid-related-entity-component.js.map +1 -1
- package/dist/Angular/related-entity-components.d.ts +1 -1
- package/dist/Angular/related-entity-components.js +1 -1
- package/dist/Database/codeGenDatabaseProvider.d.ts +107 -1
- package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
- package/dist/Database/codeGenDatabaseProvider.js +77 -10
- package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
- package/dist/Database/manage-metadata.d.ts +354 -14
- package/dist/Database/manage-metadata.d.ts.map +1 -1
- package/dist/Database/manage-metadata.js +1308 -65
- package/dist/Database/manage-metadata.js.map +1 -1
- package/dist/Database/materializationAnalysis.d.ts +241 -0
- package/dist/Database/materializationAnalysis.d.ts.map +1 -0
- package/dist/Database/materializationAnalysis.js +415 -0
- package/dist/Database/materializationAnalysis.js.map +1 -0
- package/dist/Database/materializationBroadRender.d.ts +67 -0
- package/dist/Database/materializationBroadRender.d.ts.map +1 -0
- package/dist/Database/materializationBroadRender.js +104 -0
- package/dist/Database/materializationBroadRender.js.map +1 -0
- package/dist/Database/materializationDrift.d.ts +59 -0
- package/dist/Database/materializationDrift.d.ts.map +1 -0
- package/dist/Database/materializationDrift.js +85 -0
- package/dist/Database/materializationDrift.js.map +1 -0
- package/dist/Database/materializationParamClassifier.d.ts +92 -0
- package/dist/Database/materializationParamClassifier.d.ts.map +1 -0
- package/dist/Database/materializationParamClassifier.js +224 -0
- package/dist/Database/materializationParamClassifier.js.map +1 -0
- package/dist/Database/materializationParamVerifier.d.ts +71 -0
- package/dist/Database/materializationParamVerifier.d.ts.map +1 -0
- package/dist/Database/materializationParamVerifier.js +302 -0
- package/dist/Database/materializationParamVerifier.js.map +1 -0
- package/dist/Database/materializationSqlAst.d.ts +78 -0
- package/dist/Database/materializationSqlAst.d.ts.map +1 -0
- package/dist/Database/materializationSqlAst.js +142 -0
- package/dist/Database/materializationSqlAst.js.map +1 -0
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts +69 -30
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +325 -216
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js.map +1 -1
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.d.ts +2 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.d.ts.map +1 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.js +119 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.js.map +1 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.d.ts +2 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.d.ts.map +1 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.js +155 -0
- package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.js.map +1 -0
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +61 -2
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +306 -3
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js.map +1 -1
- package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.d.ts +2 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.d.ts.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.js +547 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.js.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.d.ts +2 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.d.ts.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.js +721 -0
- package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.js.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.d.ts +2 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.d.ts.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js +78 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.d.ts +2 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.d.ts.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.js +155 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.js.map +1 -0
- package/dist/Database/sql_codegen.d.ts +21 -5
- package/dist/Database/sql_codegen.d.ts.map +1 -1
- package/dist/Database/sql_codegen.js +85 -27
- package/dist/Database/sql_codegen.js.map +1 -1
- package/dist/Misc/action_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/action_subclasses_codegen.js +4 -4
- package/dist/Misc/action_subclasses_codegen.js.map +1 -1
- package/dist/Misc/createNewUser.js +1 -1
- package/dist/Misc/createNewUser.js.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.d.ts +44 -0
- package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.js +369 -156
- package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
- package/dist/Misc/graphql_server_codegen.d.ts +4 -58
- package/dist/Misc/graphql_server_codegen.d.ts.map +1 -1
- package/dist/Misc/graphql_server_codegen.js +22 -236
- package/dist/Misc/graphql_server_codegen.js.map +1 -1
- package/dist/Misc/sql_logging.d.ts +25 -0
- package/dist/Misc/sql_logging.d.ts.map +1 -1
- package/dist/Misc/sql_logging.js +51 -8
- package/dist/Misc/sql_logging.js.map +1 -1
- package/package.json +30 -30
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseViewRegenDecision.test.js","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLServerCodeGenProvider.materialization.test.d.ts","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.ts"],"names":[],"mappings":""}
|
package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { SQLServerCodeGenProvider } from '../SQLServerCodeGenProvider.js';
|
|
3
|
+
/**
|
|
4
|
+
* Tests for the cross-engine materialization DDL primitive (sub-step A of the
|
|
5
|
+
* CodeGen materialization phase — plans/query-entity-materialization.md §2.2/§12).
|
|
6
|
+
* The SQL Server provider emits:
|
|
7
|
+
* - a conditional CREATE TABLE for the physical materialized table (reuse a
|
|
8
|
+
* migration-provided table if present; otherwise create the minimal one), and
|
|
9
|
+
* - the wrapper view (CREATE OR ALTER VIEW) that is the stable read contract and
|
|
10
|
+
* the atomic-swap repoint mechanism.
|
|
11
|
+
*/
|
|
12
|
+
describe('SQLServerCodeGenProvider — materialization DDL', () => {
|
|
13
|
+
let provider;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
provider = new SQLServerCodeGenProvider();
|
|
16
|
+
});
|
|
17
|
+
const cols = [
|
|
18
|
+
{ Name: 'id', SQLType: 'uniqueidentifier', Nullable: false, IsPrimaryKey: true },
|
|
19
|
+
{ Name: 'name', SQLType: 'nvarchar(255)', Nullable: false, IsPrimaryKey: false },
|
|
20
|
+
{ Name: 'total_amount', SQLType: 'decimal(18,2)', Nullable: true, IsPrimaryKey: false },
|
|
21
|
+
];
|
|
22
|
+
describe('generateMaterializedTableSQL', () => {
|
|
23
|
+
it('emits a conditional (create-if-absent) CREATE TABLE so migration-provided tables are reused', () => {
|
|
24
|
+
const sql = provider.generateMaterializedTableSQL('__mj', 'materialized_DemoSummary', cols);
|
|
25
|
+
expect(sql).toContain("IF OBJECT_ID('[__mj].[materialized_DemoSummary]', 'U') IS NULL");
|
|
26
|
+
expect(sql).toContain('CREATE TABLE [__mj].[materialized_DemoSummary]');
|
|
27
|
+
// never an unconditional DROP — that would clobber data / bespoke indexing
|
|
28
|
+
expect(sql).not.toContain('DROP TABLE');
|
|
29
|
+
// single GO-free batch: executed via ds.query (no GO-split); the file separator is the caller's job
|
|
30
|
+
expect(sql).not.toContain('GO');
|
|
31
|
+
});
|
|
32
|
+
it('emits each column with its engine-native type and nullability, bracket-quoted', () => {
|
|
33
|
+
const sql = provider.generateMaterializedTableSQL('__mj', 'materialized_DemoSummary', cols);
|
|
34
|
+
expect(sql).toContain('[id] uniqueidentifier NOT NULL');
|
|
35
|
+
expect(sql).toContain('[name] nvarchar(255) NOT NULL');
|
|
36
|
+
expect(sql).toContain('[total_amount] decimal(18,2) NULL');
|
|
37
|
+
});
|
|
38
|
+
it('emits the single-column surrogate PRIMARY KEY (its own unique index)', () => {
|
|
39
|
+
const sql = provider.generateMaterializedTableSQL('__mj', 'materialized_DemoSummary', cols);
|
|
40
|
+
expect(sql).toContain('CONSTRAINT [PK_materialized_DemoSummary] PRIMARY KEY ([id])');
|
|
41
|
+
});
|
|
42
|
+
it('supports a composite PK when more than one column is flagged', () => {
|
|
43
|
+
const composite = [
|
|
44
|
+
{ Name: 'a', SQLType: 'int', Nullable: false, IsPrimaryKey: true },
|
|
45
|
+
{ Name: 'b', SQLType: 'int', Nullable: false, IsPrimaryKey: true },
|
|
46
|
+
{ Name: 'v', SQLType: 'int', Nullable: true, IsPrimaryKey: false },
|
|
47
|
+
];
|
|
48
|
+
const sql = provider.generateMaterializedTableSQL('__mj', 'materialized_X', composite);
|
|
49
|
+
expect(sql).toContain('PRIMARY KEY ([a], [b])');
|
|
50
|
+
});
|
|
51
|
+
it('omits the PRIMARY KEY clause when no column is flagged', () => {
|
|
52
|
+
const noPk = cols.map((c) => ({ ...c, IsPrimaryKey: false }));
|
|
53
|
+
const sql = provider.generateMaterializedTableSQL('__mj', 'materialized_DemoSummary', noPk);
|
|
54
|
+
expect(sql).not.toContain('PRIMARY KEY');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('generateMaterializedWrapperViewSQL', () => {
|
|
58
|
+
it('emits CREATE OR ALTER VIEW selecting * from the physical table (stable contract + atomic repoint)', () => {
|
|
59
|
+
const sql = provider.generateMaterializedWrapperViewSQL('__mj', 'materialized_vwDemoSummary', 'materialized_DemoSummary');
|
|
60
|
+
expect(sql).toContain('CREATE OR ALTER VIEW [__mj].[materialized_vwDemoSummary]');
|
|
61
|
+
expect(sql).toContain('SELECT * FROM [__mj].[materialized_DemoSummary]');
|
|
62
|
+
expect(sql).not.toContain('GO'); // GO-free batch; CREATE OR ALTER VIEW is valid as the sole statement
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('surrogate column types', () => {
|
|
66
|
+
it('synthetic surrogate is an IDENTITY int; keyed surrogate is varchar(64) to match the SHA2_256 hex hash', () => {
|
|
67
|
+
expect(provider.getMaterializedSurrogateColumnType()).toBe('int IDENTITY(1,1)');
|
|
68
|
+
expect(provider.getMaterializedHashSurrogateColumnType()).toBe('varchar(64)');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('base-class default for unimplemented engines', () => {
|
|
72
|
+
it('the SQL Server provider overrides both methods (no throw)', () => {
|
|
73
|
+
expect(() => provider.generateMaterializedTableSQL('__mj', 't', cols)).not.toThrow();
|
|
74
|
+
expect(() => provider.generateMaterializedWrapperViewSQL('__mj', 'v', 't')).not.toThrow();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=SQLServerCodeGenProvider.materialization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLServerCodeGenProvider.materialization.test.js","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLServerHierarchyTVF.test.d.ts","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { SQLServerCodeGenProvider } from '../SQLServerCodeGenProvider.js';
|
|
3
|
+
import { EntityInfo } from '@memberjunction/core';
|
|
4
|
+
function createHierarchyEntity(overrides = {}) {
|
|
5
|
+
const fields = [
|
|
6
|
+
{
|
|
7
|
+
ID: 'pk-1',
|
|
8
|
+
Name: 'ID',
|
|
9
|
+
Type: 'uniqueidentifier',
|
|
10
|
+
Length: 16,
|
|
11
|
+
IsPrimaryKey: true,
|
|
12
|
+
AllowsNull: false,
|
|
13
|
+
AllowUpdateAPI: true,
|
|
14
|
+
IsVirtual: false,
|
|
15
|
+
AutoIncrement: false,
|
|
16
|
+
DefaultValue: 'newsequentialid()',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
ID: 'fk-parent',
|
|
20
|
+
Name: 'ParentID',
|
|
21
|
+
Type: 'uniqueidentifier',
|
|
22
|
+
Length: 16,
|
|
23
|
+
IsPrimaryKey: false,
|
|
24
|
+
AllowsNull: true,
|
|
25
|
+
AllowUpdateAPI: true,
|
|
26
|
+
IsVirtual: false,
|
|
27
|
+
AutoIncrement: false,
|
|
28
|
+
RelatedEntityID: 'entity-categories',
|
|
29
|
+
RelatedEntity: 'Categories',
|
|
30
|
+
Configuration: '{"Hierarchy":{"IsHierarchy":true}}',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
ID: 'f-name',
|
|
34
|
+
Name: 'Name',
|
|
35
|
+
Type: 'nvarchar',
|
|
36
|
+
Length: 200,
|
|
37
|
+
IsPrimaryKey: false,
|
|
38
|
+
AllowsNull: false,
|
|
39
|
+
AllowUpdateAPI: true,
|
|
40
|
+
IsVirtual: false,
|
|
41
|
+
AutoIncrement: false,
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
const initData = {
|
|
45
|
+
ID: 'entity-categories',
|
|
46
|
+
Name: 'Categories',
|
|
47
|
+
SchemaName: 'sales',
|
|
48
|
+
BaseTable: 'Category',
|
|
49
|
+
BaseTableCodeName: 'Category',
|
|
50
|
+
BaseView: 'vwCategories',
|
|
51
|
+
IncludeInAPI: true,
|
|
52
|
+
AllowCreateAPI: true,
|
|
53
|
+
AllowUpdateAPI: true,
|
|
54
|
+
AllowDeleteAPI: true,
|
|
55
|
+
EntityFields: fields,
|
|
56
|
+
EntityPermissions: [],
|
|
57
|
+
...overrides,
|
|
58
|
+
};
|
|
59
|
+
return new EntityInfo(initData);
|
|
60
|
+
}
|
|
61
|
+
describe('SQLServerCodeGenProvider — Hierarchy TVF suite', () => {
|
|
62
|
+
const provider = new SQLServerCodeGenProvider();
|
|
63
|
+
const entity = createHierarchyEntity();
|
|
64
|
+
const parentField = entity.Fields.find(f => f.Name === 'ParentID');
|
|
65
|
+
it('generates hierarchy metadata function (fnCategoryParentID_GetHierarchyMeta)', () => {
|
|
66
|
+
const sql = provider.generateHierarchyMetaFunction(entity, parentField);
|
|
67
|
+
// Function signature and drops
|
|
68
|
+
expect(sql).toContain("IF OBJECT_ID('[sales].[fnCategoryParentID_GetHierarchyMeta]', 'IF') IS NOT NULL");
|
|
69
|
+
expect(sql).toContain('DROP FUNCTION [sales].[fnCategoryParentID_GetHierarchyMeta];');
|
|
70
|
+
expect(sql).toContain('CREATE FUNCTION [sales].[fnCategoryParentID_GetHierarchyMeta]');
|
|
71
|
+
expect(sql).toContain('@RecordID uniqueidentifier,');
|
|
72
|
+
expect(sql).toContain('@ParentID uniqueidentifier');
|
|
73
|
+
expect(sql).toContain('RETURNS TABLE');
|
|
74
|
+
// Recursive CTE and cycle-guard
|
|
75
|
+
expect(sql).toContain('WITH CTE_Ancestors AS');
|
|
76
|
+
expect(sql).toContain('c.[Depth] < 100');
|
|
77
|
+
expect(sql).toContain('ChildCount');
|
|
78
|
+
expect(sql).toContain('IsLeaf');
|
|
79
|
+
expect(sql).toContain('SELECT TOP 1');
|
|
80
|
+
});
|
|
81
|
+
it('generates descendants traversal function (fnCategoryParentID_GetDescendants)', () => {
|
|
82
|
+
const sql = provider.generateDescendantsFunction(entity, parentField);
|
|
83
|
+
expect(sql).toContain("IF OBJECT_ID('[sales].[fnCategoryParentID_GetDescendants]', 'IF') IS NOT NULL");
|
|
84
|
+
expect(sql).toContain('CREATE FUNCTION [sales].[fnCategoryParentID_GetDescendants]');
|
|
85
|
+
expect(sql).toContain('@RootID uniqueidentifier,');
|
|
86
|
+
expect(sql).toContain('@MaxDepth INT = NULL');
|
|
87
|
+
expect(sql).toContain('RETURNS TABLE');
|
|
88
|
+
// Subtree recursion
|
|
89
|
+
expect(sql).toContain('[ID] = @RootID');
|
|
90
|
+
expect(sql).toContain('c.[ParentID] = p.[ID]');
|
|
91
|
+
expect(sql).toContain('(@MaxDepth IS NULL OR p.[RelativeDepth] < @MaxDepth)');
|
|
92
|
+
expect(sql).toContain('p.[RelativeDepth] < 100');
|
|
93
|
+
});
|
|
94
|
+
it('generates ancestors traversal function (fnCategoryParentID_GetAncestors)', () => {
|
|
95
|
+
const sql = provider.generateAncestorsFunction(entity, parentField);
|
|
96
|
+
expect(sql).toContain("IF OBJECT_ID('[sales].[fnCategoryParentID_GetAncestors]', 'IF') IS NOT NULL");
|
|
97
|
+
expect(sql).toContain('CREATE FUNCTION [sales].[fnCategoryParentID_GetAncestors]');
|
|
98
|
+
expect(sql).toContain('@RecordID uniqueidentifier');
|
|
99
|
+
expect(sql).toContain('RETURNS TABLE');
|
|
100
|
+
// Upward traversal recursion
|
|
101
|
+
expect(sql).toContain('[ID] = @RecordID');
|
|
102
|
+
expect(sql).toContain('c.[LevelUp] < 100');
|
|
103
|
+
});
|
|
104
|
+
it('generates hierarchy SELECT column projections', () => {
|
|
105
|
+
const selectCols = provider.generateHierarchyFieldSelect(entity, parentField, 'hier_ParentID');
|
|
106
|
+
expect(selectCols).toBe('hier_ParentID.RootID AS [RootParentID],\n' +
|
|
107
|
+
' hier_ParentID.Depth AS [ParentIDDepth],\n' +
|
|
108
|
+
' hier_ParentID.Path AS [ParentIDPath],\n' +
|
|
109
|
+
' hier_ParentID.IsLeaf AS [ParentIDIsLeaf],\n' +
|
|
110
|
+
' hier_ParentID.ChildCount AS [ParentIDChildCount]');
|
|
111
|
+
});
|
|
112
|
+
it('generates hierarchy OUTER APPLY join clause', () => {
|
|
113
|
+
const joinClause = provider.generateHierarchyFieldJoin(entity, parentField, 'hier_ParentID');
|
|
114
|
+
expect(joinClause).toBe('OUTER APPLY\n' +
|
|
115
|
+
' [sales].[fnCategoryParentID_GetHierarchyMeta]([c].[ID], [c].[ParentID]) AS hier_ParentID');
|
|
116
|
+
});
|
|
117
|
+
it('throws descriptive error when entity has composite primary keys', () => {
|
|
118
|
+
const compositePKEntity = createHierarchyEntity({
|
|
119
|
+
EntityFields: [
|
|
120
|
+
{
|
|
121
|
+
ID: 'pk-1',
|
|
122
|
+
Name: 'TenantID',
|
|
123
|
+
Type: 'uniqueidentifier',
|
|
124
|
+
Length: 16,
|
|
125
|
+
IsPrimaryKey: true,
|
|
126
|
+
AllowsNull: false,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
ID: 'pk-2',
|
|
130
|
+
Name: 'ID',
|
|
131
|
+
Type: 'uniqueidentifier',
|
|
132
|
+
Length: 16,
|
|
133
|
+
IsPrimaryKey: true,
|
|
134
|
+
AllowsNull: false,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
ID: 'fk-parent',
|
|
138
|
+
Name: 'ParentID',
|
|
139
|
+
Type: 'uniqueidentifier',
|
|
140
|
+
Length: 16,
|
|
141
|
+
IsPrimaryKey: false,
|
|
142
|
+
AllowsNull: true,
|
|
143
|
+
RelatedEntityID: 'entity-categories',
|
|
144
|
+
RelatedEntity: 'Categories',
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
});
|
|
148
|
+
const compFkField = compositePKEntity.Fields.find(f => f.Name === 'ParentID');
|
|
149
|
+
expect(() => provider.generateHierarchyMetaFunction(compositePKEntity, compFkField)).toThrow(/requires a single-column primary key/);
|
|
150
|
+
expect(() => provider.generateDescendantsFunction(compositePKEntity, compFkField)).toThrow(/requires a single-column primary key/);
|
|
151
|
+
expect(() => provider.generateAncestorsFunction(compositePKEntity, compFkField)).toThrow(/requires a single-column primary key/);
|
|
152
|
+
expect(() => provider.generateRootIDFunction(compositePKEntity, compFkField)).toThrow(/requires a single-column primary key/);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=SQLServerHierarchyTVF.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQLServerHierarchyTVF.test.js","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -109,7 +109,7 @@ export declare class SQLCodeGenBase {
|
|
|
109
109
|
*/
|
|
110
110
|
executeEntityInPhases(pool: CodeGenConnection, entity: EntityInfo, willRegenerate: Set<string> | undefined): Promise<PhasedExecutionResult>;
|
|
111
111
|
/**
|
|
112
|
-
* Concatenates the
|
|
112
|
+
* Concatenates the hierarchy TVF SQL for every recursive ParentID-style FK
|
|
113
113
|
* on this entity. Mirrors the inline TVF generation in
|
|
114
114
|
* `generateSingleEntitySQLToSeparateFiles` so the phased executor can run
|
|
115
115
|
* the same DDL ahead of the base view.
|
|
@@ -231,6 +231,15 @@ export declare class SQLCodeGenBase {
|
|
|
231
231
|
* Returns array of field info objects representing recursive relationships
|
|
232
232
|
*/
|
|
233
233
|
protected detectRecursiveForeignKeys(entity: EntityInfo): EntityFieldInfo[];
|
|
234
|
+
/**
|
|
235
|
+
* Helper to get the canonical hierarchy function definitions and metadata for an entity and recursive FK field.
|
|
236
|
+
*/
|
|
237
|
+
protected getHierarchyFunctionsForField(entity: EntityInfo, field: EntityFieldInfo): Array<{
|
|
238
|
+
functionName: string;
|
|
239
|
+
sql: string;
|
|
240
|
+
description: string;
|
|
241
|
+
fieldName: string;
|
|
242
|
+
}>;
|
|
234
243
|
/**
|
|
235
244
|
* Generates an inline Table Value Function for calculating root ID for a recursive FK field
|
|
236
245
|
* The function takes both the record ID and parent ID for optimization
|
|
@@ -243,13 +252,20 @@ export declare class SQLCodeGenBase {
|
|
|
243
252
|
*/
|
|
244
253
|
protected generateAllRootIDFunctions(entity: EntityInfo, recursiveFKs: EntityFieldInfo[]): string;
|
|
245
254
|
/**
|
|
246
|
-
* Generates the SELECT clause additions for
|
|
247
|
-
*
|
|
255
|
+
* Generates the SELECT clause additions for hierarchy metadata fields from TVFs
|
|
256
|
+
* Projects: Root<Field>, <Field>Depth, <Field>Path, <Field>IsLeaf, <Field>ChildCount
|
|
257
|
+
*/
|
|
258
|
+
protected generateHierarchyFieldSelects(entity: EntityInfo, recursiveFKs: EntityFieldInfo[], classNameFirstChar: string): string;
|
|
259
|
+
/**
|
|
260
|
+
* Generates JOIN clauses to inline Table Value Functions for hierarchy metadata calculation
|
|
261
|
+
*/
|
|
262
|
+
protected generateHierarchyJoins(recursiveFKs: EntityFieldInfo[], classNameFirstChar: string, entity: EntityInfo): string;
|
|
263
|
+
/**
|
|
264
|
+
* Generates the SELECT clause additions for root and hierarchy fields from TVFs
|
|
248
265
|
*/
|
|
249
266
|
protected generateRootFieldSelects(entity: EntityInfo, recursiveFKs: EntityFieldInfo[], classNameFirstChar: string): string;
|
|
250
267
|
/**
|
|
251
|
-
* Generates
|
|
252
|
-
* Each recursive FK gets an OUTER APPLY that calls its corresponding function
|
|
268
|
+
* Generates joins to inline Table Value Functions for hierarchy and root ID calculation
|
|
253
269
|
*/
|
|
254
270
|
protected generateRootIDJoins(recursiveFKs: EntityFieldInfo[], classNameFirstChar: string, entity: EntityInfo): string;
|
|
255
271
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql_codegen.d.ts","sourceRoot":"","sources":["../../src/Database/sql_codegen.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sql_codegen.d.ts","sourceRoot":"","sources":["../../src/Database/sql_codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { SQLUtilityBase } from './sql.js';
|
|
|
6
6
|
import { CodeGenDatabaseProvider } from './codeGenDatabaseProvider.js';
|
|
7
7
|
import { autoIndexForeignKeys, configInfo, customSqlScripts, mjCoreSchema } from '../Config/config.js';
|
|
8
8
|
import { ManageMetadataBase } from './manage-metadata.js';
|
|
9
|
-
import { UserCache } from '@memberjunction/
|
|
9
|
+
import { UserCache } from '@memberjunction/generic-database-provider';
|
|
10
10
|
import { combineFiles, logIf } from '../Misc/util.js';
|
|
11
11
|
import { MJGlobal, UUIDsEqual } from '@memberjunction/global';
|
|
12
12
|
import { SQLLogging } from '../Misc/sql_logging.js';
|
|
@@ -689,7 +689,7 @@ export class SQLCodeGenBase {
|
|
|
689
689
|
});
|
|
690
690
|
}
|
|
691
691
|
/**
|
|
692
|
-
* Concatenates the
|
|
692
|
+
* Concatenates the hierarchy TVF SQL for every recursive ParentID-style FK
|
|
693
693
|
* on this entity. Mirrors the inline TVF generation in
|
|
694
694
|
* `generateSingleEntitySQLToSeparateFiles` so the phased executor can run
|
|
695
695
|
* the same DDL ahead of the base view.
|
|
@@ -700,10 +700,10 @@ export class SQLCodeGenBase {
|
|
|
700
700
|
return '';
|
|
701
701
|
let combined = '';
|
|
702
702
|
for (const field of recursiveFKs) {
|
|
703
|
-
const
|
|
704
|
-
|
|
705
|
-
+ this.
|
|
706
|
-
|
|
703
|
+
const fns = this.getHierarchyFunctionsForField(entity, field);
|
|
704
|
+
for (const fn of fns) {
|
|
705
|
+
combined += fn.sql + '\n' + this._dbProvider.BatchSeparator + '\n';
|
|
706
|
+
}
|
|
707
707
|
}
|
|
708
708
|
return combined;
|
|
709
709
|
}
|
|
@@ -1002,7 +1002,7 @@ export class SQLCodeGenBase {
|
|
|
1002
1002
|
if (!options.onlyPermissions &&
|
|
1003
1003
|
(options.entity.BaseViewGenerated || options.entity.HasLayeredBaseView) &&
|
|
1004
1004
|
!options.entity.VirtualEntity) {
|
|
1005
|
-
// ROOT ID FUNCTIONS (TVFs) + BASE VIEW
|
|
1005
|
+
// HIERARCHY & ROOT ID FUNCTIONS (TVFs) + BASE VIEW
|
|
1006
1006
|
// TVFs must be created BEFORE the view that references them.
|
|
1007
1007
|
// We defer TVF logging until after baseViewChanged is computed so that
|
|
1008
1008
|
// TVFs are force-logged to the TempBatchFile whenever the view changes.
|
|
@@ -1012,13 +1012,13 @@ export class SQLCodeGenBase {
|
|
|
1012
1012
|
const tvfEntries = [];
|
|
1013
1013
|
if (recursiveFKs.length > 0) {
|
|
1014
1014
|
for (const field of recursiveFKs) {
|
|
1015
|
-
const
|
|
1016
|
-
const
|
|
1017
|
-
this.
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1015
|
+
const fns = this.getHierarchyFunctionsForField(options.entity, field);
|
|
1016
|
+
for (const fn of fns) {
|
|
1017
|
+
const tvfFilePath = path.join(options.directory, this.SQLUtilityObject.getDBObjectFileName('function', options.entity.SchemaName, fn.functionName, false, true));
|
|
1018
|
+
tvfEntries.push({ sql: fn.sql, filePath: tvfFilePath, fieldName: fn.fieldName, description: fn.description });
|
|
1019
|
+
// Add function SQL to output BEFORE the view
|
|
1020
|
+
sRet += fn.sql + '\n' + this._dbProvider.BatchSeparator + '\n';
|
|
1021
|
+
}
|
|
1022
1022
|
}
|
|
1023
1023
|
}
|
|
1024
1024
|
// Generate the base view (which may reference the TVFs created above)
|
|
@@ -1032,7 +1032,7 @@ export class SQLCodeGenBase {
|
|
|
1032
1032
|
if (options.writeFiles) {
|
|
1033
1033
|
for (const tvf of tvfEntries) {
|
|
1034
1034
|
this.writeFileIfChanged(tvf.filePath, tvf.sql);
|
|
1035
|
-
this.logSQLForNewOrModifiedEntity(options.entity, tvf.sql,
|
|
1035
|
+
this.logSQLForNewOrModifiedEntity(options.entity, tvf.sql, tvf.description, options.enableSQLLoggingForNewOrModifiedEntities, baseViewChanged);
|
|
1036
1036
|
files.push(tvf.filePath);
|
|
1037
1037
|
}
|
|
1038
1038
|
}
|
|
@@ -1329,8 +1329,55 @@ export class SQLCodeGenBase {
|
|
|
1329
1329
|
* Returns array of field info objects representing recursive relationships
|
|
1330
1330
|
*/
|
|
1331
1331
|
detectRecursiveForeignKeys(entity) {
|
|
1332
|
-
|
|
1333
|
-
UUIDsEqual(field.RelatedEntityID, entity.ID)
|
|
1332
|
+
const hierarchyFKs = entity.Fields.filter(field => field.RelatedEntityID != null &&
|
|
1333
|
+
UUIDsEqual(field.RelatedEntityID, entity.ID) &&
|
|
1334
|
+
!field.IsVirtual &&
|
|
1335
|
+
field.IsHierarchy === true);
|
|
1336
|
+
if (hierarchyFKs.length === 0) {
|
|
1337
|
+
return [];
|
|
1338
|
+
}
|
|
1339
|
+
if (entity.PrimaryKeys.length !== 1) {
|
|
1340
|
+
logWarning(`[Hierarchy] Entity '${entity.Name}' has ${hierarchyFKs.length} hierarchy foreign key(s) ` +
|
|
1341
|
+
`(${hierarchyFKs.map(f => f.Name).join(', ')}), but has ${entity.PrimaryKeys.length} primary key fields. ` +
|
|
1342
|
+
`MemberJunction hierarchy TVF generation and traversal require a single-column primary key. Skipping hierarchy generation for this entity.`);
|
|
1343
|
+
return [];
|
|
1344
|
+
}
|
|
1345
|
+
return hierarchyFKs;
|
|
1346
|
+
}
|
|
1347
|
+
/**
|
|
1348
|
+
* Helper to get the canonical hierarchy function definitions and metadata for an entity and recursive FK field.
|
|
1349
|
+
*/
|
|
1350
|
+
getHierarchyFunctionsForField(entity, field) {
|
|
1351
|
+
const metaFnName = this._dbProvider.getHierarchyMetaFunctionName(entity, field);
|
|
1352
|
+
const descFnName = this._dbProvider.getDescendantsFunctionName(entity, field);
|
|
1353
|
+
const ancFnName = this._dbProvider.getAncestorsFunctionName(entity, field);
|
|
1354
|
+
const rootFnName = this._dbProvider.getRootIDFunctionName(entity, field);
|
|
1355
|
+
return [
|
|
1356
|
+
{
|
|
1357
|
+
functionName: metaFnName,
|
|
1358
|
+
sql: this.generateSingleEntitySQLFileHeader(entity, metaFnName) + this._dbProvider.generateHierarchyMetaFunction(entity, field),
|
|
1359
|
+
description: `Hierarchy Metadata Function SQL for ${entity.Name}.${field.Name}`,
|
|
1360
|
+
fieldName: field.Name
|
|
1361
|
+
},
|
|
1362
|
+
{
|
|
1363
|
+
functionName: descFnName,
|
|
1364
|
+
sql: this.generateSingleEntitySQLFileHeader(entity, descFnName) + this._dbProvider.generateDescendantsFunction(entity, field),
|
|
1365
|
+
description: `Descendants Traversal Function SQL for ${entity.Name}.${field.Name}`,
|
|
1366
|
+
fieldName: field.Name
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
functionName: ancFnName,
|
|
1370
|
+
sql: this.generateSingleEntitySQLFileHeader(entity, ancFnName) + this._dbProvider.generateAncestorsFunction(entity, field),
|
|
1371
|
+
description: `Ancestors Traversal Function SQL for ${entity.Name}.${field.Name}`,
|
|
1372
|
+
fieldName: field.Name
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
functionName: rootFnName,
|
|
1376
|
+
sql: this.generateSingleEntitySQLFileHeader(entity, rootFnName) + this._dbProvider.generateRootIDFunction(entity, field),
|
|
1377
|
+
description: `Root ID Function SQL for ${entity.Name}.${field.Name}`,
|
|
1378
|
+
fieldName: field.Name
|
|
1379
|
+
}
|
|
1380
|
+
];
|
|
1334
1381
|
}
|
|
1335
1382
|
/**
|
|
1336
1383
|
* Generates an inline Table Value Function for calculating root ID for a recursive FK field
|
|
@@ -1353,37 +1400,48 @@ export class SQLCodeGenBase {
|
|
|
1353
1400
|
.join('\n');
|
|
1354
1401
|
}
|
|
1355
1402
|
/**
|
|
1356
|
-
* Generates the SELECT clause additions for
|
|
1357
|
-
*
|
|
1403
|
+
* Generates the SELECT clause additions for hierarchy metadata fields from TVFs
|
|
1404
|
+
* Projects: Root<Field>, <Field>Depth, <Field>Path, <Field>IsLeaf, <Field>ChildCount
|
|
1358
1405
|
*/
|
|
1359
|
-
|
|
1406
|
+
generateHierarchyFieldSelects(entity, recursiveFKs, classNameFirstChar) {
|
|
1360
1407
|
if (recursiveFKs.length === 0)
|
|
1361
1408
|
return '';
|
|
1362
1409
|
let sOutput = '';
|
|
1363
1410
|
for (let i = 0; i < recursiveFKs.length; i++) {
|
|
1364
1411
|
const field = recursiveFKs[i];
|
|
1365
|
-
const alias = `
|
|
1366
|
-
sOutput += `,\n ${this._dbProvider.
|
|
1412
|
+
const alias = `hier_${field.Name}`;
|
|
1413
|
+
sOutput += `,\n ${this._dbProvider.generateHierarchyFieldSelect(entity, field, alias)}`;
|
|
1367
1414
|
}
|
|
1368
1415
|
return sOutput;
|
|
1369
1416
|
}
|
|
1370
1417
|
/**
|
|
1371
|
-
* Generates
|
|
1372
|
-
* Each recursive FK gets an OUTER APPLY that calls its corresponding function
|
|
1418
|
+
* Generates JOIN clauses to inline Table Value Functions for hierarchy metadata calculation
|
|
1373
1419
|
*/
|
|
1374
|
-
|
|
1420
|
+
generateHierarchyJoins(recursiveFKs, classNameFirstChar, entity) {
|
|
1375
1421
|
if (recursiveFKs.length === 0)
|
|
1376
1422
|
return '';
|
|
1377
1423
|
let sOutput = '';
|
|
1378
1424
|
for (let i = 0; i < recursiveFKs.length; i++) {
|
|
1379
1425
|
const field = recursiveFKs[i];
|
|
1380
|
-
const alias = `
|
|
1426
|
+
const alias = `hier_${field.Name}`;
|
|
1381
1427
|
if (sOutput.length > 0)
|
|
1382
1428
|
sOutput += '\n';
|
|
1383
|
-
sOutput += this._dbProvider.
|
|
1429
|
+
sOutput += this._dbProvider.generateHierarchyFieldJoin(entity, field, alias);
|
|
1384
1430
|
}
|
|
1385
1431
|
return '\n' + sOutput;
|
|
1386
1432
|
}
|
|
1433
|
+
/**
|
|
1434
|
+
* Generates the SELECT clause additions for root and hierarchy fields from TVFs
|
|
1435
|
+
*/
|
|
1436
|
+
generateRootFieldSelects(entity, recursiveFKs, classNameFirstChar) {
|
|
1437
|
+
return this.generateHierarchyFieldSelects(entity, recursiveFKs, classNameFirstChar);
|
|
1438
|
+
}
|
|
1439
|
+
/**
|
|
1440
|
+
* Generates joins to inline Table Value Functions for hierarchy and root ID calculation
|
|
1441
|
+
*/
|
|
1442
|
+
generateRootIDJoins(recursiveFKs, classNameFirstChar, entity) {
|
|
1443
|
+
return this.generateHierarchyJoins(recursiveFKs, classNameFirstChar, entity);
|
|
1444
|
+
}
|
|
1387
1445
|
/**
|
|
1388
1446
|
* @deprecated Use generateRootIDJoins instead - kept for backward compatibility during migration
|
|
1389
1447
|
* Generates LEFT OUTER JOINs to the recursive CTEs
|