@memberjunction/codegen-lib 5.32.0 → 5.34.0
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/README.md +24 -0
- package/dist/Config/config.d.ts +19 -8
- package/dist/Config/config.d.ts.map +1 -1
- package/dist/Config/config.js +18 -8
- package/dist/Config/config.js.map +1 -1
- package/dist/Config/db-connection.d.ts.map +1 -1
- package/dist/Config/db-connection.js +8 -3
- package/dist/Config/db-connection.js.map +1 -1
- package/dist/Database/codeGenDatabaseProvider.d.ts +67 -0
- package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
- package/dist/Database/codeGenDatabaseProvider.js +82 -15
- package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
- package/dist/Database/manage-metadata.d.ts +112 -4
- package/dist/Database/manage-metadata.d.ts.map +1 -1
- package/dist/Database/manage-metadata.js +347 -43
- package/dist/Database/manage-metadata.js.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenConnection.d.ts +4 -0
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenConnection.d.ts.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenConnection.js +6 -0
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenConnection.js.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts +122 -16
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +605 -49
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js.map +1 -1
- package/dist/Database/providers/postgresql/viewFallback.d.ts +14 -0
- package/dist/Database/providers/postgresql/viewFallback.d.ts.map +1 -1
- package/dist/Database/providers/postgresql/viewFallback.js +107 -13
- package/dist/Database/providers/postgresql/viewFallback.js.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenConnection.d.ts +4 -0
- package/dist/Database/providers/sqlserver/SQLServerCodeGenConnection.d.ts.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenConnection.js +6 -0
- package/dist/Database/providers/sqlserver/SQLServerCodeGenConnection.js.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +5 -2
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +27 -7
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js.map +1 -1
- package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.test.js +101 -0
- package/dist/Database/providers/sqlserver/__tests__/SQLServerCodeGenProvider.test.js.map +1 -1
- package/dist/Database/sql.d.ts +8 -0
- package/dist/Database/sql.d.ts.map +1 -1
- package/dist/Database/sql.js +18 -14
- package/dist/Database/sql.js.map +1 -1
- package/dist/Database/sql_codegen.d.ts +19 -5
- package/dist/Database/sql_codegen.d.ts.map +1 -1
- package/dist/Database/sql_codegen.js +109 -55
- package/dist/Database/sql_codegen.js.map +1 -1
- package/dist/Misc/action_subclasses_codegen.js +1 -1
- package/dist/Misc/action_subclasses_codegen.js.map +1 -1
- package/dist/Misc/createNewUser.d.ts.map +1 -1
- package/dist/Misc/createNewUser.js +14 -3
- package/dist/Misc/createNewUser.js.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.js +23 -17
- package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
- package/dist/Misc/graphql_server_codegen.d.ts +11 -0
- package/dist/Misc/graphql_server_codegen.d.ts.map +1 -1
- package/dist/Misc/graphql_server_codegen.js +27 -40
- package/dist/Misc/graphql_server_codegen.js.map +1 -1
- package/dist/Misc/sql_logging.d.ts.map +1 -1
- package/dist/Misc/sql_logging.js +22 -2
- package/dist/Misc/sql_logging.js.map +1 -1
- package/dist/Misc/system_integrity.js +3 -3
- package/dist/Misc/system_integrity.js.map +1 -1
- package/dist/Misc/temp_batch_file.js +2 -2
- package/dist/Misc/temp_batch_file.js.map +1 -1
- package/dist/runCodeGen.d.ts +1 -1
- package/dist/runCodeGen.d.ts.map +1 -1
- package/dist/runCodeGen.js +51 -6
- package/dist/runCodeGen.js.map +1 -1
- package/package.json +19 -18
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* for CodeGen orchestration code.
|
|
5
5
|
*/
|
|
6
6
|
import pg from 'pg';
|
|
7
|
+
import { SQLDialect } from '@memberjunction/sql-dialect';
|
|
7
8
|
import { CodeGenConnection, CodeGenQueryResult, CodeGenTransaction } from '../../codeGenDatabaseProvider.js';
|
|
8
9
|
/**
|
|
9
10
|
* PostgreSQL implementation of CodeGenConnection.
|
|
@@ -31,8 +32,11 @@ import { CodeGenConnection, CodeGenQueryResult, CodeGenTransaction } from '../..
|
|
|
31
32
|
* ```
|
|
32
33
|
*/
|
|
33
34
|
export declare class PostgreSQLCodeGenConnection implements CodeGenConnection {
|
|
35
|
+
private static readonly _dialect;
|
|
34
36
|
private _pool;
|
|
35
37
|
constructor(pool: pg.Pool);
|
|
38
|
+
/** @inheritdoc */
|
|
39
|
+
get Dialect(): SQLDialect;
|
|
36
40
|
/**
|
|
37
41
|
* Provides access to the underlying pg.Pool for cases where
|
|
38
42
|
* PostgreSQL-specific functionality is needed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgreSQLCodeGenConnection.d.ts","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/PostgreSQLCodeGenConnection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EACrB,MAAM,+BAA+B,CAAC;AA4BvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IACjE,OAAO,CAAC,KAAK,CAAU;gBAEX,IAAI,EAAE,EAAE,CAAC,IAAI;IAIzB;;;OAGG;IACH,IAAW,IAAI,IAAI,EAAE,CAAC,IAAI,CAEzB;IAEK,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS/C,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM1F,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAWlG,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAMrD;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CAqB1B"}
|
|
1
|
+
{"version":3,"file":"PostgreSQLCodeGenConnection.d.ts","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/PostgreSQLCodeGenConnection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAqB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EACrB,MAAM,+BAA+B,CAAC;AA4BvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IACvE,OAAO,CAAC,KAAK,CAAU;gBAEX,IAAI,EAAE,EAAE,CAAC,IAAI;IAIzB,kBAAkB;IAClB,IAAW,OAAO,IAAI,UAAU,CAE/B;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,EAAE,CAAC,IAAI,CAEzB;IAEK,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS/C,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM1F,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAWlG,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAMrD;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CAqB1B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PostgreSQLDialect } from '@memberjunction/sql-dialect';
|
|
1
2
|
/**
|
|
2
3
|
* PostgreSQL transaction implementation wrapping pg.PoolClient.
|
|
3
4
|
*/
|
|
@@ -44,9 +45,14 @@ class PostgreSQLCodeGenTransaction {
|
|
|
44
45
|
* ```
|
|
45
46
|
*/
|
|
46
47
|
export class PostgreSQLCodeGenConnection {
|
|
48
|
+
static { this._dialect = new PostgreSQLDialect(); }
|
|
47
49
|
constructor(pool) {
|
|
48
50
|
this._pool = pool;
|
|
49
51
|
}
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
get Dialect() {
|
|
54
|
+
return PostgreSQLCodeGenConnection._dialect;
|
|
55
|
+
}
|
|
50
56
|
/**
|
|
51
57
|
* Provides access to the underlying pg.Pool for cases where
|
|
52
58
|
* PostgreSQL-specific functionality is needed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgreSQLCodeGenConnection.js","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/PostgreSQLCodeGenConnection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostgreSQLCodeGenConnection.js","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/PostgreSQLCodeGenConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,35 @@ import { DatabasePlatform, SQLDialect } from '@memberjunction/sql-dialect';
|
|
|
5
5
|
* PostgreSQL implementation of the CodeGen database provider.
|
|
6
6
|
* Generates PostgreSQL-native DDL for views, CRUD functions, triggers, indexes,
|
|
7
7
|
* full-text search, permissions, and other database objects.
|
|
8
|
+
*
|
|
9
|
+
* Registered with `MJGlobal.ClassFactory` against the canonical `'postgresql'`
|
|
10
|
+
* platform key — `SQLCodeGenBase` resolves this provider via
|
|
11
|
+
* `ClassFactory.CreateInstance(CodeGenDatabaseProvider, configInfo.dbPlatform)`.
|
|
8
12
|
*/
|
|
9
13
|
export declare class PostgreSQLCodeGenProvider extends CodeGenDatabaseProvider {
|
|
10
14
|
/** @inheritdoc */
|
|
11
15
|
get Dialect(): SQLDialect;
|
|
12
16
|
/** @inheritdoc */
|
|
13
17
|
get PlatformKey(): DatabasePlatform;
|
|
18
|
+
/**
|
|
19
|
+
* @inheritdoc
|
|
20
|
+
*
|
|
21
|
+
* PostgreSQL: NOT supported. PG's strict `CREATE OR REPLACE VIEW` parser
|
|
22
|
+
* resolves view names against the existing catalog state at parse time, so
|
|
23
|
+
* a body that LEFT-JOINs the view-being-created to itself (e.g. for a
|
|
24
|
+
* self-FK's virtual NameField) raises `42P01 undefined_table` on first
|
|
25
|
+
* creation. A `CREATE OR REPLACE` retry against a NULL-typed stub then
|
|
26
|
+
* fails with `cannot change data type of view column ... from text to
|
|
27
|
+
* character varying(N)` because PG enforces strict column-type compat in
|
|
28
|
+
* `CREATE OR REPLACE`.
|
|
29
|
+
*
|
|
30
|
+
* Returning `false` tells `sql_codegen.ts` to skip the self-join entirely
|
|
31
|
+
* for self-FK + virtual-NameField cases. The trade-off: the corresponding
|
|
32
|
+
* virtual column (e.g. `RestoredFrom` on `vwRecordChanges`) is not emitted.
|
|
33
|
+
* Matches the baseline-shipped vwRecordChanges shape, which never had this
|
|
34
|
+
* column either.
|
|
35
|
+
*/
|
|
36
|
+
canSelfJoinViewForVirtualNameField(): boolean;
|
|
14
37
|
/**
|
|
15
38
|
* Generates a PostgreSQL `DROP ... IF EXISTS ... CASCADE` statement as a guard before
|
|
16
39
|
* creating or replacing a database object. For triggers, PostgreSQL relies on
|
|
@@ -18,25 +41,43 @@ export declare class PostgreSQLCodeGenProvider extends CodeGenDatabaseProvider {
|
|
|
18
41
|
*/
|
|
19
42
|
generateDropGuard(objectType: 'VIEW' | 'PROCEDURE' | 'FUNCTION' | 'TRIGGER', schema: string, name: string): string;
|
|
20
43
|
/**
|
|
21
|
-
* Generates a PostgreSQL
|
|
44
|
+
* Generates a PostgreSQL view-regeneration block for an entity's base view.
|
|
45
|
+
*
|
|
22
46
|
* Includes all base table columns, parent/related field joins, and root field lateral
|
|
23
47
|
* joins. Applies a soft-delete `WHERE` filter when the entity uses soft deletes.
|
|
24
48
|
*
|
|
25
|
-
* **
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
49
|
+
* **Two-path emission (try-then-fallback).** The output wraps `CREATE OR REPLACE VIEW`
|
|
50
|
+
* in a `DO $$ ... EXCEPTION WHEN invalid_table_definition THEN DROP VIEW ... CASCADE;
|
|
51
|
+
* EXECUTE vsql; END $$` block. Why:
|
|
52
|
+
*
|
|
53
|
+
* - Happy path: `CREATE OR REPLACE VIEW` succeeds (new column list is a prefix of
|
|
54
|
+
* the existing one plus optional trailing additions). Zero destruction. No
|
|
55
|
+
* dependent views, functions, triggers, or grants are touched.
|
|
30
56
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
57
|
+
* - Sad path: PG raises SQLSTATE `42P16 invalid_table_definition` for any column
|
|
58
|
+
* rename / reorder / type change / removal. The exception handler runs
|
|
59
|
+
* `DROP VIEW ... CASCADE` and re-executes the CREATE. Dependent codegen-managed
|
|
60
|
+
* functions (spCreate/spUpdate/spDelete returning `SETOF vwFoo`) and dependent
|
|
61
|
+
* views are CASCADE-dropped — they are regenerated later in the same codegen
|
|
62
|
+
* output stream, so by the end of the run all dependents are restored to the new
|
|
63
|
+
* shape. GRANTs on the view itself are also lost on the CASCADE; codegen always
|
|
64
|
+
* re-emits permissions immediately after the view, so they come back too.
|
|
65
|
+
*
|
|
66
|
+
* The runtime-apply path also calls this, so the live DB applies the same DO block.
|
|
67
|
+
* `executeWithFallback` (the runtime helper) becomes a no-op for these statements
|
|
68
|
+
* because the DO block handles 42P16 internally — but it still runs as a safety net
|
|
69
|
+
* for any other failure modes.
|
|
70
|
+
*
|
|
71
|
+
* **What this DOES NOT preserve on the sad path:** non-codegen-managed dependent
|
|
72
|
+
* objects (e.g. a hand-written sproc against this view that codegen doesn't know
|
|
73
|
+
* about). Those would be CASCADE-dropped and not restored. MJ codegen-generated
|
|
74
|
+
* sprocs cover all standard CRUD pathways; bespoke sprocs against base views are
|
|
75
|
+
* extremely rare in practice. If a project does have them, they need to be re-applied
|
|
76
|
+
* after a 42P16 fallback fires.
|
|
77
|
+
*
|
|
78
|
+
* This pattern matches the v5.30.x fix migration `V202604282300` — which used the
|
|
79
|
+
* same DO/EXCEPTION construct to recreate `vwEntityPermissions` after the unquoted
|
|
80
|
+
* RoleName alias bug — proving the pattern is production-tested.
|
|
40
81
|
*
|
|
41
82
|
* Permissions are handled separately by sql_codegen.ts via generateViewPermissions().
|
|
42
83
|
*/
|
|
@@ -50,6 +91,53 @@ export declare class PostgreSQLCodeGenProvider extends CodeGenDatabaseProvider {
|
|
|
50
91
|
* via `pg_proc` is the only way to drop without knowing the exact prior signature.
|
|
51
92
|
*/
|
|
52
93
|
private generateDropAllOverloadsBlock;
|
|
94
|
+
/**
|
|
95
|
+
* Returns true when this entity should emit JSON-arg sprocs (single `JSONB`
|
|
96
|
+
* parameter, key-presence semantics) for the given CRUD verb instead of the
|
|
97
|
+
* default typed-arg shape. Driven by PostgreSQL's hard 100-arg `FUNC_MAX_ARGS`
|
|
98
|
+
* ceiling — once a typed-arg sproc would project past `POSTGRESQL_PROCEDURE_PARAM_LIMIT`,
|
|
99
|
+
* we switch to JSON-arg.
|
|
100
|
+
*
|
|
101
|
+
* Calls the same `useJsonArgShape` predicate used by the runtime so codegen
|
|
102
|
+
* emit and runtime invocation cannot disagree (see `crudSprocFieldRules`
|
|
103
|
+
* in `@memberjunction/generic-database-provider`).
|
|
104
|
+
*/
|
|
105
|
+
private shouldUseJsonArgShape;
|
|
106
|
+
/**
|
|
107
|
+
* Returns the per-column JSON cast expression for the JSON-arg sproc body,
|
|
108
|
+
* e.g. `(p_data->>'PromptID')::UUID` or `(p_data->>'Status')` for plain text.
|
|
109
|
+
* The mapping mirrors `mapSQLType` but as JSON-extraction casts; types that
|
|
110
|
+
* don't need a cast (TEXT/VARCHAR) emit just the bare extraction. Binary
|
|
111
|
+
* (BYTEA) decodes from base64 string. JSON-typed columns use `->` (not
|
|
112
|
+
* `->>`) to keep the JSONB structure intact.
|
|
113
|
+
*/
|
|
114
|
+
private renderJsonExtractAndCast;
|
|
115
|
+
/**
|
|
116
|
+
* Generates the SET clause body for a JSON-arg UPDATE sproc — one `CASE WHEN
|
|
117
|
+
* p_data ? 'Field' THEN <cast> ELSE "Field" END` per writable column, plus
|
|
118
|
+
* the audit-timestamp assignment.
|
|
119
|
+
*/
|
|
120
|
+
private renderJsonArgUpdateSetClause;
|
|
121
|
+
/**
|
|
122
|
+
* Generates the JSON-arg variant of `spUpdate*` for wide entities. Single
|
|
123
|
+
* `p_data JSONB` parameter; per-column `CASE WHEN p_data ? 'Field' THEN
|
|
124
|
+
* <cast> ELSE "Field" END` body. Key-absent leaves the column unchanged;
|
|
125
|
+
* key=null clears it; key=value sets it. Identity column (`ID`) is required
|
|
126
|
+
* in the payload; all other columns are optional.
|
|
127
|
+
*/
|
|
128
|
+
private generateCRUDUpdateJsonArg;
|
|
129
|
+
/**
|
|
130
|
+
* Generates the JSON-arg variant of `spCreate*` for wide entities. Single
|
|
131
|
+
* `p_data JSONB` parameter; uses `EXECUTE format(...)` to build the INSERT
|
|
132
|
+
* dynamically based on which keys are present in `p_data` so absent keys
|
|
133
|
+
* fall back to column DEFAULT (matching the typed-arg sproc's default-
|
|
134
|
+
* substitution behavior). Returns the newly created row from the base view.
|
|
135
|
+
*
|
|
136
|
+
* Single-UUID-PK entities auto-generate the PK if `p_data` doesn't include
|
|
137
|
+
* one (matching `gen_random_uuid()` default). Composite-PK entities require
|
|
138
|
+
* caller-supplied PKs.
|
|
139
|
+
*/
|
|
140
|
+
private generateCRUDCreateJsonArg;
|
|
53
141
|
/**
|
|
54
142
|
* Generates a PostgreSQL `CREATE OR REPLACE FUNCTION` for inserting a new record.
|
|
55
143
|
* The function accepts typed parameters for each writable field, performs an `INSERT`
|
|
@@ -60,6 +148,11 @@ export declare class PostgreSQLCodeGenProvider extends CodeGenDatabaseProvider {
|
|
|
60
148
|
*
|
|
61
149
|
* Prepends a DROP-all-overloads block (see `generateDropAllOverloadsBlock`) so
|
|
62
150
|
* adding/removing a column doesn't trigger PG's overload-ambiguity error.
|
|
151
|
+
*
|
|
152
|
+
* Wide entities (where `useJsonArgShape` returns true) emit a JSON-arg variant
|
|
153
|
+
* via `generateCRUDCreateJsonArg` — single `p_data JSONB` parameter, dynamic
|
|
154
|
+
* INSERT built from keys present in the payload. Same semantics; different
|
|
155
|
+
* wire shape needed because of PostgreSQL's 100-arg function ceiling.
|
|
63
156
|
*/
|
|
64
157
|
generateCRUDCreate(entity: EntityInfo): string;
|
|
65
158
|
/**
|
|
@@ -116,6 +209,20 @@ export declare class PostgreSQLCodeGenProvider extends CodeGenDatabaseProvider {
|
|
|
116
209
|
* root record's primary key value.
|
|
117
210
|
*/
|
|
118
211
|
generateRootIDFunction(entity: EntityInfo, field: EntityFieldInfo): string;
|
|
212
|
+
/**
|
|
213
|
+
* Produces the canonical name for the recursive root-finder helper function
|
|
214
|
+
* generated for self-referencing fields. The function definition and the
|
|
215
|
+
* view's LATERAL-JOIN reference must agree on this name (caller side calls
|
|
216
|
+
* via `generateRootFieldJoin`, definition via `generateRootIDFunction`).
|
|
217
|
+
*
|
|
218
|
+
* Note: this intentionally does NOT match the baseline-shipped PascalCase
|
|
219
|
+
* `fn{Table}{Field}_GetRootID` form, because the baseline returns
|
|
220
|
+
* `TABLE("RootID" type)` and the view callers expect a scalar — using the
|
|
221
|
+
* baseline name would clash with `cannot change return type of existing
|
|
222
|
+
* function`. The snake_case scalar form is codegen's own naming space and
|
|
223
|
+
* is consistent with how downstream views are emitted.
|
|
224
|
+
*/
|
|
225
|
+
private getRootIDFunctionName;
|
|
119
226
|
/** @inheritdoc */
|
|
120
227
|
generateRootFieldSelect(_entity: EntityInfo, field: EntityFieldInfo, alias: string): string;
|
|
121
228
|
/**
|
|
@@ -187,7 +294,6 @@ export declare class PostgreSQLCodeGenProvider extends CodeGenDatabaseProvider {
|
|
|
187
294
|
/** @inheritdoc */
|
|
188
295
|
generateAllEntitiesSQLFileHeader(): string;
|
|
189
296
|
/**
|
|
190
|
-
* Maps a SQL default value expression to its PostgreSQL equivalent. Translates
|
|
191
297
|
* SQL Server built-in functions (e.g., `NEWID()` to `gen_random_uuid()`,
|
|
192
298
|
* `GETUTCDATE()` to `NOW() AT TIME ZONE 'UTC'`), strips outer parentheses and
|
|
193
299
|
* surrounding single quotes, and re-applies quoting based on the {@link needsQuotes}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgreSQLCodeGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/PostgreSQLCodeGenProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAwB,MAAM,sBAAsB,CAAC;AAEzF,OAAO,EACH,uBAAuB,EACvB,QAAQ,EACR,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACxB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAqB,gBAAgB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"PostgreSQLCodeGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/Database/providers/postgresql/PostgreSQLCodeGenProvider.ts"],"names":[],"mappings":"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"}
|