@or-sdk/pgsql 1.2.4-beta.3870.0 → 1.3.0-beta.3886.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/CHANGELOG.md +8 -0
- package/dist/cjs/Pgsql.js +17 -0
- package/dist/cjs/Pgsql.js.map +1 -1
- package/dist/cjs/utils/getGenerateTableSchemaQuery.js +4 -1
- package/dist/cjs/utils/getGenerateTableSchemaQuery.js.map +1 -1
- package/dist/esm/Pgsql.js +10 -0
- package/dist/esm/Pgsql.js.map +1 -1
- package/dist/esm/utils/getGenerateTableSchemaQuery.js +154 -17
- package/dist/esm/utils/getGenerateTableSchemaQuery.js.map +1 -1
- package/dist/types/Pgsql.d.ts +1 -0
- package/dist/types/Pgsql.d.ts.map +1 -1
- package/dist/types/utils/getGenerateTableSchemaQuery.d.ts +1 -0
- package/dist/types/utils/getGenerateTableSchemaQuery.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Pgsql.ts +16 -1
- package/src/utils/getGenerateTableSchemaQuery.ts +156 -19
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.2.4](https://gitlab.internal.onereach.io/onereach/platform/or-sdk-next/compare/@or-sdk/pgsql@1.2.3...@or-sdk/pgsql@1.2.4) (2025-11-04)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @or-sdk/pgsql
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [1.2.3](https://gitlab.internal.onereach.io/onereach/platform/or-sdk-next/compare/@or-sdk/pgsql@1.2.2...@or-sdk/pgsql@1.2.3) (2025-10-14)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @or-sdk/pgsql
|
package/dist/cjs/Pgsql.js
CHANGED
|
@@ -55,6 +55,7 @@ exports.Pgsql = void 0;
|
|
|
55
55
|
var base_1 = require("@or-sdk/base");
|
|
56
56
|
var constants_1 = require("./constants");
|
|
57
57
|
var utils_1 = require("./utils");
|
|
58
|
+
var getGenerateTableSchemaQuery_1 = require("./utils/getGenerateTableSchemaQuery");
|
|
58
59
|
var Pgsql = (function (_super) {
|
|
59
60
|
__extends(Pgsql, _super);
|
|
60
61
|
function Pgsql(params) {
|
|
@@ -390,6 +391,22 @@ var Pgsql = (function (_super) {
|
|
|
390
391
|
});
|
|
391
392
|
});
|
|
392
393
|
};
|
|
394
|
+
Pgsql.prototype.generateDbDefinition = function (database) {
|
|
395
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
396
|
+
var rows;
|
|
397
|
+
return __generator(this, function (_a) {
|
|
398
|
+
switch (_a.label) {
|
|
399
|
+
case 0: return [4, this.executeQuery({
|
|
400
|
+
database: database,
|
|
401
|
+
query: (0, getGenerateTableSchemaQuery_1.generateDbDefinitionsQuery)(),
|
|
402
|
+
})];
|
|
403
|
+
case 1:
|
|
404
|
+
rows = (_a.sent()).rows;
|
|
405
|
+
return [2, rows.map(function (x) { return x.code; }).join('\n')];
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
};
|
|
393
410
|
return Pgsql;
|
|
394
411
|
}(base_1.Base));
|
|
395
412
|
exports.Pgsql = Pgsql;
|
package/dist/cjs/Pgsql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pgsql.js","sourceRoot":"","sources":["../../src/Pgsql.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAkF;AAElF,yCAA8D;AAW9D,iCAUiB;
|
|
1
|
+
{"version":3,"file":"Pgsql.js","sourceRoot":"","sources":["../../src/Pgsql.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.generateDbDefinitionsQuery = void 0;
|
|
4
|
+
exports.default = (function (schema, table) { return "\nSELECT format(\n 'CREATE TABLE if not exists %I.%I (%s%s);',\n c.table_schema,\n c.table_name,\n \n -- 1. COLUMN DEFINITIONS (Your existing logic)\n string_agg(\n format(\n '%I %s%s',\n c.column_name,\n CASE \n WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'bigint' THEN 'BIGSERIAL'\n WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'integer' THEN 'SERIAL'\n WHEN c.data_type = 'ARRAY' THEN regexp_replace(c.udt_name, '^_', '') || '[]'\n WHEN c.data_type = 'USER-DEFINED' THEN c.udt_name\n WHEN c.character_maximum_length IS NOT NULL THEN c.data_type || '(' || c.character_maximum_length || ')'\n WHEN c.data_type IN ('numeric', 'decimal') AND c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL \n THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'\n ELSE c.data_type \n END,\n CASE WHEN c.is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||\n CASE \n WHEN c.column_default LIKE 'nextval(%' THEN ''\n WHEN c.column_default IS NOT NULL THEN ' DEFAULT ' || c.column_default \n ELSE '' \n END\n ),\n ', ' ORDER BY c.ordinal_position\n ),\n\n -- 2. FOREIGN KEY DEFINITIONS (New Logic)\n COALESCE(\n (\n SELECT string_agg(\n format(', CONSTRAINT %I %s', con.conname, pg_get_constraintdef(con.oid)), \n ''\n )\n FROM pg_constraint con\n JOIN pg_class t ON con.conrelid = t.oid\n JOIN pg_namespace n ON t.relnamespace = n.oid\n WHERE n.nspname = c.table_schema \n AND t.relname = c.table_name\n AND con.contype = 'f' -- 'f' = Foreign Key\n ),\n ''\n )\n\n ) as code\nFROM information_schema.columns c\n WHERE c.table_schema = '".concat(schema, "' \n AND c.table_name = '").concat(table, "'\n GROUP BY c.table_schema, c.table_name;\n"); });
|
|
5
|
+
var generateDbDefinitionsQuery = function () { return "\nwith schemas as(\nSELECT 'CREATE SCHEMA IF NOT EXISTS ' || quote_ident(nspname) || ';' code\nFROM pg_namespace\nWHERE nspname NOT LIKE 'pg_%' \n AND nspname != 'information_schema'\nORDER BY nspname\n),\n\nfk_info AS (\n -- Calculate FK definitions and counts per table beforehand\n SELECT \n n.nspname as schema_name,\n t.relname as table_name,\n count(*) as fk_count,\n string_agg(\n format(', CONSTRAINT %I %s', con.conname, pg_get_constraintdef(con.oid)), \n ''\n ) as fk_defs\n FROM pg_constraint con\n JOIN pg_class t ON con.conrelid = t.oid\n JOIN pg_namespace n ON t.relnamespace = n.oid\n WHERE con.contype = 'f' -- Foreign Key\n GROUP BY n.nspname, t.relname\n),\n\ntables as (SELECT format(\n 'CREATE TABLE IF NOT EXISTS %I.%I (%s%s);',\n c.table_schema,\n c.table_name,\n \n -- 1. COLUMN DEFINITIONS\n string_agg(\n format(\n '%I %s%s',\n c.column_name,\n CASE \n WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'bigint' THEN 'BIGSERIAL'\n WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'integer' THEN 'SERIAL'\n WHEN c.data_type = 'ARRAY' THEN regexp_replace(c.udt_name, '^_', '') || '[]'\n WHEN c.data_type = 'USER-DEFINED' THEN c.udt_name\n WHEN c.character_maximum_length IS NOT NULL THEN c.data_type || '(' || c.character_maximum_length || ')'\n WHEN c.data_type IN ('numeric', 'decimal') AND c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL \n THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'\n ELSE c.data_type \n END,\n CASE WHEN c.is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||\n CASE \n WHEN c.column_default LIKE 'nextval(%' THEN ''\n WHEN c.column_default IS NOT NULL THEN ' DEFAULT ' || c.column_default \n ELSE '' \n END\n ),\n ', ' ORDER BY c.ordinal_position\n ),\n\n -- 2. FOREIGN KEY DEFINITIONS (Joined from CTE)\n COALESCE(MAX(f.fk_defs), '')\n\n ) as code\nFROM information_schema.columns c\nLEFT JOIN fk_info f ON c.table_schema = f.schema_name AND c.table_name = f.table_name\nWHERE c.table_schema NOT IN ('information_schema', 'pg_catalog') \n AND c.table_schema NOT LIKE 'pg_toast%'\nGROUP BY c.table_schema, c.table_name\nORDER BY \n -- ORDER LOGIC: Tables with 0 FKs first, then 1, then 2...\n COALESCE(MAX(f.fk_count), 0) ASC, \n c.table_schema, \n c.table_name),\n\n\nindexes as (SELECT \n regexp_replace(\n indexdef, \n 'CREATE (UNIQUE )?INDEX', \n 'CREATE \\1INDEX IF NOT EXISTS'\n ) || ';' as code\nFROM pg_indexes\nWHERE schemaname NOT IN ('pg_catalog', 'information_schema')\n AND schemaname NOT LIKE 'pg_toast%'\nORDER BY schemaname, tablename, indexname) \n\n\n\nselect '--Create schemas' code\nunion all\nselect code from schemas\n\nunion all\nselect '\n\n--Create tables'\nunion all\nselect code from tables\n\nunion all\nselect '\n\n--Create indexes'\nunion all\nselect code from indexes\n\n"; };
|
|
6
|
+
exports.generateDbDefinitionsQuery = generateDbDefinitionsQuery;
|
|
4
7
|
//# sourceMappingURL=getGenerateTableSchemaQuery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getGenerateTableSchemaQuery.js","sourceRoot":"","sources":["../../../src/utils/getGenerateTableSchemaQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getGenerateTableSchemaQuery.js","sourceRoot":"","sources":["../../../src/utils/getGenerateTableSchemaQuery.ts"],"names":[],"mappings":";;;AACA,mBAAe,UAAC,MAAc,EAAE,KAAa,IAAK,OAAA,+5DAkDtB,MAAM,uCACV,KAAK,kDAE5B,EArDiD,CAqDjD,EAAC;AAEK,IAAM,0BAA0B,GAAG,cAAM,OAAA,8jGAmG/C,EAnG+C,CAmG/C,CAAC;AAnGW,QAAA,0BAA0B,8BAmGrC"}
|
package/dist/esm/Pgsql.js
CHANGED
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { Base, makeList } from '@or-sdk/base';
|
|
11
11
|
import { LIST_SCHEMAS_QUERY, SERVICE_KEY } from './constants';
|
|
12
12
|
import { createSchemaQuery, getAddColumnsQuery, getCreateTableQuery, getDeleteRowsQuery, getDropSchemaQuery, getDropTableQuery, getEditRowQuery, getGenerateTableSchemaQuery, getGetPrimaryKeysQuery, getInsertQueries, getListTablesQuery, getSelectAllCountQuery, getSelectAllQuery, } from './utils';
|
|
13
|
+
import { generateDbDefinitionsQuery } from './utils/getGenerateTableSchemaQuery';
|
|
13
14
|
export class Pgsql extends Base {
|
|
14
15
|
constructor(params) {
|
|
15
16
|
const { token, discoveryUrl, accountId, pgsqlUrl, version = 'master', isExternal, timeoutMs, transaction } = params;
|
|
@@ -236,5 +237,14 @@ export class Pgsql extends Base {
|
|
|
236
237
|
});
|
|
237
238
|
});
|
|
238
239
|
}
|
|
240
|
+
generateDbDefinition(database) {
|
|
241
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
242
|
+
const { rows } = yield this.executeQuery({
|
|
243
|
+
database,
|
|
244
|
+
query: generateDbDefinitionsQuery(),
|
|
245
|
+
});
|
|
246
|
+
return rows.map(x => x.code).join('\n');
|
|
247
|
+
});
|
|
248
|
+
}
|
|
239
249
|
}
|
|
240
250
|
//# sourceMappingURL=Pgsql.js.map
|
package/dist/esm/Pgsql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pgsql.js","sourceRoot":"","sources":["../../src/Pgsql.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAsC,QAAQ,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW9D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAAE,eAAe,EAAE,2BAA2B,EAC/D,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,GAC9D,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Pgsql.js","sourceRoot":"","sources":["../../src/Pgsql.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,155 @@
|
|
|
1
|
-
export default (schema, table) => `
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
export default (schema, table) => `
|
|
2
|
+
SELECT format(
|
|
3
|
+
'CREATE TABLE if not exists %I.%I (%s%s);',
|
|
4
|
+
c.table_schema,
|
|
5
|
+
c.table_name,
|
|
6
|
+
|
|
7
|
+
-- 1. COLUMN DEFINITIONS (Your existing logic)
|
|
8
|
+
string_agg(
|
|
9
|
+
format(
|
|
10
|
+
'%I %s%s',
|
|
11
|
+
c.column_name,
|
|
12
|
+
CASE
|
|
13
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'bigint' THEN 'BIGSERIAL'
|
|
14
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'integer' THEN 'SERIAL'
|
|
15
|
+
WHEN c.data_type = 'ARRAY' THEN regexp_replace(c.udt_name, '^_', '') || '[]'
|
|
16
|
+
WHEN c.data_type = 'USER-DEFINED' THEN c.udt_name
|
|
17
|
+
WHEN c.character_maximum_length IS NOT NULL THEN c.data_type || '(' || c.character_maximum_length || ')'
|
|
18
|
+
WHEN c.data_type IN ('numeric', 'decimal') AND c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL
|
|
19
|
+
THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'
|
|
20
|
+
ELSE c.data_type
|
|
21
|
+
END,
|
|
22
|
+
CASE WHEN c.is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||
|
|
23
|
+
CASE
|
|
24
|
+
WHEN c.column_default LIKE 'nextval(%' THEN ''
|
|
25
|
+
WHEN c.column_default IS NOT NULL THEN ' DEFAULT ' || c.column_default
|
|
26
|
+
ELSE ''
|
|
27
|
+
END
|
|
28
|
+
),
|
|
29
|
+
', ' ORDER BY c.ordinal_position
|
|
30
|
+
),
|
|
31
|
+
|
|
32
|
+
-- 2. FOREIGN KEY DEFINITIONS (New Logic)
|
|
33
|
+
COALESCE(
|
|
34
|
+
(
|
|
35
|
+
SELECT string_agg(
|
|
36
|
+
format(', CONSTRAINT %I %s', con.conname, pg_get_constraintdef(con.oid)),
|
|
37
|
+
''
|
|
38
|
+
)
|
|
39
|
+
FROM pg_constraint con
|
|
40
|
+
JOIN pg_class t ON con.conrelid = t.oid
|
|
41
|
+
JOIN pg_namespace n ON t.relnamespace = n.oid
|
|
42
|
+
WHERE n.nspname = c.table_schema
|
|
43
|
+
AND t.relname = c.table_name
|
|
44
|
+
AND con.contype = 'f' -- 'f' = Foreign Key
|
|
45
|
+
),
|
|
46
|
+
''
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
) as code
|
|
50
|
+
FROM information_schema.columns c
|
|
51
|
+
WHERE c.table_schema = '${schema}'
|
|
52
|
+
AND c.table_name = '${table}'
|
|
53
|
+
GROUP BY c.table_schema, c.table_name;
|
|
54
|
+
`;
|
|
55
|
+
export const generateDbDefinitionsQuery = () => `
|
|
56
|
+
with schemas as(
|
|
57
|
+
SELECT 'CREATE SCHEMA IF NOT EXISTS ' || quote_ident(nspname) || ';' code
|
|
58
|
+
FROM pg_namespace
|
|
59
|
+
WHERE nspname NOT LIKE 'pg_%'
|
|
60
|
+
AND nspname != 'information_schema'
|
|
61
|
+
ORDER BY nspname
|
|
62
|
+
),
|
|
63
|
+
|
|
64
|
+
fk_info AS (
|
|
65
|
+
-- Calculate FK definitions and counts per table beforehand
|
|
66
|
+
SELECT
|
|
67
|
+
n.nspname as schema_name,
|
|
68
|
+
t.relname as table_name,
|
|
69
|
+
count(*) as fk_count,
|
|
70
|
+
string_agg(
|
|
71
|
+
format(', CONSTRAINT %I %s', con.conname, pg_get_constraintdef(con.oid)),
|
|
72
|
+
''
|
|
73
|
+
) as fk_defs
|
|
74
|
+
FROM pg_constraint con
|
|
75
|
+
JOIN pg_class t ON con.conrelid = t.oid
|
|
76
|
+
JOIN pg_namespace n ON t.relnamespace = n.oid
|
|
77
|
+
WHERE con.contype = 'f' -- Foreign Key
|
|
78
|
+
GROUP BY n.nspname, t.relname
|
|
79
|
+
),
|
|
80
|
+
|
|
81
|
+
tables as (SELECT format(
|
|
82
|
+
'CREATE TABLE IF NOT EXISTS %I.%I (%s%s);',
|
|
83
|
+
c.table_schema,
|
|
84
|
+
c.table_name,
|
|
85
|
+
|
|
86
|
+
-- 1. COLUMN DEFINITIONS
|
|
87
|
+
string_agg(
|
|
88
|
+
format(
|
|
89
|
+
'%I %s%s',
|
|
90
|
+
c.column_name,
|
|
91
|
+
CASE
|
|
92
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'bigint' THEN 'BIGSERIAL'
|
|
93
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'integer' THEN 'SERIAL'
|
|
94
|
+
WHEN c.data_type = 'ARRAY' THEN regexp_replace(c.udt_name, '^_', '') || '[]'
|
|
95
|
+
WHEN c.data_type = 'USER-DEFINED' THEN c.udt_name
|
|
96
|
+
WHEN c.character_maximum_length IS NOT NULL THEN c.data_type || '(' || c.character_maximum_length || ')'
|
|
97
|
+
WHEN c.data_type IN ('numeric', 'decimal') AND c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL
|
|
98
|
+
THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'
|
|
99
|
+
ELSE c.data_type
|
|
100
|
+
END,
|
|
101
|
+
CASE WHEN c.is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||
|
|
102
|
+
CASE
|
|
103
|
+
WHEN c.column_default LIKE 'nextval(%' THEN ''
|
|
104
|
+
WHEN c.column_default IS NOT NULL THEN ' DEFAULT ' || c.column_default
|
|
105
|
+
ELSE ''
|
|
106
|
+
END
|
|
107
|
+
),
|
|
108
|
+
', ' ORDER BY c.ordinal_position
|
|
109
|
+
),
|
|
110
|
+
|
|
111
|
+
-- 2. FOREIGN KEY DEFINITIONS (Joined from CTE)
|
|
112
|
+
COALESCE(MAX(f.fk_defs), '')
|
|
113
|
+
|
|
114
|
+
) as code
|
|
115
|
+
FROM information_schema.columns c
|
|
116
|
+
LEFT JOIN fk_info f ON c.table_schema = f.schema_name AND c.table_name = f.table_name
|
|
117
|
+
WHERE c.table_schema NOT IN ('information_schema', 'pg_catalog')
|
|
118
|
+
AND c.table_schema NOT LIKE 'pg_toast%'
|
|
119
|
+
GROUP BY c.table_schema, c.table_name
|
|
120
|
+
ORDER BY
|
|
121
|
+
-- ORDER LOGIC: Tables with 0 FKs first, then 1, then 2...
|
|
122
|
+
COALESCE(MAX(f.fk_count), 0) ASC,
|
|
123
|
+
c.table_schema,
|
|
124
|
+
c.table_name),
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
indexes as (SELECT
|
|
128
|
+
regexp_replace(
|
|
129
|
+
indexdef,
|
|
130
|
+
'CREATE (UNIQUE )?INDEX',
|
|
131
|
+
'CREATE \\1INDEX IF NOT EXISTS'
|
|
132
|
+
) || ';' as code
|
|
133
|
+
FROM pg_indexes
|
|
134
|
+
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
|
|
135
|
+
AND schemaname NOT LIKE 'pg_toast%'
|
|
136
|
+
ORDER BY schemaname, tablename, indexname)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
select '--Create schemas' code
|
|
141
|
+
union all
|
|
142
|
+
select code from schemas
|
|
143
|
+
|
|
144
|
+
union all
|
|
145
|
+
select '\n\n--Create tables'
|
|
146
|
+
union all
|
|
147
|
+
select code from tables
|
|
148
|
+
|
|
149
|
+
union all
|
|
150
|
+
select '\n\n--Create indexes'
|
|
151
|
+
union all
|
|
152
|
+
select code from indexes
|
|
153
|
+
|
|
154
|
+
`;
|
|
18
155
|
//# sourceMappingURL=getGenerateTableSchemaQuery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getGenerateTableSchemaQuery.js","sourceRoot":"","sources":["../../../src/utils/getGenerateTableSchemaQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getGenerateTableSchemaQuery.js","sourceRoot":"","sources":["../../../src/utils/getGenerateTableSchemaQuery.ts"],"names":[],"mappings":"AACA,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAkDtB,MAAM;wBACV,KAAK;;CAE5B,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmG/C,CAAC"}
|
package/dist/types/Pgsql.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pgsql.d.ts","sourceRoot":"","sources":["../../src/Pgsql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAY,MAAM,cAAc,CAAC;AAGlF,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EAAE,eAAe,EACvC,YAAY,EACZ,cAAc,EAAE,oBAAoB,EAAE,WAAW,EACjD,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,UAAU,EAEnE,WAAW,EAAE,GAAG,EAAE,aAAa,EAChC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Pgsql.d.ts","sourceRoot":"","sources":["../../src/Pgsql.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getGenerateTableSchemaQuery.d.ts","sourceRoot":"","sources":["../../../src/utils/getGenerateTableSchemaQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getGenerateTableSchemaQuery.d.ts","sourceRoot":"","sources":["../../../src/utils/getGenerateTableSchemaQuery.ts"],"names":[],"mappings":"iCACwB,MAAM,SAAS,MAAM;AAA7C,wBAqDE;AAEF,eAAO,MAAM,0BAA0B,cAmGtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@or-sdk/pgsql",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0-beta.3886.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"dev": "pnpm build:watch:esm"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@or-sdk/base": "^0.42.4
|
|
21
|
+
"@or-sdk/base": "^0.42.4"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"concurrently": "9.0.1",
|
package/src/Pgsql.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
getInsertQueries,
|
|
23
23
|
getListTablesQuery, getSelectAllCountQuery, getSelectAllQuery,
|
|
24
24
|
} from './utils';
|
|
25
|
+
import { generateDbDefinitionsQuery } from './utils/getGenerateTableSchemaQuery';
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
export class Pgsql extends Base {
|
|
@@ -58,7 +59,7 @@ export class Pgsql extends Base {
|
|
|
58
59
|
public async makeRequest<T>(params: CalApiParams): Promise<T> {
|
|
59
60
|
if (this.feature && this.feature !== 'master') {
|
|
60
61
|
params.params ||= {};
|
|
61
|
-
(params.params as
|
|
62
|
+
(params.params as Record<string, unknown>).feature = this.feature;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
return this.callApi<T>(params);
|
|
@@ -522,4 +523,18 @@ export class Pgsql extends Base {
|
|
|
522
523
|
route: 'size',
|
|
523
524
|
});
|
|
524
525
|
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Generate database definition
|
|
529
|
+
* ```typescript
|
|
530
|
+
* const result = pgsql.generateDbDefinition('databaseName');
|
|
531
|
+
* ```
|
|
532
|
+
*/
|
|
533
|
+
public async generateDbDefinition(database: string): Promise<string> {
|
|
534
|
+
const { rows } = await this.executeQuery<{ code: string; }>({
|
|
535
|
+
database,
|
|
536
|
+
query: generateDbDefinitionsQuery(),
|
|
537
|
+
});
|
|
538
|
+
return rows.map(x => x.code).join('\n');
|
|
539
|
+
}
|
|
525
540
|
}
|
|
@@ -1,19 +1,156 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
|
|
2
|
+
export default (schema: string, table: string) => `
|
|
3
|
+
SELECT format(
|
|
4
|
+
'CREATE TABLE if not exists %I.%I (%s%s);',
|
|
5
|
+
c.table_schema,
|
|
6
|
+
c.table_name,
|
|
7
|
+
|
|
8
|
+
-- 1. COLUMN DEFINITIONS (Your existing logic)
|
|
9
|
+
string_agg(
|
|
10
|
+
format(
|
|
11
|
+
'%I %s%s',
|
|
12
|
+
c.column_name,
|
|
13
|
+
CASE
|
|
14
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'bigint' THEN 'BIGSERIAL'
|
|
15
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'integer' THEN 'SERIAL'
|
|
16
|
+
WHEN c.data_type = 'ARRAY' THEN regexp_replace(c.udt_name, '^_', '') || '[]'
|
|
17
|
+
WHEN c.data_type = 'USER-DEFINED' THEN c.udt_name
|
|
18
|
+
WHEN c.character_maximum_length IS NOT NULL THEN c.data_type || '(' || c.character_maximum_length || ')'
|
|
19
|
+
WHEN c.data_type IN ('numeric', 'decimal') AND c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL
|
|
20
|
+
THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'
|
|
21
|
+
ELSE c.data_type
|
|
22
|
+
END,
|
|
23
|
+
CASE WHEN c.is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||
|
|
24
|
+
CASE
|
|
25
|
+
WHEN c.column_default LIKE 'nextval(%' THEN ''
|
|
26
|
+
WHEN c.column_default IS NOT NULL THEN ' DEFAULT ' || c.column_default
|
|
27
|
+
ELSE ''
|
|
28
|
+
END
|
|
29
|
+
),
|
|
30
|
+
', ' ORDER BY c.ordinal_position
|
|
31
|
+
),
|
|
32
|
+
|
|
33
|
+
-- 2. FOREIGN KEY DEFINITIONS (New Logic)
|
|
34
|
+
COALESCE(
|
|
35
|
+
(
|
|
36
|
+
SELECT string_agg(
|
|
37
|
+
format(', CONSTRAINT %I %s', con.conname, pg_get_constraintdef(con.oid)),
|
|
38
|
+
''
|
|
39
|
+
)
|
|
40
|
+
FROM pg_constraint con
|
|
41
|
+
JOIN pg_class t ON con.conrelid = t.oid
|
|
42
|
+
JOIN pg_namespace n ON t.relnamespace = n.oid
|
|
43
|
+
WHERE n.nspname = c.table_schema
|
|
44
|
+
AND t.relname = c.table_name
|
|
45
|
+
AND con.contype = 'f' -- 'f' = Foreign Key
|
|
46
|
+
),
|
|
47
|
+
''
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
) as code
|
|
51
|
+
FROM information_schema.columns c
|
|
52
|
+
WHERE c.table_schema = '${schema}'
|
|
53
|
+
AND c.table_name = '${table}'
|
|
54
|
+
GROUP BY c.table_schema, c.table_name;
|
|
55
|
+
`;
|
|
56
|
+
|
|
57
|
+
export const generateDbDefinitionsQuery = () => `
|
|
58
|
+
with schemas as(
|
|
59
|
+
SELECT 'CREATE SCHEMA IF NOT EXISTS ' || quote_ident(nspname) || ';' code
|
|
60
|
+
FROM pg_namespace
|
|
61
|
+
WHERE nspname NOT LIKE 'pg_%'
|
|
62
|
+
AND nspname != 'information_schema'
|
|
63
|
+
ORDER BY nspname
|
|
64
|
+
),
|
|
65
|
+
|
|
66
|
+
fk_info AS (
|
|
67
|
+
-- Calculate FK definitions and counts per table beforehand
|
|
68
|
+
SELECT
|
|
69
|
+
n.nspname as schema_name,
|
|
70
|
+
t.relname as table_name,
|
|
71
|
+
count(*) as fk_count,
|
|
72
|
+
string_agg(
|
|
73
|
+
format(', CONSTRAINT %I %s', con.conname, pg_get_constraintdef(con.oid)),
|
|
74
|
+
''
|
|
75
|
+
) as fk_defs
|
|
76
|
+
FROM pg_constraint con
|
|
77
|
+
JOIN pg_class t ON con.conrelid = t.oid
|
|
78
|
+
JOIN pg_namespace n ON t.relnamespace = n.oid
|
|
79
|
+
WHERE con.contype = 'f' -- Foreign Key
|
|
80
|
+
GROUP BY n.nspname, t.relname
|
|
81
|
+
),
|
|
82
|
+
|
|
83
|
+
tables as (SELECT format(
|
|
84
|
+
'CREATE TABLE IF NOT EXISTS %I.%I (%s%s);',
|
|
85
|
+
c.table_schema,
|
|
86
|
+
c.table_name,
|
|
87
|
+
|
|
88
|
+
-- 1. COLUMN DEFINITIONS
|
|
89
|
+
string_agg(
|
|
90
|
+
format(
|
|
91
|
+
'%I %s%s',
|
|
92
|
+
c.column_name,
|
|
93
|
+
CASE
|
|
94
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'bigint' THEN 'BIGSERIAL'
|
|
95
|
+
WHEN c.column_default LIKE 'nextval(%' AND c.data_type = 'integer' THEN 'SERIAL'
|
|
96
|
+
WHEN c.data_type = 'ARRAY' THEN regexp_replace(c.udt_name, '^_', '') || '[]'
|
|
97
|
+
WHEN c.data_type = 'USER-DEFINED' THEN c.udt_name
|
|
98
|
+
WHEN c.character_maximum_length IS NOT NULL THEN c.data_type || '(' || c.character_maximum_length || ')'
|
|
99
|
+
WHEN c.data_type IN ('numeric', 'decimal') AND c.numeric_precision IS NOT NULL AND c.numeric_scale IS NOT NULL
|
|
100
|
+
THEN c.data_type || '(' || c.numeric_precision || ',' || c.numeric_scale || ')'
|
|
101
|
+
ELSE c.data_type
|
|
102
|
+
END,
|
|
103
|
+
CASE WHEN c.is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||
|
|
104
|
+
CASE
|
|
105
|
+
WHEN c.column_default LIKE 'nextval(%' THEN ''
|
|
106
|
+
WHEN c.column_default IS NOT NULL THEN ' DEFAULT ' || c.column_default
|
|
107
|
+
ELSE ''
|
|
108
|
+
END
|
|
109
|
+
),
|
|
110
|
+
', ' ORDER BY c.ordinal_position
|
|
111
|
+
),
|
|
112
|
+
|
|
113
|
+
-- 2. FOREIGN KEY DEFINITIONS (Joined from CTE)
|
|
114
|
+
COALESCE(MAX(f.fk_defs), '')
|
|
115
|
+
|
|
116
|
+
) as code
|
|
117
|
+
FROM information_schema.columns c
|
|
118
|
+
LEFT JOIN fk_info f ON c.table_schema = f.schema_name AND c.table_name = f.table_name
|
|
119
|
+
WHERE c.table_schema NOT IN ('information_schema', 'pg_catalog')
|
|
120
|
+
AND c.table_schema NOT LIKE 'pg_toast%'
|
|
121
|
+
GROUP BY c.table_schema, c.table_name
|
|
122
|
+
ORDER BY
|
|
123
|
+
-- ORDER LOGIC: Tables with 0 FKs first, then 1, then 2...
|
|
124
|
+
COALESCE(MAX(f.fk_count), 0) ASC,
|
|
125
|
+
c.table_schema,
|
|
126
|
+
c.table_name),
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
indexes as (SELECT
|
|
130
|
+
regexp_replace(
|
|
131
|
+
indexdef,
|
|
132
|
+
'CREATE (UNIQUE )?INDEX',
|
|
133
|
+
'CREATE \\1INDEX IF NOT EXISTS'
|
|
134
|
+
) || ';' as code
|
|
135
|
+
FROM pg_indexes
|
|
136
|
+
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
|
|
137
|
+
AND schemaname NOT LIKE 'pg_toast%'
|
|
138
|
+
ORDER BY schemaname, tablename, indexname)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
select '--Create schemas' code
|
|
143
|
+
union all
|
|
144
|
+
select code from schemas
|
|
145
|
+
|
|
146
|
+
union all
|
|
147
|
+
select '\n\n--Create tables'
|
|
148
|
+
union all
|
|
149
|
+
select code from tables
|
|
150
|
+
|
|
151
|
+
union all
|
|
152
|
+
select '\n\n--Create indexes'
|
|
153
|
+
union all
|
|
154
|
+
select code from indexes
|
|
155
|
+
|
|
156
|
+
`;
|