@memberjunction/codegen-lib 6.1.0-edge.3 → 6.1.0-edge.5

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 (107) hide show
  1. package/README.md +50 -21
  2. package/dist/Config/config.d.ts +290 -11
  3. package/dist/Config/config.d.ts.map +1 -1
  4. package/dist/Config/config.js +259 -9
  5. package/dist/Config/config.js.map +1 -1
  6. package/dist/Config/schema-output.d.ts +33 -0
  7. package/dist/Config/schema-output.d.ts.map +1 -0
  8. package/dist/Config/schema-output.js +52 -0
  9. package/dist/Config/schema-output.js.map +1 -0
  10. package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts +2 -0
  11. package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts.map +1 -0
  12. package/dist/Database/__tests__/exclude-schema-permissions.test.js +32 -0
  13. package/dist/Database/__tests__/exclude-schema-permissions.test.js.map +1 -0
  14. package/dist/Database/codeGenDatabaseProvider.d.ts +126 -2
  15. package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
  16. package/dist/Database/codeGenDatabaseProvider.js +203 -0
  17. package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
  18. package/dist/Database/exclude-tables.d.ts +26 -0
  19. package/dist/Database/exclude-tables.d.ts.map +1 -0
  20. package/dist/Database/exclude-tables.js +38 -0
  21. package/dist/Database/exclude-tables.js.map +1 -0
  22. package/dist/Database/heal-schema-params.d.ts +33 -0
  23. package/dist/Database/heal-schema-params.d.ts.map +1 -0
  24. package/dist/Database/heal-schema-params.js +51 -0
  25. package/dist/Database/heal-schema-params.js.map +1 -0
  26. package/dist/Database/manage-metadata.d.ts +59 -0
  27. package/dist/Database/manage-metadata.d.ts.map +1 -1
  28. package/dist/Database/manage-metadata.js +157 -61
  29. package/dist/Database/manage-metadata.js.map +1 -1
  30. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts +25 -35
  31. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
  32. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +97 -51
  33. package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js.map +1 -1
  34. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
  35. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
  36. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js +110 -0
  37. package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
  38. package/dist/Database/providers/postgresql/metadataSupportObjects.js +78 -10
  39. package/dist/Database/providers/postgresql/metadataSupportObjects.js.map +1 -1
  40. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +14 -0
  41. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
  42. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +38 -0
  43. package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js.map +1 -1
  44. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.test.js +17 -0
  45. package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.test.js.map +1 -1
  46. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
  47. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
  48. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js +195 -0
  49. package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
  50. package/dist/Database/schema-filters.d.ts +23 -0
  51. package/dist/Database/schema-filters.d.ts.map +1 -0
  52. package/dist/Database/schema-filters.js +42 -0
  53. package/dist/Database/schema-filters.js.map +1 -0
  54. package/dist/Database/schema-scope.d.ts.map +1 -1
  55. package/dist/Database/schema-scope.js +4 -0
  56. package/dist/Database/schema-scope.js.map +1 -1
  57. package/dist/Database/sql_codegen.d.ts +33 -0
  58. package/dist/Database/sql_codegen.d.ts.map +1 -1
  59. package/dist/Database/sql_codegen.js +147 -56
  60. package/dist/Database/sql_codegen.js.map +1 -1
  61. package/dist/EntityNameScanner/EntityNameScanner.d.ts.map +1 -1
  62. package/dist/EntityNameScanner/EntityNameScanner.js +33 -2
  63. package/dist/EntityNameScanner/EntityNameScanner.js.map +1 -1
  64. package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts +30 -4
  65. package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts.map +1 -1
  66. package/dist/Manifest/GenerateClassRegistrationsManifest.js +175 -25
  67. package/dist/Manifest/GenerateClassRegistrationsManifest.js.map +1 -1
  68. package/dist/Misc/codegen-reporter.d.ts +3 -0
  69. package/dist/Misc/codegen-reporter.d.ts.map +1 -1
  70. package/dist/Misc/codegen-reporter.js +3 -0
  71. package/dist/Misc/codegen-reporter.js.map +1 -1
  72. package/dist/Misc/emit-stats.d.ts +28 -0
  73. package/dist/Misc/emit-stats.d.ts.map +1 -0
  74. package/dist/Misc/emit-stats.js +43 -0
  75. package/dist/Misc/emit-stats.js.map +1 -0
  76. package/dist/Misc/entity_subclasses_codegen.d.ts +42 -7
  77. package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
  78. package/dist/Misc/entity_subclasses_codegen.js +177 -52
  79. package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
  80. package/dist/Misc/file-write.d.ts +15 -0
  81. package/dist/Misc/file-write.d.ts.map +1 -0
  82. package/dist/Misc/file-write.js +33 -0
  83. package/dist/Misc/file-write.js.map +1 -0
  84. package/dist/Misc/graphql_server_codegen.d.ts +12 -2
  85. package/dist/Misc/graphql_server_codegen.d.ts.map +1 -1
  86. package/dist/Misc/graphql_server_codegen.js +61 -12
  87. package/dist/Misc/graphql_server_codegen.js.map +1 -1
  88. package/dist/Misc/runCommand.d.ts +5 -0
  89. package/dist/Misc/runCommand.d.ts.map +1 -1
  90. package/dist/Misc/runCommand.js +43 -17
  91. package/dist/Misc/runCommand.js.map +1 -1
  92. package/dist/Misc/schema-emit.d.ts +123 -0
  93. package/dist/Misc/schema-emit.d.ts.map +1 -0
  94. package/dist/Misc/schema-emit.js +220 -0
  95. package/dist/Misc/schema-emit.js.map +1 -0
  96. package/dist/Misc/system_integrity.d.ts.map +1 -1
  97. package/dist/Misc/system_integrity.js +5 -0
  98. package/dist/Misc/system_integrity.js.map +1 -1
  99. package/dist/index.d.ts +6 -0
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +6 -0
  102. package/dist/index.js.map +1 -1
  103. package/dist/runCodeGen.d.ts +20 -2
  104. package/dist/runCodeGen.d.ts.map +1 -1
  105. package/dist/runCodeGen.js +147 -21
  106. package/dist/runCodeGen.js.map +1 -1
  107. package/package.json +29 -29
@@ -0,0 +1,110 @@
1
+ /**
2
+ * PostgreSQL side of the soft-primary-key index. The decisions about WHICH entities qualify and
3
+ * in what column order live in CodeGenDatabaseProvider as a template method — shared with SQL
4
+ * Server so they cannot drift. This pins the PG-visible output: quoting, the `IF NOT EXISTS`
5
+ * idempotency form, the lower-case name prefix, and the 63-character identifier limit.
6
+ *
7
+ * PG quoting: `QuoteIdentifier(x)` -> `"x"`; `QuoteSchema(s, o)` -> `"s"."o"`.
8
+ */
9
+ import { describe, it, expect, beforeEach } from 'vitest';
10
+ import { EntityInfo } from '@memberjunction/core';
11
+ import { PostgreSQLCodeGenProvider } from '../PostgreSQLCodeGenProvider.js';
12
+ function createMockEntity(overrides = {}, fields = []) {
13
+ return new EntityInfo({
14
+ ID: 'entity-1',
15
+ Name: 'Totara Course Completions',
16
+ SchemaName: 'totara',
17
+ BaseTable: 'course_completions',
18
+ BaseTableCodeName: 'course_completions',
19
+ BaseView: 'vwcourse_completions',
20
+ IncludeInAPI: true,
21
+ AllowCreateAPI: true,
22
+ AllowUpdateAPI: true,
23
+ AllowDeleteAPI: true,
24
+ CascadeDeletes: false,
25
+ VirtualEntity: false,
26
+ EntityFields: fields,
27
+ ...overrides,
28
+ });
29
+ }
30
+ function softPKField(name, sequence, extra = {}) {
31
+ return {
32
+ ID: `spk-${name}`,
33
+ Name: name,
34
+ Type: 'varchar',
35
+ Length: 450,
36
+ Sequence: sequence,
37
+ IsPrimaryKey: true,
38
+ IsSoftPrimaryKey: true,
39
+ AllowsNull: false,
40
+ AllowUpdateAPI: true,
41
+ IsVirtual: false,
42
+ AutoIncrement: false,
43
+ DefaultValue: '',
44
+ RelatedEntityID: null,
45
+ ...extra,
46
+ };
47
+ }
48
+ describe('PostgreSQLCodeGenProvider — soft primary key index', () => {
49
+ let provider;
50
+ beforeEach(() => {
51
+ provider = new PostgreSQLCodeGenProvider();
52
+ });
53
+ it('emits a quoted, schema-qualified composite index in ordinal order', () => {
54
+ const entity = createMockEntity({}, [softPKField('user_id', 2), softPKField('course_id', 1)]);
55
+ const sql = provider.generateSoftPrimaryKeyIndex(entity);
56
+ expect(sql.length).toBe(1);
57
+ expect(sql[0]).toContain('"totara"."course_completions"');
58
+ expect(sql[0]).toContain('("course_id", "user_id")');
59
+ });
60
+ it('uses the lower-case PG name convention', () => {
61
+ const sql = provider.generateSoftPrimaryKeyIndex(createMockEntity({}, [softPKField('course_id', 1)]))[0];
62
+ expect(sql).toContain('"idx_auto_mj_softpk_course_completions"');
63
+ });
64
+ it('is idempotent via CREATE INDEX IF NOT EXISTS', () => {
65
+ const sql = provider.generateSoftPrimaryKeyIndex(createMockEntity({}, [softPKField('course_id', 1)]))[0];
66
+ expect(sql).toContain('CREATE INDEX IF NOT EXISTS');
67
+ expect(sql).not.toMatch(/CREATE\s+UNIQUE/i);
68
+ });
69
+ it('truncates the index name to 63 characters', () => {
70
+ const long = 'very_long_table_name_segment_padding_to_force_truncation_of_identifier';
71
+ const entity = createMockEntity({ BaseTable: long, BaseTableCodeName: long }, [
72
+ softPKField('course_id', 1),
73
+ ]);
74
+ const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
75
+ const name = sql.match(/IF NOT EXISTS "([^"]+)"/)[1];
76
+ expect(name.length).toBeLessThanOrEqual(63);
77
+ });
78
+ it('refuses an unbounded key column rather than creating an index that fails at INSERT time', () => {
79
+ // PG accepts `text` in a btree key and then errors on whichever row exceeds ~1/8 of a
80
+ // page — long after the index was created, and on a row nobody can predict. Keeping the
81
+ // refusal at generation time means the message names the column instead.
82
+ const entity = createMockEntity({}, [softPKField('payload_key', 1, { Length: -1 })]);
83
+ const sql = provider.generateSoftPrimaryKeyIndex(entity);
84
+ expect(sql.length).toBe(1);
85
+ expect(sql[0]).not.toContain('CREATE INDEX');
86
+ expect(sql[0]).toContain('SKIPPED');
87
+ expect(sql[0]).toContain('payload_key');
88
+ });
89
+ it('emits nothing for an ordinary entity with a real primary key', () => {
90
+ const entity = createMockEntity({}, [
91
+ {
92
+ ID: 'pk-1',
93
+ Name: 'id',
94
+ Type: 'uuid',
95
+ Length: 16,
96
+ Sequence: 1,
97
+ IsPrimaryKey: true,
98
+ IsSoftPrimaryKey: false,
99
+ AllowsNull: false,
100
+ AllowUpdateAPI: true,
101
+ IsVirtual: false,
102
+ AutoIncrement: false,
103
+ DefaultValue: '',
104
+ RelatedEntityID: null,
105
+ },
106
+ ]);
107
+ expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
108
+ });
109
+ });
110
+ //# sourceMappingURL=SoftPrimaryKeyIndex.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SoftPrimaryKeyIndex.test.js","sourceRoot":"","sources":["../../../../../src/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.ts"],"names":[],"mappings":"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"}
@@ -195,9 +195,11 @@ FROM __mj."vwSQLTablesAndEntities" e
195
195
  -- ----------------------------------------------------------------------------
196
196
  DROP FUNCTION IF EXISTS __mj."spUpdateExistingEntityFieldsFromSchema"(TEXT);
197
197
  DROP FUNCTION IF EXISTS __mj."spUpdateExistingEntityFieldsFromSchema"(TEXT, TEXT);
198
+ DROP FUNCTION IF EXISTS __mj."spUpdateExistingEntityFieldsFromSchema"(TEXT, TEXT, TEXT);
198
199
  CREATE OR REPLACE FUNCTION __mj."spUpdateExistingEntityFieldsFromSchema"(
199
200
  p_ExcludedSchemaNames TEXT,
200
- p_EntityIDs TEXT DEFAULT NULL
201
+ p_EntityIDs TEXT DEFAULT NULL,
202
+ p_IncludedSchemaNames TEXT DEFAULT NULL
201
203
  )
202
204
  RETURNS TABLE(
203
205
  "EntityID" UUID,
@@ -225,6 +227,7 @@ RETURNS TABLE(
225
227
  LANGUAGE plpgsql AS $func$
226
228
  DECLARE
227
229
  v_is_scoped BOOLEAN := FALSE;
230
+ v_has_include BOOLEAN := FALSE;
228
231
  BEGIN
229
232
  -- [Large Schema Series] Force hash/merge joins for the catalog-introspection
230
233
  -- reconciliation below. In the scoped Pass-2 codegen path this SP runs AFTER
@@ -241,6 +244,13 @@ BEGIN
241
244
  FROM unnest(string_to_array(COALESCE(p_ExcludedSchemaNames, ''), ',')) AS s
242
245
  WHERE TRIM(s) <> '';
243
246
 
247
+ DROP TABLE IF EXISTS _uef_included;
248
+ CREATE TEMP TABLE _uef_included AS
249
+ SELECT TRIM(s) AS schema_name
250
+ FROM unnest(string_to_array(COALESCE(p_IncludedSchemaNames, ''), ',')) AS s
251
+ WHERE TRIM(s) <> '';
252
+ v_has_include := EXISTS (SELECT 1 FROM _uef_included);
253
+
244
254
  DROP TABLE IF EXISTS _uef_scope;
245
255
  CREATE TEMP TABLE _uef_scope AS
246
256
  SELECT DISTINCT TRIM(v)::uuid AS entity_id
@@ -355,6 +365,7 @@ BEGIN
355
365
  LEFT JOIN _uef_excluded ex ON e."SchemaName"::text = ex.schema_name
356
366
  WHERE e."VirtualEntity" = FALSE
357
367
  AND ex.schema_name IS NULL
368
+ AND (NOT v_has_include OR e."SchemaName"::text IN (SELECT i.schema_name FROM _uef_included i))
358
369
  AND (NOT v_is_scoped OR e."ID" IN (SELECT s.entity_id FROM _uef_scope s))
359
370
  ) chg
360
371
  -- Single source of truth for "this row changed": derived from the two flag columns computed
@@ -414,6 +425,7 @@ BEGIN
414
425
  DROP TABLE IF EXISTS _uef_filtered;
415
426
  DROP TABLE IF EXISTS _uef_scope;
416
427
  DROP TABLE IF EXISTS _uef_excluded;
428
+ DROP TABLE IF EXISTS _uef_included;
417
429
  END;
418
430
  $func$;
419
431
 
@@ -422,7 +434,11 @@ $func$;
422
434
  -- (consumer reads "Name" from result rows)
423
435
  -- ----------------------------------------------------------------------------
424
436
  DROP FUNCTION IF EXISTS __mj."spUpdateExistingEntitiesFromSchema"(TEXT);
425
- CREATE OR REPLACE FUNCTION __mj."spUpdateExistingEntitiesFromSchema"(p_ExcludedSchemaNames TEXT)
437
+ DROP FUNCTION IF EXISTS __mj."spUpdateExistingEntitiesFromSchema"(TEXT, TEXT);
438
+ CREATE OR REPLACE FUNCTION __mj."spUpdateExistingEntitiesFromSchema"(
439
+ p_ExcludedSchemaNames TEXT,
440
+ p_IncludedSchemaNames TEXT DEFAULT NULL
441
+ )
426
442
  RETURNS TABLE(
427
443
  "ID" UUID,
428
444
  "Name" TEXT,
@@ -432,7 +448,16 @@ RETURNS TABLE(
432
448
  "SchemaName" TEXT
433
449
  )
434
450
  LANGUAGE plpgsql AS $func$
451
+ DECLARE
452
+ v_has_include BOOLEAN := FALSE;
435
453
  BEGIN
454
+ DROP TABLE IF EXISTS _ues_included;
455
+ CREATE TEMP TABLE _ues_included AS
456
+ SELECT TRIM(s) AS schema_name
457
+ FROM unnest(string_to_array(COALESCE(p_IncludedSchemaNames, ''), ',')) AS s
458
+ WHERE TRIM(s) <> '';
459
+ v_has_include := EXISTS (SELECT 1 FROM _ues_included);
460
+
436
461
  DROP TABLE IF EXISTS _ues_filtered;
437
462
  CREATE TEMP TABLE _ues_filtered AS
438
463
  SELECT
@@ -448,6 +473,7 @@ BEGIN
448
473
  ON sq."SchemaName"::text = TRIM(ex.v)
449
474
  WHERE e."VirtualEntity" = FALSE
450
475
  AND ex.v IS NULL
476
+ AND (NOT v_has_include OR sq."SchemaName"::text IN (SELECT i.schema_name FROM _ues_included i))
451
477
  AND COALESCE(CASE WHEN e."AutoUpdateDescription" THEN sq."EntityDescription" ELSE e."Description" END, '')
452
478
  <> COALESCE(e."Description", '');
453
479
 
@@ -463,6 +489,7 @@ BEGIN
463
489
  FROM _ues_filtered fr;
464
490
 
465
491
  DROP TABLE IF EXISTS _ues_filtered;
492
+ DROP TABLE IF EXISTS _ues_included;
466
493
  END;
467
494
  $func$;
468
495
 
@@ -474,9 +501,11 @@ $func$;
474
501
  -- ----------------------------------------------------------------------------
475
502
  DROP FUNCTION IF EXISTS __mj."spDeleteUnneededEntityFields"(TEXT);
476
503
  DROP FUNCTION IF EXISTS __mj."spDeleteUnneededEntityFields"(TEXT, TEXT);
504
+ DROP FUNCTION IF EXISTS __mj."spDeleteUnneededEntityFields"(TEXT, TEXT, TEXT);
477
505
  CREATE OR REPLACE FUNCTION __mj."spDeleteUnneededEntityFields"(
478
506
  p_ExcludedSchemaNames TEXT,
479
- p_EntityIDs TEXT DEFAULT NULL
507
+ p_EntityIDs TEXT DEFAULT NULL,
508
+ p_IncludedSchemaNames TEXT DEFAULT NULL
480
509
  )
481
510
  RETURNS TABLE(
482
511
  "ID" UUID,
@@ -487,6 +516,7 @@ RETURNS TABLE(
487
516
  LANGUAGE plpgsql AS $func$
488
517
  DECLARE
489
518
  v_is_scoped BOOLEAN := FALSE;
519
+ v_has_include BOOLEAN := FALSE;
490
520
  BEGIN
491
521
  -- [Large Schema Series] Force hash/merge joins for this reconciliation.
492
522
  -- This SP runs in codegen Pass 2, immediately AFTER the SQL-generation phase
@@ -510,6 +540,13 @@ BEGIN
510
540
  WHERE TRIM(v) ~* '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';
511
541
  v_is_scoped := EXISTS (SELECT 1 FROM _del_scope);
512
542
 
543
+ DROP TABLE IF EXISTS _del_included;
544
+ CREATE TEMP TABLE _del_included AS
545
+ SELECT TRIM(s) AS schema_name
546
+ FROM unnest(string_to_array(COALESCE(p_IncludedSchemaNames, ''), ',')) AS s
547
+ WHERE TRIM(s) <> '';
548
+ v_has_include := EXISTS (SELECT 1 FROM _del_included);
549
+
513
550
  -- External-data-source entities must be excluded from the field prune (they are remote; they have no
514
551
  -- physical table/view, so the orphan join would match every external EntityField and delete it). But
515
552
  -- EDS is not yet ported to PostgreSQL, so vwEntities has no "ExternalDataSourceID" column here, and a
@@ -541,6 +578,7 @@ BEGIN
541
578
  WHERE e."VirtualEntity" = FALSE
542
579
  AND ef."EntityID" NOT IN (SELECT entity_id FROM _del_ext_entities) -- exclude external-data-source entities (see note above)
543
580
  AND ex.v IS NULL
581
+ AND (NOT v_has_include OR e."SchemaName"::text IN (SELECT i.schema_name FROM _del_included i))
544
582
  AND (NOT v_is_scoped OR ef."EntityID" IN (SELECT s.entity_id FROM _del_scope s));
545
583
  -- [Large Schema Series] ANALYZE so the planner has real cardinalities for the
546
584
  -- orphan join below. Without stats it estimates rows=1 and nested-loops.
@@ -582,6 +620,7 @@ BEGIN
582
620
  DROP TABLE IF EXISTS _del_actual;
583
621
  DROP TABLE IF EXISTS _del_ef;
584
622
  DROP TABLE IF EXISTS _del_scope;
623
+ DROP TABLE IF EXISTS _del_included;
585
624
  END;
586
625
  $func$;
587
626
 
@@ -589,7 +628,11 @@ $func$;
589
628
  -- 6. spSetDefaultColumnWidthWhereNeeded
590
629
  -- ----------------------------------------------------------------------------
591
630
  DROP FUNCTION IF EXISTS __mj."spSetDefaultColumnWidthWhereNeeded"(TEXT);
592
- CREATE OR REPLACE FUNCTION __mj."spSetDefaultColumnWidthWhereNeeded"(p_ExcludedSchemaNames TEXT)
631
+ DROP FUNCTION IF EXISTS __mj."spSetDefaultColumnWidthWhereNeeded"(TEXT, TEXT);
632
+ CREATE OR REPLACE FUNCTION __mj."spSetDefaultColumnWidthWhereNeeded"(
633
+ p_ExcludedSchemaNames TEXT,
634
+ p_IncludedSchemaNames TEXT DEFAULT NULL
635
+ )
593
636
  RETURNS void
594
637
  LANGUAGE plpgsql AS $func$
595
638
  BEGIN
@@ -608,7 +651,13 @@ BEGIN
608
651
  ON e."SchemaName"::text = TRIM(ex.v)
609
652
  WHERE ef."EntityID" = e."ID"
610
653
  AND ef."DefaultColumnWidth" IS NULL
611
- AND ex.v IS NULL;
654
+ AND ex.v IS NULL
655
+ AND (
656
+ COALESCE(p_IncludedSchemaNames, '') = ''
657
+ OR e."SchemaName"::text IN (
658
+ SELECT TRIM(s) FROM unnest(string_to_array(p_IncludedSchemaNames, ',')) AS s WHERE TRIM(s) <> ''
659
+ )
660
+ );
612
661
  END;
613
662
  $func$;
614
663
 
@@ -617,9 +666,15 @@ $func$;
617
666
  -- (consumer caches the returned SchemaInfo rows)
618
667
  -- ----------------------------------------------------------------------------
619
668
  DROP FUNCTION IF EXISTS __mj."spUpdateSchemaInfoFromDatabase"(TEXT);
620
- CREATE OR REPLACE FUNCTION __mj."spUpdateSchemaInfoFromDatabase"(p_ExcludedSchemaNames TEXT DEFAULT NULL)
669
+ DROP FUNCTION IF EXISTS __mj."spUpdateSchemaInfoFromDatabase"(TEXT, TEXT);
670
+ CREATE OR REPLACE FUNCTION __mj."spUpdateSchemaInfoFromDatabase"(
671
+ p_ExcludedSchemaNames TEXT DEFAULT NULL,
672
+ p_IncludedSchemaNames TEXT DEFAULT NULL
673
+ )
621
674
  RETURNS SETOF __mj."SchemaInfo"
622
675
  LANGUAGE plpgsql AS $func$
676
+ DECLARE
677
+ v_has_include BOOLEAN := FALSE;
623
678
  BEGIN
624
679
  DROP TABLE IF EXISTS _usi_excluded;
625
680
  CREATE TEMP TABLE _usi_excluded AS
@@ -627,13 +682,21 @@ BEGIN
627
682
  FROM unnest(string_to_array(COALESCE(p_ExcludedSchemaNames, ''), ',')) AS s
628
683
  WHERE TRIM(s) <> '';
629
684
 
685
+ DROP TABLE IF EXISTS _usi_included;
686
+ CREATE TEMP TABLE _usi_included AS
687
+ SELECT TRIM(s) AS schema_name
688
+ FROM unnest(string_to_array(COALESCE(p_IncludedSchemaNames, ''), ',')) AS s
689
+ WHERE TRIM(s) <> '';
690
+ v_has_include := EXISTS (SELECT 1 FROM _usi_included);
691
+
630
692
  UPDATE __mj."SchemaInfo" si SET
631
693
  "Description" = ss."SchemaDescription",
632
694
  "__mj_UpdatedAt" = now()
633
695
  FROM __mj."vwSQLSchemas" ss
634
696
  WHERE si."SchemaName" = ss."SchemaName"
635
697
  AND (si."Description" IS NULL OR si."Description" <> COALESCE(ss."SchemaDescription", ''))
636
- AND ss."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x);
698
+ AND ss."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x)
699
+ AND (NOT v_has_include OR ss."SchemaName" IN (SELECT i.schema_name FROM _usi_included i));
637
700
 
638
701
  INSERT INTO __mj."SchemaInfo" ("SchemaName", "EntityIDMin", "EntityIDMax", "Comments", "Description")
639
702
  SELECT
@@ -645,7 +708,8 @@ BEGIN
645
708
  FROM __mj."vwSQLSchemas" ss
646
709
  LEFT JOIN __mj."SchemaInfo" si ON ss."SchemaName" = si."SchemaName"
647
710
  WHERE si."ID" IS NULL
648
- AND ss."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x);
711
+ AND ss."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x)
712
+ AND (NOT v_has_include OR ss."SchemaName" IN (SELECT i.schema_name FROM _usi_included i));
649
713
 
650
714
  -- Backfill the case-stable canonical schema name from the installed Open App record.
651
715
  -- SchemaInfo.SchemaName is the physical (lowercased) name on PG; the app record carries
@@ -657,15 +721,19 @@ BEGIN
657
721
  FROM __mj."OpenApp" app
658
722
  WHERE LOWER(si."SchemaName") = LOWER(app."SchemaName")
659
723
  AND si."CanonicalSchemaName" IS NULL
660
- AND app."SchemaName" IS NOT NULL;
724
+ AND app."SchemaName" IS NOT NULL
725
+ AND si."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x)
726
+ AND (NOT v_has_include OR si."SchemaName" IN (SELECT i.schema_name FROM _usi_included i));
661
727
 
662
728
  RETURN QUERY
663
729
  SELECT si.*
664
730
  FROM __mj."SchemaInfo" si
665
731
  INNER JOIN __mj."vwSQLSchemas" ss ON si."SchemaName" = ss."SchemaName"
666
- WHERE ss."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x);
732
+ WHERE ss."SchemaName" NOT IN (SELECT x.schema_name FROM _usi_excluded x)
733
+ AND (NOT v_has_include OR ss."SchemaName" IN (SELECT i.schema_name FROM _usi_included i));
667
734
 
668
735
  DROP TABLE IF EXISTS _usi_excluded;
736
+ DROP TABLE IF EXISTS _usi_included;
669
737
  END;
670
738
  $func$;
671
739
 
@@ -1 +1 @@
1
- {"version":3,"file":"metadataSupportObjects.js","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/metadataSupportObjects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,8BAA8B,CAAC,YAAoB;IAC/D,OAAO,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzE,CAAC;AACD,MAAM,4BAA4B,GAAW,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8tBtD,CAAC"}
1
+ {"version":3,"file":"metadataSupportObjects.js","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/metadataSupportObjects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,8BAA8B,CAAC,YAAoB;IAC/D,OAAO,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzE,CAAC;AACD,MAAM,4BAA4B,GAAW,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkyBtD,CAAC"}
@@ -122,6 +122,18 @@ export declare class SQLServerCodeGenProvider extends CodeGenDatabaseProvider {
122
122
  protected tableToken(entity: EntityInfo): string;
123
123
  protected columnToken(f: EntityFieldInfo): string;
124
124
  protected formatIndexStatement(entity: EntityInfo, f: EntityFieldInfo, indexName: string): string;
125
+ protected softPrimaryKeyIndexPrefix(): string;
126
+ /**
127
+ * SQL Server refuses `NVARCHAR(MAX)` (and the other LOB types) as an index KEY column
128
+ * outright, regardless of the data it holds. `Length === -1` is how MJ spells MAX.
129
+ *
130
+ * Note the trap this closes: a source schema that declares a key column with no explicit
131
+ * length maps to `NVARCHAR(MAX)`, and the index then vanishes without complaint. The base
132
+ * class turns that into a comment in the generated file naming the offending columns,
133
+ * rather than an empty one.
134
+ */
135
+ protected isIndexableKeyColumn(f: EntityFieldInfo): boolean;
136
+ protected formatCompositeIndexStatement(entity: EntityInfo, fields: EntityFieldInfo[], indexName: string): string;
125
137
  /**
126
138
  * Generates SQL Server full-text search infrastructure for an entity, conditionally
127
139
  * producing up to three components based on entity metadata flags:
@@ -222,6 +234,8 @@ export declare class SQLServerCodeGenProvider extends CodeGenDatabaseProvider {
222
234
  */
223
235
  generateTimestampColumns(schema: string, tableName: string): string;
224
236
  /** @inheritdoc */
237
+ getRoutineNamesBySchemaSQL(schemas: string[]): string;
238
+ /** @inheritdoc */
225
239
  getCRUDRoutineName(entity: EntityInfo, type: CRUDType): string;
226
240
  /** @inheritdoc */
227
241
  generateSQLFileHeader(entity: EntityInfo, itemName: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"SQLServerCodeGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/Database/providers/sqlserver/SQLServerCodeGenProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SQLServerCodeGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/Database/providers/sqlserver/SQLServerCodeGenProvider.ts"],"names":[],"mappings":"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"}
@@ -541,6 +541,34 @@ IF NOT EXISTS (
541
541
  AND object_id = OBJECT_ID('[${entity.SchemaName}].[${entity.BaseTable}]')
542
542
  )
543
543
  CREATE INDEX ${indexName} ON [${entity.SchemaName}].[${entity.BaseTable}] ([${f.Name}]);`;
544
+ }
545
+ softPrimaryKeyIndexPrefix() {
546
+ return 'IDX_AUTO_MJ_SOFTPK_';
547
+ }
548
+ /**
549
+ * SQL Server refuses `NVARCHAR(MAX)` (and the other LOB types) as an index KEY column
550
+ * outright, regardless of the data it holds. `Length === -1` is how MJ spells MAX.
551
+ *
552
+ * Note the trap this closes: a source schema that declares a key column with no explicit
553
+ * length maps to `NVARCHAR(MAX)`, and the index then vanishes without complaint. The base
554
+ * class turns that into a comment in the generated file naming the offending columns,
555
+ * rather than an empty one.
556
+ */
557
+ isIndexableKeyColumn(f) {
558
+ return f.Length !== -1;
559
+ }
560
+ formatCompositeIndexStatement(entity, fields, indexName) {
561
+ const cols = fields.map(f => `[${f.Name}]`).join(', ');
562
+ return `-- Index for the soft primary key (${fields.map(f => f.Name).join(', ')}) in table ${entity.BaseTable}.
563
+ -- The key is metadata-only — no PRIMARY KEY constraint — so without this the per-record
564
+ -- existence check on the create path scans the whole table.
565
+ IF NOT EXISTS (
566
+ SELECT 1
567
+ FROM sys.indexes
568
+ WHERE name = '${indexName}'
569
+ AND object_id = OBJECT_ID('[${entity.SchemaName}].[${entity.BaseTable}]')
570
+ )
571
+ CREATE INDEX ${indexName} ON [${entity.SchemaName}].[${entity.BaseTable}] (${cols});`;
544
572
  }
545
573
  // ─── FULL-TEXT SEARCH ────────────────────────────────────────────────
546
574
  /**
@@ -1135,6 +1163,16 @@ GO
1135
1163
  // ─── PARAMETER / FIELD HELPERS ───────────────────────────────────────
1136
1164
  // ─── ROUTINE NAMING ──────────────────────────────────────────────────
1137
1165
  /** @inheritdoc */
1166
+ getRoutineNamesBySchemaSQL(schemas) {
1167
+ if (schemas.length === 0)
1168
+ return '';
1169
+ const inList = schemas.map(s => `'${s.replace(/'/g, "''")}'`).join(', ');
1170
+ return `SELECT s.name AS schema_name, p.name AS routine_name
1171
+ FROM sys.procedures p
1172
+ INNER JOIN sys.schemas s ON s.schema_id = p.schema_id
1173
+ WHERE s.name IN (${inList})`;
1174
+ }
1175
+ /** @inheritdoc */
1138
1176
  getCRUDRoutineName(entity, type) {
1139
1177
  switch (type) {
1140
1178
  case 'Create':