@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.
- package/LICENSE +180 -4
- package/README.md +89 -43
- 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/Config/config.d.ts +118 -1
- package/dist/Config/config.d.ts.map +1 -1
- package/dist/Config/config.js +202 -8
- package/dist/Config/config.js.map +1 -1
- package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts +2 -0
- package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts.map +1 -0
- package/dist/Database/__tests__/exclude-schema-permissions.test.js +32 -0
- package/dist/Database/__tests__/exclude-schema-permissions.test.js.map +1 -0
- package/dist/Database/codeGenDatabaseProvider.d.ts +178 -2
- package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
- package/dist/Database/codeGenDatabaseProvider.js +175 -10
- package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
- package/dist/Database/heal-schema-params.d.ts +33 -0
- package/dist/Database/heal-schema-params.d.ts.map +1 -0
- package/dist/Database/heal-schema-params.js +51 -0
- package/dist/Database/heal-schema-params.js.map +1 -0
- package/dist/Database/manage-metadata.d.ts +301 -2
- package/dist/Database/manage-metadata.d.ts.map +1 -1
- package/dist/Database/manage-metadata.js +1242 -96
- 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 +93 -56
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +399 -247
- 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/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js +110 -0
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
- package/dist/Database/providers/postgresql/metadataSupportObjects.js +78 -10
- package/dist/Database/providers/postgresql/metadataSupportObjects.js.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +72 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +322 -0
- 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/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js +195 -0
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
- package/dist/Database/schema-filters.d.ts +23 -0
- package/dist/Database/schema-filters.d.ts.map +1 -0
- package/dist/Database/schema-filters.js +42 -0
- package/dist/Database/schema-filters.js.map +1 -0
- package/dist/Database/schema-scope.d.ts.map +1 -1
- package/dist/Database/schema-scope.js +4 -0
- package/dist/Database/schema-scope.js.map +1 -1
- package/dist/Database/sql_codegen.d.ts +39 -5
- package/dist/Database/sql_codegen.d.ts.map +1 -1
- package/dist/Database/sql_codegen.js +176 -67
- package/dist/Database/sql_codegen.js.map +1 -1
- package/dist/EntityNameScanner/EntityNameScanner.d.ts.map +1 -1
- package/dist/EntityNameScanner/EntityNameScanner.js +33 -2
- package/dist/EntityNameScanner/EntityNameScanner.js.map +1 -1
- package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts +8 -4
- package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts.map +1 -1
- package/dist/Manifest/GenerateClassRegistrationsManifest.js +63 -20
- package/dist/Manifest/GenerateClassRegistrationsManifest.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/entity_subclasses_codegen.d.ts +61 -0
- package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.js +437 -158
- 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/dist/Misc/system_integrity.d.ts.map +1 -1
- package/dist/Misc/system_integrity.js +5 -0
- package/dist/Misc/system_integrity.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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"}
|
|
@@ -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":"
|
|
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"}
|