@memberjunction/codegen-lib 6.1.0-edge.2 → 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.
Files changed (94) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +39 -22
  3. package/dist/Angular/angular-codegen.d.ts +0 -8
  4. package/dist/Angular/angular-codegen.d.ts.map +1 -1
  5. package/dist/Angular/angular-codegen.js +32 -22
  6. package/dist/Angular/angular-codegen.js.map +1 -1
  7. package/dist/Angular/entity-data-grid-related-entity-component.js +2 -2
  8. package/dist/Angular/entity-data-grid-related-entity-component.js.map +1 -1
  9. package/dist/Angular/related-entity-components.d.ts +1 -1
  10. package/dist/Angular/related-entity-components.js +1 -1
  11. package/dist/Database/codeGenDatabaseProvider.d.ts +101 -0
  12. package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
  13. package/dist/Database/codeGenDatabaseProvider.js +77 -10
  14. package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
  15. package/dist/Database/manage-metadata.d.ts +292 -2
  16. package/dist/Database/manage-metadata.d.ts.map +1 -1
  17. package/dist/Database/manage-metadata.js +1176 -45
  18. package/dist/Database/manage-metadata.js.map +1 -1
  19. package/dist/Database/materializationAnalysis.d.ts +241 -0
  20. package/dist/Database/materializationAnalysis.d.ts.map +1 -0
  21. package/dist/Database/materializationAnalysis.js +415 -0
  22. package/dist/Database/materializationAnalysis.js.map +1 -0
  23. package/dist/Database/materializationBroadRender.d.ts +67 -0
  24. package/dist/Database/materializationBroadRender.d.ts.map +1 -0
  25. package/dist/Database/materializationBroadRender.js +104 -0
  26. package/dist/Database/materializationBroadRender.js.map +1 -0
  27. package/dist/Database/materializationDrift.d.ts +59 -0
  28. package/dist/Database/materializationDrift.d.ts.map +1 -0
  29. package/dist/Database/materializationDrift.js +85 -0
  30. package/dist/Database/materializationDrift.js.map +1 -0
  31. package/dist/Database/materializationParamClassifier.d.ts +92 -0
  32. package/dist/Database/materializationParamClassifier.d.ts.map +1 -0
  33. package/dist/Database/materializationParamClassifier.js +224 -0
  34. package/dist/Database/materializationParamClassifier.js.map +1 -0
  35. package/dist/Database/materializationParamVerifier.d.ts +71 -0
  36. package/dist/Database/materializationParamVerifier.d.ts.map +1 -0
  37. package/dist/Database/materializationParamVerifier.js +302 -0
  38. package/dist/Database/materializationParamVerifier.js.map +1 -0
  39. package/dist/Database/materializationSqlAst.d.ts +78 -0
  40. package/dist/Database/materializationSqlAst.d.ts.map +1 -0
  41. package/dist/Database/materializationSqlAst.js +142 -0
  42. package/dist/Database/materializationSqlAst.js.map +1 -0
  43. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts +68 -21
  44. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
  45. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +303 -197
  46. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js.map +1 -1
  47. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.d.ts +2 -0
  48. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.d.ts.map +1 -0
  49. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.js +119 -0
  50. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.js.map +1 -0
  51. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.d.ts +2 -0
  52. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.d.ts.map +1 -0
  53. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.js +155 -0
  54. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.js.map +1 -0
  55. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +60 -1
  56. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
  57. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +294 -0
  58. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js.map +1 -1
  59. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.d.ts +2 -0
  60. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.d.ts.map +1 -0
  61. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.js +547 -0
  62. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.js.map +1 -0
  63. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.d.ts +2 -0
  64. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.d.ts.map +1 -0
  65. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.js +721 -0
  66. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.js.map +1 -0
  67. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.d.ts +2 -0
  68. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.d.ts.map +1 -0
  69. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js +78 -0
  70. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js.map +1 -0
  71. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.d.ts +2 -0
  72. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.d.ts.map +1 -0
  73. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.js +155 -0
  74. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.js.map +1 -0
  75. package/dist/Database/sql_codegen.d.ts +21 -5
  76. package/dist/Database/sql_codegen.d.ts.map +1 -1
  77. package/dist/Database/sql_codegen.js +84 -26
  78. package/dist/Database/sql_codegen.js.map +1 -1
  79. package/dist/Misc/action_subclasses_codegen.d.ts.map +1 -1
  80. package/dist/Misc/action_subclasses_codegen.js +4 -4
  81. package/dist/Misc/action_subclasses_codegen.js.map +1 -1
  82. package/dist/Misc/entity_subclasses_codegen.d.ts +44 -0
  83. package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
  84. package/dist/Misc/entity_subclasses_codegen.js +369 -156
  85. package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
  86. package/dist/Misc/graphql_server_codegen.d.ts +4 -58
  87. package/dist/Misc/graphql_server_codegen.d.ts.map +1 -1
  88. package/dist/Misc/graphql_server_codegen.js +22 -236
  89. package/dist/Misc/graphql_server_codegen.js.map +1 -1
  90. package/dist/Misc/sql_logging.d.ts +25 -0
  91. package/dist/Misc/sql_logging.d.ts.map +1 -1
  92. package/dist/Misc/sql_logging.js +51 -8
  93. package/dist/Misc/sql_logging.js.map +1 -1
  94. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SQLServerCodeGenProvider.materialization.test.d.ts.map
@@ -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":""}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SQLServerHierarchyTVF.test.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,SAAS,qBAAqB,CAAC,YAAqC,EAAE;IAClE,MAAM,MAAM,GAAG;QACX;YACI,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,mBAAmB;SACpC;QACD;YACI,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,mBAAmB;YACpC,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,oCAAoC;SACtD;QACD;YACI,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,GAAG;YACX,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;SACvB;KACJ,CAAC;IAEF,MAAM,QAAQ,GAAG;QACb,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,UAAU;QACrB,iBAAiB,EAAE,UAAU;QAC7B,QAAQ,EAAE,cAAc;QACxB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,MAAM;QACpB,iBAAiB,EAAE,EAAE;QACrB,GAAG,SAAS;KACf,CAAC;IAEF,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAE,CAAC;IAEpE,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACnF,MAAM,GAAG,GAAG,QAAQ,CAAC,6BAA6B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAExE,+BAA+B;QAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iFAAiF,CAAC,CAAC;QACzG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,8DAA8D,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,+DAA+D,CAAC,CAAC;QACvF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEvC,gCAAgC;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACpF,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEtE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;QACvG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,6DAA6D,CAAC,CAAC;QACrF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEvC,oBAAoB;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,yBAAyB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,6EAA6E,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAC;QACnF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEvC,6BAA6B;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAC/F,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CACnB,2CAA2C;YAC3C,+CAA+C;YAC/C,6CAA6C;YAC7C,iDAAiD;YACjD,sDAAsD,CACzD,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAC7F,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CACnB,eAAe;YACf,8FAA8F,CACjG,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACvE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;YAC5C,YAAY,EAAE;gBACV;oBACI,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,EAAE;oBACV,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,EAAE;oBACV,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,EAAE;oBACV,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,mBAAmB;oBACpC,aAAa,EAAE,YAAY;iBAC9B;aACJ;SACJ,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAE,CAAC;QAE/E,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CACxF,sCAAsC,CACzC,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CACtF,sCAAsC,CACzC,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CACpF,sCAAsC,CACzC,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CACjF,sCAAsC,CACzC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -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 root-ID TVF SQL for every recursive ParentID-style FK
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 root fields from TVFs
247
- * Example: , root_ParentID.RootID AS [RootParentID]
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 OUTER APPLY joins to inline Table Value Functions for root ID calculation
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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"}
@@ -689,7 +689,7 @@ export class SQLCodeGenBase {
689
689
  });
690
690
  }
691
691
  /**
692
- * Concatenates the root-ID TVF SQL for every recursive ParentID-style FK
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 functionName = `fn${entity.BaseTable}${field.Name}_GetRootID`;
704
- combined += this.generateSingleEntitySQLFileHeader(entity, functionName)
705
- + this.generateRootIDFunction(entity, field)
706
- + '\n' + this._dbProvider.BatchSeparator + '\n';
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 functionName = `fn${options.entity.BaseTable}${field.Name}_GetRootID`;
1016
- const tvfSQL = this.generateSingleEntitySQLFileHeader(options.entity, functionName) +
1017
- this.generateRootIDFunction(options.entity, field);
1018
- const tvfFilePath = path.join(options.directory, this.SQLUtilityObject.getDBObjectFileName('function', options.entity.SchemaName, functionName, false, true));
1019
- tvfEntries.push({ sql: tvfSQL, filePath: tvfFilePath, fieldName: field.Name });
1020
- // Add function SQL to output BEFORE the view
1021
- sRet += tvfSQL + '\n' + this._dbProvider.BatchSeparator + '\n';
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, `Root ID Function SQL for ${options.entity.Name}.${tvf.fieldName}`, options.enableSQLLoggingForNewOrModifiedEntities, baseViewChanged);
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
- return entity.Fields.filter(field => field.RelatedEntityID != null &&
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 root fields from TVFs
1357
- * Example: , root_ParentID.RootID AS [RootParentID]
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
- generateRootFieldSelects(entity, recursiveFKs, classNameFirstChar) {
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 = `root_${field.Name}`;
1366
- sOutput += `,\n ${this._dbProvider.generateRootFieldSelect(entity, field, alias)}`;
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 OUTER APPLY joins to inline Table Value Functions for root ID calculation
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
- generateRootIDJoins(recursiveFKs, classNameFirstChar, entity) {
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 = `root_${field.Name}`;
1426
+ const alias = `hier_${field.Name}`;
1381
1427
  if (sOutput.length > 0)
1382
1428
  sOutput += '\n';
1383
- sOutput += this._dbProvider.generateRootFieldJoin(entity, field, alias);
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