@dbml/connector 10.4.0-alpha.1 → 10.4.0-alpha.13
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/__tests__/connector.test.ts +73 -0
- package/dist/index.js +90 -68
- package/dist/index.mjs +3798 -3810
- package/package.json +3 -3
- package/src/connectors/oracle/tables.ts +1 -1
- package/src/connectors/postgres/index.ts +54 -33
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@dbml/connector",
|
|
4
|
-
"version": "10.4.0-alpha.
|
|
4
|
+
"version": "10.4.0-alpha.13",
|
|
5
5
|
"description": "This package was created to fetch the schema JSON from many kind of databases.",
|
|
6
6
|
"author": "huy.phung.sw@gmail.com",
|
|
7
7
|
"license": "MIT",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"ts-node": "^10.9.2"
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "
|
|
20
|
+
"build": "rimraf ./dist && vite build",
|
|
21
21
|
"dev": "vite build --watch",
|
|
22
22
|
"start": "node dist/index.js",
|
|
23
23
|
"test:watch": "vitest watch",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"engines": {
|
|
40
40
|
"node": ">=18"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "eb532f0c02afa5195a0e4f52b615025d6a9cea9c"
|
|
43
43
|
}
|
|
@@ -135,7 +135,7 @@ function getDbdefault (columnDefault: string | null, defaultType: string): Defau
|
|
|
135
135
|
|
|
136
136
|
// Field type utils
|
|
137
137
|
|
|
138
|
-
// These datatypes are never qualified: data size, data scale and data precision
|
|
138
|
+
// These datatypes are never qualified: data size, data scale and data precision
|
|
139
139
|
// Ref: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Data-Types.html
|
|
140
140
|
const UNQUALIFIED_DATA_TYPES = new Set([
|
|
141
141
|
// datetime
|
|
@@ -54,7 +54,9 @@ const getFieldType = (data_type: string, udt_name: string, character_maximum_len
|
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
const getDbdefault = (data_type: string, column_default: string, default_type: DefaultType): DefaultInfo => {
|
|
57
|
-
|
|
57
|
+
// Only a non-empty ARRAY[...] constructor is rewritten here. Other array defaults, such as
|
|
58
|
+
// '{a,b}'::text[], ARRAY[]::text[] or a function call, are handled below like any other default
|
|
59
|
+
if (data_type === 'ARRAY' && column_default.startsWith('ARRAY[') && !column_default.startsWith('ARRAY[]')) {
|
|
58
60
|
const values = column_default.slice(6, -1).split(',').map((value) => {
|
|
59
61
|
return value.split('::')[0];
|
|
60
62
|
});
|
|
@@ -228,40 +230,59 @@ const generateRawRefs = async (client: Client, schemas: string[]): Promise<Ref[]
|
|
|
228
230
|
|
|
229
231
|
const refsListSql = `
|
|
230
232
|
SELECT
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
STRING_AGG(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
STRING_AGG(
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
233
|
+
source_ns.nspname AS table_schema,
|
|
234
|
+
source_table.relname AS table_name,
|
|
235
|
+
constraint_row.conname AS fk_constraint_name,
|
|
236
|
+
STRING_AGG(source_column.attname, ',' ORDER BY key_column.ordinality) AS column_names,
|
|
237
|
+
target_ns.nspname AS foreign_table_schema,
|
|
238
|
+
target_table.relname AS foreign_table_name,
|
|
239
|
+
STRING_AGG(target_column.attname, ',' ORDER BY key_column.ordinality) AS foreign_column_names,
|
|
240
|
+
CASE constraint_row.confdeltype
|
|
241
|
+
WHEN 'a' THEN 'NO ACTION'
|
|
242
|
+
WHEN 'r' THEN 'RESTRICT'
|
|
243
|
+
WHEN 'c' THEN 'CASCADE'
|
|
244
|
+
WHEN 'n' THEN 'SET NULL'
|
|
245
|
+
WHEN 'd' THEN 'SET DEFAULT'
|
|
246
|
+
END AS on_delete,
|
|
247
|
+
CASE constraint_row.confupdtype
|
|
248
|
+
WHEN 'a' THEN 'NO ACTION'
|
|
249
|
+
WHEN 'r' THEN 'RESTRICT'
|
|
250
|
+
WHEN 'c' THEN 'CASCADE'
|
|
251
|
+
WHEN 'n' THEN 'SET NULL'
|
|
252
|
+
WHEN 'd' THEN 'SET DEFAULT'
|
|
253
|
+
END AS on_update
|
|
254
|
+
FROM pg_constraint AS constraint_row
|
|
255
|
+
JOIN pg_class AS source_table
|
|
256
|
+
ON constraint_row.conrelid = source_table.oid
|
|
257
|
+
JOIN pg_namespace AS source_ns
|
|
258
|
+
ON source_table.relnamespace = source_ns.oid
|
|
259
|
+
JOIN pg_class AS target_table
|
|
260
|
+
ON constraint_row.confrelid = target_table.oid
|
|
261
|
+
JOIN pg_namespace AS target_ns
|
|
262
|
+
ON target_table.relnamespace = target_ns.oid
|
|
263
|
+
JOIN LATERAL unnest(constraint_row.conkey, constraint_row.confkey)
|
|
264
|
+
WITH ORDINALITY AS key_column(source_attnum, target_attnum, ordinality)
|
|
265
|
+
ON TRUE
|
|
266
|
+
JOIN pg_attribute AS source_column
|
|
267
|
+
ON source_column.attrelid = source_table.oid
|
|
268
|
+
AND source_column.attnum = key_column.source_attnum
|
|
269
|
+
JOIN pg_attribute AS target_column
|
|
270
|
+
ON target_column.attrelid = target_table.oid
|
|
271
|
+
AND target_column.attnum = key_column.target_attnum
|
|
272
|
+
WHERE constraint_row.contype = 'f'
|
|
273
|
+
AND source_ns.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
274
|
+
${buildSchemaQuery('source_ns.nspname', schemas)}
|
|
253
275
|
GROUP BY
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
rc.update_rule
|
|
276
|
+
source_ns.nspname,
|
|
277
|
+
source_table.relname,
|
|
278
|
+
constraint_row.conname,
|
|
279
|
+
target_ns.nspname,
|
|
280
|
+
target_table.relname,
|
|
281
|
+
constraint_row.confdeltype,
|
|
282
|
+
constraint_row.confupdtype
|
|
262
283
|
ORDER BY
|
|
263
|
-
|
|
264
|
-
|
|
284
|
+
source_ns.nspname,
|
|
285
|
+
source_table.relname;
|
|
265
286
|
`;
|
|
266
287
|
|
|
267
288
|
const refsQueryResult = await client.query(refsListSql);
|