@memberjunction/codegen-lib 6.1.0-edge.2 → 6.1.0-edge.4

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 (133) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +89 -43
  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/Config/config.d.ts +118 -1
  12. package/dist/Config/config.d.ts.map +1 -1
  13. package/dist/Config/config.js +202 -8
  14. package/dist/Config/config.js.map +1 -1
  15. package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts +2 -0
  16. package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts.map +1 -0
  17. package/dist/Database/__tests__/exclude-schema-permissions.test.js +32 -0
  18. package/dist/Database/__tests__/exclude-schema-permissions.test.js.map +1 -0
  19. package/dist/Database/codeGenDatabaseProvider.d.ts +178 -2
  20. package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
  21. package/dist/Database/codeGenDatabaseProvider.js +175 -10
  22. package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
  23. package/dist/Database/heal-schema-params.d.ts +33 -0
  24. package/dist/Database/heal-schema-params.d.ts.map +1 -0
  25. package/dist/Database/heal-schema-params.js +51 -0
  26. package/dist/Database/heal-schema-params.js.map +1 -0
  27. package/dist/Database/manage-metadata.d.ts +301 -2
  28. package/dist/Database/manage-metadata.d.ts.map +1 -1
  29. package/dist/Database/manage-metadata.js +1242 -96
  30. package/dist/Database/manage-metadata.js.map +1 -1
  31. package/dist/Database/materializationAnalysis.d.ts +241 -0
  32. package/dist/Database/materializationAnalysis.d.ts.map +1 -0
  33. package/dist/Database/materializationAnalysis.js +415 -0
  34. package/dist/Database/materializationAnalysis.js.map +1 -0
  35. package/dist/Database/materializationBroadRender.d.ts +67 -0
  36. package/dist/Database/materializationBroadRender.d.ts.map +1 -0
  37. package/dist/Database/materializationBroadRender.js +104 -0
  38. package/dist/Database/materializationBroadRender.js.map +1 -0
  39. package/dist/Database/materializationDrift.d.ts +59 -0
  40. package/dist/Database/materializationDrift.d.ts.map +1 -0
  41. package/dist/Database/materializationDrift.js +85 -0
  42. package/dist/Database/materializationDrift.js.map +1 -0
  43. package/dist/Database/materializationParamClassifier.d.ts +92 -0
  44. package/dist/Database/materializationParamClassifier.d.ts.map +1 -0
  45. package/dist/Database/materializationParamClassifier.js +224 -0
  46. package/dist/Database/materializationParamClassifier.js.map +1 -0
  47. package/dist/Database/materializationParamVerifier.d.ts +71 -0
  48. package/dist/Database/materializationParamVerifier.d.ts.map +1 -0
  49. package/dist/Database/materializationParamVerifier.js +302 -0
  50. package/dist/Database/materializationParamVerifier.js.map +1 -0
  51. package/dist/Database/materializationSqlAst.d.ts +78 -0
  52. package/dist/Database/materializationSqlAst.d.ts.map +1 -0
  53. package/dist/Database/materializationSqlAst.js +142 -0
  54. package/dist/Database/materializationSqlAst.js.map +1 -0
  55. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts +93 -56
  56. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
  57. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +399 -247
  58. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js.map +1 -1
  59. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.d.ts +2 -0
  60. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.d.ts.map +1 -0
  61. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.js +119 -0
  62. package/dist/Database/providers/postgresql/__tests__/PostgreSQLCodeGenProvider.materialization.test.js.map +1 -0
  63. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.d.ts +2 -0
  64. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.d.ts.map +1 -0
  65. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.js +155 -0
  66. package/dist/Database/providers/postgresql/__tests__/PostgreSQLHierarchyFunctions.test.js.map +1 -0
  67. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
  68. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
  69. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js +110 -0
  70. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
  71. package/dist/Database/providers/postgresql/metadataSupportObjects.js +78 -10
  72. package/dist/Database/providers/postgresql/metadataSupportObjects.js.map +1 -1
  73. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +72 -1
  74. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
  75. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +322 -0
  76. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js.map +1 -1
  77. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.d.ts +2 -0
  78. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.d.ts.map +1 -0
  79. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.js +547 -0
  80. package/dist/Database/providers/sqlserver/__tests__/BaseViewEmissionGoldenMaster.test.js.map +1 -0
  81. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.d.ts +2 -0
  82. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.d.ts.map +1 -0
  83. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.js +721 -0
  84. package/dist/Database/providers/sqlserver/__tests__/BaseViewRegenDecision.test.js.map +1 -0
  85. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.d.ts +2 -0
  86. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.d.ts.map +1 -0
  87. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js +78 -0
  88. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.materialization.test.js.map +1 -0
  89. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.d.ts +2 -0
  90. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.d.ts.map +1 -0
  91. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.js +155 -0
  92. package/dist/Database/providers/sqlserver/__tests__/SQLServerHierarchyTVF.test.js.map +1 -0
  93. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
  94. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
  95. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js +195 -0
  96. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
  97. package/dist/Database/schema-filters.d.ts +23 -0
  98. package/dist/Database/schema-filters.d.ts.map +1 -0
  99. package/dist/Database/schema-filters.js +42 -0
  100. package/dist/Database/schema-filters.js.map +1 -0
  101. package/dist/Database/schema-scope.d.ts.map +1 -1
  102. package/dist/Database/schema-scope.js +4 -0
  103. package/dist/Database/schema-scope.js.map +1 -1
  104. package/dist/Database/sql_codegen.d.ts +39 -5
  105. package/dist/Database/sql_codegen.d.ts.map +1 -1
  106. package/dist/Database/sql_codegen.js +176 -67
  107. package/dist/Database/sql_codegen.js.map +1 -1
  108. package/dist/EntityNameScanner/EntityNameScanner.d.ts.map +1 -1
  109. package/dist/EntityNameScanner/EntityNameScanner.js +33 -2
  110. package/dist/EntityNameScanner/EntityNameScanner.js.map +1 -1
  111. package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts +8 -4
  112. package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts.map +1 -1
  113. package/dist/Manifest/GenerateClassRegistrationsManifest.js +63 -20
  114. package/dist/Manifest/GenerateClassRegistrationsManifest.js.map +1 -1
  115. package/dist/Misc/action_subclasses_codegen.d.ts.map +1 -1
  116. package/dist/Misc/action_subclasses_codegen.js +4 -4
  117. package/dist/Misc/action_subclasses_codegen.js.map +1 -1
  118. package/dist/Misc/entity_subclasses_codegen.d.ts +61 -0
  119. package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
  120. package/dist/Misc/entity_subclasses_codegen.js +437 -158
  121. package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
  122. package/dist/Misc/graphql_server_codegen.d.ts +4 -58
  123. package/dist/Misc/graphql_server_codegen.d.ts.map +1 -1
  124. package/dist/Misc/graphql_server_codegen.js +22 -236
  125. package/dist/Misc/graphql_server_codegen.js.map +1 -1
  126. package/dist/Misc/sql_logging.d.ts +25 -0
  127. package/dist/Misc/sql_logging.d.ts.map +1 -1
  128. package/dist/Misc/sql_logging.js +51 -8
  129. package/dist/Misc/sql_logging.js.map +1 -1
  130. package/dist/Misc/system_integrity.d.ts.map +1 -1
  131. package/dist/Misc/system_integrity.js +5 -0
  132. package/dist/Misc/system_integrity.js.map +1 -1
  133. 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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SoftPrimaryKeyIndex.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SoftPrimaryKeyIndex.test.d.ts","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * A SOFT primary key gets no index from anything else in the stack, and MJ's own write path
3
+ * scans the table on every create without one.
4
+ *
5
+ * `IsPrimaryKey && IsSoftPrimaryKey` means the key exists only in metadata: no PRIMARY KEY
6
+ * constraint, no unique index. Integration tables are built that way deliberately, because
7
+ * their keys are inferred and a constraint would reject valid rows whenever an inference is
8
+ * wrong. But the create path still calls InnerLoad on that key to check for an existing row,
9
+ * a genuinely new record matches nothing, and a not-found lookup cannot short-circuit — so it
10
+ * reads the entire heap before concluding the row is absent. The scan grows with the table.
11
+ *
12
+ * Three mechanisms each declined to cover it: the integration DDL generator emits no index on
13
+ * the key columns; the FK auto-indexer skips primary keys ("already covered by its own index"
14
+ * — true for a real PK, false by definition for a soft one); and the missing-index probe reads
15
+ * sys.foreign_keys, which these tables have none of.
16
+ */
17
+ import { describe, it, expect, beforeEach } from 'vitest';
18
+ import { EntityInfo } from '@memberjunction/core';
19
+ import { SQLServerCodeGenProvider } from '../SQLServerCodeGenProvider.js';
20
+ function createMockEntity(overrides = {}, fieldOverrides) {
21
+ const initData = {
22
+ ID: 'entity-1',
23
+ Name: 'Nimble Contacts',
24
+ SchemaName: 'nimble',
25
+ BaseTable: 'Contacts',
26
+ BaseTableCodeName: 'Contacts',
27
+ BaseView: 'vwContacts',
28
+ IncludeInAPI: true,
29
+ AllowCreateAPI: true,
30
+ AllowUpdateAPI: true,
31
+ AllowDeleteAPI: true,
32
+ CascadeDeletes: false,
33
+ VirtualEntity: false,
34
+ EntityFields: fieldOverrides ?? [],
35
+ ...overrides,
36
+ };
37
+ return new EntityInfo(initData);
38
+ }
39
+ /** A soft-PK column: flagged PK in metadata, backed by no constraint. */
40
+ function softPKField(name, sequence, extra = {}) {
41
+ return {
42
+ ID: `spk-${name}`,
43
+ Name: name,
44
+ Type: 'nvarchar',
45
+ Length: 450,
46
+ Sequence: sequence,
47
+ IsPrimaryKey: true,
48
+ IsSoftPrimaryKey: true,
49
+ AllowsNull: false,
50
+ AllowUpdateAPI: true,
51
+ IsVirtual: false,
52
+ AutoIncrement: false,
53
+ DefaultValue: '',
54
+ RelatedEntityID: null,
55
+ ...extra,
56
+ };
57
+ }
58
+ /** An ordinary, constraint-backed PK column. */
59
+ function realPKField(name = 'ID') {
60
+ return {
61
+ ID: `pk-${name}`,
62
+ Name: name,
63
+ Type: 'uniqueidentifier',
64
+ Length: 16,
65
+ Sequence: 1,
66
+ IsPrimaryKey: true,
67
+ IsSoftPrimaryKey: false,
68
+ AllowsNull: false,
69
+ AllowUpdateAPI: true,
70
+ IsVirtual: false,
71
+ AutoIncrement: false,
72
+ DefaultValue: 'newsequentialid()',
73
+ RelatedEntityID: null,
74
+ };
75
+ }
76
+ function plainField(name, sequence) {
77
+ return {
78
+ ID: `f-${name}`,
79
+ Name: name,
80
+ Type: 'nvarchar',
81
+ Length: 200,
82
+ Sequence: sequence,
83
+ IsPrimaryKey: false,
84
+ IsSoftPrimaryKey: false,
85
+ AllowsNull: true,
86
+ AllowUpdateAPI: true,
87
+ IsVirtual: false,
88
+ AutoIncrement: false,
89
+ DefaultValue: '',
90
+ RelatedEntityID: null,
91
+ };
92
+ }
93
+ describe('SQLServerCodeGenProvider — soft primary key index', () => {
94
+ let provider;
95
+ beforeEach(() => {
96
+ provider = new SQLServerCodeGenProvider();
97
+ });
98
+ describe('when it applies', () => {
99
+ it('indexes a single-column soft PK', () => {
100
+ const entity = createMockEntity({}, [softPKField('external_id', 1), plainField('Email', 2)]);
101
+ const sql = provider.generateSoftPrimaryKeyIndex(entity);
102
+ expect(sql.length).toBe(1);
103
+ expect(sql[0]).toContain('CREATE INDEX IDX_AUTO_MJ_SOFTPK_Contacts');
104
+ expect(sql[0]).toContain('[nimble].[Contacts] ([external_id])');
105
+ });
106
+ it('indexes a composite soft PK as ONE index, in ordinal order', () => {
107
+ // One composite, not one per column: the existence check is an equality match on
108
+ // the whole key, and per-column indexes would not serve it.
109
+ const entity = createMockEntity({}, [
110
+ softPKField('tenant_id', 2),
111
+ softPKField('record_id', 1),
112
+ plainField('Name', 3),
113
+ ]);
114
+ const sql = provider.generateSoftPrimaryKeyIndex(entity);
115
+ expect(sql.length).toBe(1);
116
+ expect(sql[0]).toContain('([record_id], [tenant_id])');
117
+ });
118
+ it('creates a NON-unique index — uniqueness is what the soft-PK design refuses to assert', () => {
119
+ const entity = createMockEntity({}, [softPKField('external_id', 1)]);
120
+ const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
121
+ expect(sql).toContain('CREATE INDEX ');
122
+ expect(sql).not.toMatch(/CREATE\s+UNIQUE/i);
123
+ });
124
+ it('is idempotent — re-running codegen must not fail on an existing index', () => {
125
+ const entity = createMockEntity({}, [softPKField('external_id', 1)]);
126
+ const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
127
+ expect(sql).toContain('IF NOT EXISTS');
128
+ expect(sql).toContain('FROM sys.indexes');
129
+ expect(sql).toContain("WHERE name = 'IDX_AUTO_MJ_SOFTPK_Contacts'");
130
+ });
131
+ it('says in the generated SQL why the index exists', () => {
132
+ // The next person to read this file should not have to rediscover the whole story.
133
+ const sql = provider.generateSoftPrimaryKeyIndex(createMockEntity({}, [softPKField('external_id', 1)]))[0];
134
+ expect(sql).toContain('soft primary key');
135
+ expect(sql).toMatch(/scans the whole table/i);
136
+ });
137
+ });
138
+ describe('when it does NOT apply', () => {
139
+ it('emits nothing for an ordinary entity with a real PK', () => {
140
+ // Nearly every entity. A real PK already has its constraint's index.
141
+ const entity = createMockEntity({}, [realPKField(), plainField('Name', 2)]);
142
+ expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
143
+ });
144
+ it('emits nothing for an entity with no primary key at all', () => {
145
+ const entity = createMockEntity({}, [plainField('Name', 1)]);
146
+ expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
147
+ });
148
+ it('emits nothing for a virtual entity — a view cannot be indexed', () => {
149
+ const entity = createMockEntity({ VirtualEntity: true }, [softPKField('external_id', 1)]);
150
+ expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
151
+ });
152
+ it('emits nothing for a MIXED key rather than guessing', () => {
153
+ // Part-real, part-soft is not a shape the integration schema builder produces, and
154
+ // inventing an index for it is worse than leaving it alone.
155
+ const entity = createMockEntity({}, [realPKField(), softPKField('external_id', 2)]);
156
+ expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
157
+ });
158
+ });
159
+ describe('unindexable key columns', () => {
160
+ it('does not emit an index whose key column SQL Server would reject', () => {
161
+ // Length -1 is MAX. SQL Server refuses LOB types as index key columns outright.
162
+ const entity = createMockEntity({}, [softPKField('external_id', 1, { Length: -1 })]);
163
+ const sql = provider.generateSoftPrimaryKeyIndex(entity);
164
+ expect(sql.length).toBe(1);
165
+ expect(sql[0]).not.toContain('CREATE INDEX');
166
+ });
167
+ it('explains the skip IN THE FILE, naming the offending column', () => {
168
+ // A silently missing index is the exact failure this whole change exists to end —
169
+ // swapping one silence for another would leave the next person the same puzzle.
170
+ // (A key column declared with no explicit length maps to NVARCHAR(MAX), which is
171
+ // how a table lands here without anyone intending it.)
172
+ const entity = createMockEntity({}, [
173
+ softPKField('record_id', 1),
174
+ softPKField('blob_key', 2, { Length: -1 }),
175
+ ]);
176
+ const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
177
+ expect(sql).toContain('SKIPPED');
178
+ expect(sql).toContain('nimble.Contacts');
179
+ expect(sql).toContain('blob_key');
180
+ // ...and not the column that was fine.
181
+ expect(sql).not.toContain('record_id (');
182
+ expect(sql).toMatch(/explicit bounded length/i);
183
+ });
184
+ });
185
+ describe('identifier limits', () => {
186
+ it('truncates the index name to 128 characters', () => {
187
+ const long = 'VeryLongSegmentNamePaddingToForceTruncationOfTheIdentifier';
188
+ const entity = createMockEntity({ BaseTable: `${long}Table`, BaseTableCodeName: `${long}${long}${long}Table` }, [softPKField('external_id', 1)]);
189
+ const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
190
+ const name = sql.match(/CREATE INDEX (\S+) ON/)[1];
191
+ expect(name.length).toBeLessThanOrEqual(128);
192
+ });
193
+ });
194
+ });
195
+ //# sourceMappingURL=SoftPrimaryKeyIndex.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SoftPrimaryKeyIndex.test.js","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Pure schema-scope predicates used by CodeGen SQL generation.
3
+ * Kept out of sql_codegen.ts so unit tests do not load the full generator.
4
+ */
5
+ /** Case-insensitive, trimmed membership in a schema-name list. */
6
+ export declare function schemaNameInList(schema: string, list: string[] | undefined | null): boolean;
7
+ /**
8
+ * Cascade SQL for a related entity whose FK points at `parentSchema`.
9
+ * Default is intra-schema only. `allowCrossSchemaCascadeDeletes` restores the
10
+ * historical walk across every schema in metadata — that is a dangerous
11
+ * escape hatch and must stay off for Open Apps.
12
+ */
13
+ export declare function shouldEmitCascadeForRelatedEntity(parentSchema: string, relatedSchema: string, allowCrossSchemaCascadeDeletes: boolean): boolean;
14
+ /**
15
+ * Whether a custom/layered base view for `schemaName` may be `sp_refreshview`'d
16
+ * into the migration log (STEP 4.5).
17
+ *
18
+ * Always drop `excludeSchemas`. When `includeSchemas` is non-empty, keep only
19
+ * that positive list. When it is empty/unset, keep current "all modified
20
+ * custom views" behavior minus excludes.
21
+ */
22
+ export declare function entityInCustomBaseViewRefreshScope(schemaName: string, excludeSchemas: string[], includeSchemas?: string[] | null): boolean;
23
+ //# sourceMappingURL=schema-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-filters.d.ts","sourceRoot":"","sources":["../../src/Database/schema-filters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAM3F;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC7C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,8BAA8B,EAAE,OAAO,GACxC,OAAO,CAKT;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAC9C,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EAAE,EACxB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,GACjC,OAAO,CAQT"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pure schema-scope predicates used by CodeGen SQL generation.
3
+ * Kept out of sql_codegen.ts so unit tests do not load the full generator.
4
+ */
5
+ /** Case-insensitive, trimmed membership in a schema-name list. */
6
+ export function schemaNameInList(schema, list) {
7
+ if (!list || list.length === 0) {
8
+ return false;
9
+ }
10
+ const key = schema.trim().toLowerCase();
11
+ return list.some((s) => s.trim().toLowerCase() === key);
12
+ }
13
+ /**
14
+ * Cascade SQL for a related entity whose FK points at `parentSchema`.
15
+ * Default is intra-schema only. `allowCrossSchemaCascadeDeletes` restores the
16
+ * historical walk across every schema in metadata — that is a dangerous
17
+ * escape hatch and must stay off for Open Apps.
18
+ */
19
+ export function shouldEmitCascadeForRelatedEntity(parentSchema, relatedSchema, allowCrossSchemaCascadeDeletes) {
20
+ if (allowCrossSchemaCascadeDeletes) {
21
+ return true;
22
+ }
23
+ return parentSchema.trim().toLowerCase() === relatedSchema.trim().toLowerCase();
24
+ }
25
+ /**
26
+ * Whether a custom/layered base view for `schemaName` may be `sp_refreshview`'d
27
+ * into the migration log (STEP 4.5).
28
+ *
29
+ * Always drop `excludeSchemas`. When `includeSchemas` is non-empty, keep only
30
+ * that positive list. When it is empty/unset, keep current "all modified
31
+ * custom views" behavior minus excludes.
32
+ */
33
+ export function entityInCustomBaseViewRefreshScope(schemaName, excludeSchemas, includeSchemas) {
34
+ if (schemaNameInList(schemaName, excludeSchemas)) {
35
+ return false;
36
+ }
37
+ if (includeSchemas && includeSchemas.length > 0) {
38
+ return schemaNameInList(schemaName, includeSchemas);
39
+ }
40
+ return true;
41
+ }
42
+ //# sourceMappingURL=schema-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-filters.js","sourceRoot":"","sources":["../../src/Database/schema-filters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAiC;IAC9E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC7C,YAAoB,EACpB,aAAqB,EACrB,8BAAuC;IAEvC,IAAI,8BAA8B,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kCAAkC,CAC9C,UAAkB,EAClB,cAAwB,EACxB,cAAgC;IAEhC,IAAI,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-scope.d.ts","sourceRoot":"","sources":["../../src/Database/schema-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,MAAM,EAAE,EACxB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,MAAM,EAAE,CAYV;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAUjG"}
1
+ {"version":3,"file":"schema-scope.d.ts","sourceRoot":"","sources":["../../src/Database/schema-scope.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,MAAM,EAAE,EACxB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,MAAM,EAAE,CAYV;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAajG"}