@forestadmin/datasource-sql 1.7.41 → 1.7.42

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 (26) hide show
  1. package/dist/introspection/dialects/dialect-factory.d.ts +4 -0
  2. package/dist/introspection/dialects/dialect-factory.js +28 -0
  3. package/dist/introspection/dialects/dialect.interface.d.ts +12 -0
  4. package/dist/introspection/dialects/dialect.interface.js +3 -0
  5. package/dist/introspection/dialects/mariadb-dialect.d.ts +8 -0
  6. package/dist/introspection/dialects/mariadb-dialect.js +40 -0
  7. package/dist/introspection/dialects/mssql-dialect.d.ts +14 -0
  8. package/dist/introspection/dialects/mssql-dialect.js +150 -0
  9. package/dist/introspection/dialects/mysql-dialect/index.d.ts +26 -0
  10. package/dist/introspection/dialects/mysql-dialect/index.js +93 -0
  11. package/dist/introspection/dialects/mysql-dialect/parse-enum.d.ts +5 -0
  12. package/dist/introspection/dialects/mysql-dialect/parse-enum.js +44 -0
  13. package/dist/introspection/dialects/postgresql-dialect/index.d.ts +20 -0
  14. package/dist/introspection/dialects/postgresql-dialect/index.js +153 -0
  15. package/dist/introspection/dialects/postgresql-dialect/parse-array.d.ts +5 -0
  16. package/dist/introspection/dialects/postgresql-dialect/parse-array.js +39 -0
  17. package/dist/introspection/dialects/sqlite-dialect.d.ts +9 -0
  18. package/dist/introspection/dialects/sqlite-dialect.js +63 -0
  19. package/dist/introspection/helpers/default-value-parser.d.ts +4 -9
  20. package/dist/introspection/helpers/default-value-parser.js +15 -48
  21. package/dist/introspection/helpers/sql-type-converter.d.ts +3 -2
  22. package/dist/introspection/helpers/sql-type-converter.js +5 -11
  23. package/dist/introspection/introspector.d.ts +1 -1
  24. package/dist/introspection/introspector.js +51 -78
  25. package/dist/introspection/type-overrides.d.ts +1 -1
  26. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import { Dialect } from 'sequelize';
2
+ import IntrospectionDialect from './dialect.interface';
3
+ export default function introspectionDialectFactory(dialect: Dialect): IntrospectionDialect;
4
+ //# sourceMappingURL=dialect-factory.d.ts.map
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mariadb_dialect_1 = __importDefault(require("./mariadb-dialect"));
7
+ const mssql_dialect_1 = __importDefault(require("./mssql-dialect"));
8
+ const mysql_dialect_1 = __importDefault(require("./mysql-dialect"));
9
+ const postgresql_dialect_1 = __importDefault(require("./postgresql-dialect"));
10
+ const sqlite_dialect_1 = __importDefault(require("./sqlite-dialect"));
11
+ function introspectionDialectFactory(dialect) {
12
+ switch (dialect) {
13
+ case 'postgres':
14
+ return new postgresql_dialect_1.default();
15
+ case 'mssql':
16
+ return new mssql_dialect_1.default();
17
+ case 'mysql':
18
+ return new mysql_dialect_1.default();
19
+ case 'mariadb':
20
+ return new mariadb_dialect_1.default();
21
+ case 'sqlite':
22
+ return new sqlite_dialect_1.default();
23
+ default:
24
+ throw new Error(`Unsupported dialect: ${dialect}`);
25
+ }
26
+ }
27
+ exports.default = introspectionDialectFactory;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGVjdC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vZGlhbGVjdHMvZGlhbGVjdC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0Esd0VBQStDO0FBQy9DLG9FQUEyQztBQUMzQyxvRUFBMkM7QUFDM0MsOEVBQXFEO0FBQ3JELHNFQUE2QztBQUU3QyxTQUF3QiwyQkFBMkIsQ0FBQyxPQUFnQjtJQUNsRSxRQUFRLE9BQU8sRUFBRTtRQUNmLEtBQUssVUFBVTtZQUNiLE9BQU8sSUFBSSw0QkFBaUIsRUFBRSxDQUFDO1FBQ2pDLEtBQUssT0FBTztZQUNWLE9BQU8sSUFBSSx1QkFBWSxFQUFFLENBQUM7UUFDNUIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLHVCQUFZLEVBQUUsQ0FBQztRQUM1QixLQUFLLFNBQVM7WUFDWixPQUFPLElBQUkseUJBQWMsRUFBRSxDQUFDO1FBQzlCLEtBQUssUUFBUTtZQUNYLE9BQU8sSUFBSSx3QkFBYSxFQUFFLENBQUM7UUFDN0I7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ3REO0FBQ0gsQ0FBQztBQWZELDhDQWVDIn0=
@@ -0,0 +1,12 @@
1
+ import { Sequelize } from 'sequelize';
2
+ import { SequelizeColumn, SequelizeTableIdentifier } from '../type-overrides';
3
+ export type ColumnDescription = Omit<SequelizeColumn, 'defaultValue'> & {
4
+ name: string;
5
+ isLiteralDefaultValue: boolean;
6
+ enumValues: string[] | null;
7
+ defaultValue: string | null;
8
+ };
9
+ export default interface IntrospectionDialect {
10
+ listColumns(tableNames: SequelizeTableIdentifier[], sequelize: Sequelize): Promise<ColumnDescription[][]>;
11
+ }
12
+ //# sourceMappingURL=dialect.interface.d.ts.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGVjdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9kaWFsZWN0cy9kaWFsZWN0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,8 @@
1
+ import MySQLDialect, { MySQLDBColumn } from './mysql-dialect';
2
+ export default class MariadbDialect extends MySQLDialect {
3
+ protected mapDefaultValue(dbColumn: MySQLDBColumn): {
4
+ defaultValue: string;
5
+ isLiteralDefaultValue: boolean;
6
+ };
7
+ }
8
+ //# sourceMappingURL=mariadb-dialect.d.ts.map
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mysql_dialect_1 = __importDefault(require("./mysql-dialect"));
7
+ class MariadbDialect extends mysql_dialect_1.default {
8
+ mapDefaultValue(dbColumn) {
9
+ if (dbColumn.Default === null || dbColumn.Default?.toLowerCase() === 'null') {
10
+ return {
11
+ defaultValue: null,
12
+ isLiteralDefaultValue: false,
13
+ };
14
+ }
15
+ if (dbColumn.Default?.startsWith("'") && dbColumn.Default?.endsWith("'")) {
16
+ if (dbColumn.Type === 'text') {
17
+ return {
18
+ defaultValue: dbColumn.Default.slice(1, -1).replace(/\\(.)/g, '$1'),
19
+ isLiteralDefaultValue: false,
20
+ };
21
+ }
22
+ return {
23
+ defaultValue: dbColumn.Default.slice(1, -1).replace(/''/g, "'").replace(/\\\\/g, '\\'),
24
+ isLiteralDefaultValue: false,
25
+ };
26
+ }
27
+ if (!Number.isNaN(Number(dbColumn.Default))) {
28
+ return {
29
+ defaultValue: dbColumn.Default,
30
+ isLiteralDefaultValue: false,
31
+ };
32
+ }
33
+ return {
34
+ defaultValue: dbColumn.Default,
35
+ isLiteralDefaultValue: true,
36
+ };
37
+ }
38
+ }
39
+ exports.default = MariadbDialect;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyaWFkYi1kaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vZGlhbGVjdHMvbWFyaWFkYi1kaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0VBQThEO0FBRTlELE1BQXFCLGNBQWUsU0FBUSx1QkFBWTtJQUNuQyxlQUFlLENBQUMsUUFBdUI7UUFJeEQsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRTtZQUMzRSxPQUFPO2dCQUNMLFlBQVksRUFBRSxJQUFJO2dCQUNsQixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSDtRQUVELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDNUIsT0FBTztvQkFDTCxZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7b0JBQ25FLHFCQUFxQixFQUFFLEtBQUs7aUJBQzdCLENBQUM7YUFDSDtZQUVELE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7Z0JBQ3RGLHFCQUFxQixFQUFFLEtBQUs7YUFDN0IsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO1lBQzNDLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUM5QixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSDtRQUVELE9BQU87WUFDTCxZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDOUIscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdENELGlDQXNDQyJ9
@@ -0,0 +1,14 @@
1
+ import { Sequelize } from 'sequelize';
2
+ import IntrospectionDialect, { ColumnDescription } from './dialect.interface';
3
+ import { SequelizeTableIdentifier } from '../type-overrides';
4
+ export default class MsSQLDialect implements IntrospectionDialect {
5
+ listColumns(tableNames: SequelizeTableIdentifier[], sequelize: Sequelize): Promise<ColumnDescription[][]>;
6
+ private getColumnDescription;
7
+ /**
8
+ * Fixes the default behavior of Sequelize that does not allow us to
9
+ * detect if a value is a function call or a constant value
10
+ */
11
+ private mapDefaultValue;
12
+ private extractConstantValue;
13
+ }
14
+ //# sourceMappingURL=mssql-dialect.d.ts.map
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sequelize_1 = require("sequelize");
4
+ class MsSQLDialect {
5
+ async listColumns(tableNames, sequelize) {
6
+ if (!sequelize.getDatabaseName())
7
+ throw new Error('Database name is required. Please check your connection settings.');
8
+ if (!tableNames?.length)
9
+ return Promise.resolve([]);
10
+ const conditions = `(${tableNames
11
+ .map((_, index) => `(c.table_schema = :schemaName${index}
12
+ AND c.table_name = :tableName${index}
13
+ )`)
14
+ .join(' OR ')})`;
15
+ const query = `
16
+ SELECT
17
+ c.TABLE_SCHEMA AS 'Schema',
18
+ c.TABLE_NAME AS 'Table',
19
+ c.COLUMN_NAME AS 'Name',
20
+ c.DATA_TYPE AS 'Type',
21
+ c.CHARACTER_MAXIMUM_LENGTH AS 'Length',
22
+ c.IS_NULLABLE as 'IsNull',
23
+ COLUMN_DEFAULT AS 'Default',
24
+ pk.CONSTRAINT_TYPE AS 'Constraint',
25
+ COLUMNPROPERTY(
26
+ OBJECT_ID('['+c.TABLE_SCHEMA+'].['+c.TABLE_NAME+']'),
27
+ c.COLUMN_NAME, 'IsIdentity'
28
+ ) as 'IsIdentity',
29
+ CAST(prop.value AS NVARCHAR) AS 'Comment'
30
+ FROM INFORMATION_SCHEMA.TABLES t
31
+ INNER JOIN INFORMATION_SCHEMA.COLUMNS c
32
+ ON t.TABLE_NAME = c.TABLE_NAME
33
+ AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
34
+ LEFT JOIN (
35
+ SELECT tc.table_schema, tc.table_name,
36
+ cu.column_name, tc.CONSTRAINT_TYPE
37
+ FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
38
+ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu
39
+ ON tc.table_schema=cu.table_schema
40
+ AND tc.table_name=cu.table_name
41
+ AND tc.constraint_name=cu.constraint_name
42
+ AND tc.CONSTRAINT_TYPE='PRIMARY KEY'
43
+ ) pk
44
+ ON pk.table_schema=c.table_schema
45
+ AND pk.table_name=c.table_name
46
+ AND pk.column_name=c.column_name
47
+ INNER JOIN sys.columns AS sc
48
+ ON sc.object_id = OBJECT_ID('['+t.table_schema + '].[' + t.table_name+']')
49
+ AND sc.name = c.column_name
50
+ LEFT JOIN sys.extended_properties prop ON prop.major_id = sc.object_id
51
+ AND prop.minor_id = sc.column_id
52
+ AND prop.name = 'MS_Description'
53
+ WHERE
54
+ t.TABLE_CATALOG = :database
55
+ AND ${conditions}`;
56
+ const replacements = tableNames.reduce((acc, tableName, index) => ({
57
+ ...acc,
58
+ [`tableName${index}`]: tableName.tableName,
59
+ [`schemaName${index}`]: tableName.schema || 'dbo',
60
+ }), {
61
+ database: sequelize.getDatabaseName(),
62
+ });
63
+ const results = await sequelize.query(query, {
64
+ replacements,
65
+ type: sequelize_1.QueryTypes.SELECT,
66
+ logging: false,
67
+ });
68
+ return tableNames.map(tableName => {
69
+ return results
70
+ .filter(column => column.Table === tableName.tableName && column.Schema === (tableName.schema || 'dbo'))
71
+ .map(column => this.getColumnDescription(column));
72
+ });
73
+ }
74
+ getColumnDescription(dbColumn) {
75
+ let type = dbColumn.Type.toUpperCase();
76
+ if (type.includes('CHAR')) {
77
+ type = `${type}(${dbColumn.Length === -1 ? 'MAX' : dbColumn.Length})`;
78
+ }
79
+ const sequelizeColumn = {
80
+ type,
81
+ allowNull: dbColumn.IsNull === 'YES',
82
+ comment: dbColumn.Comment,
83
+ primaryKey: dbColumn.Constraint === 'PRIMARY KEY',
84
+ defaultValue: dbColumn.Default,
85
+ autoIncrement: dbColumn.IsIdentity === 1,
86
+ special: [],
87
+ };
88
+ const { defaultValue, isLiteralDefaultValue } = this.mapDefaultValue(sequelizeColumn);
89
+ return {
90
+ ...sequelizeColumn,
91
+ name: dbColumn.Name,
92
+ defaultValue,
93
+ isLiteralDefaultValue,
94
+ enumValues: null,
95
+ };
96
+ }
97
+ /**
98
+ * Fixes the default behavior of Sequelize that does not allow us to
99
+ * detect if a value is a function call or a constant value
100
+ */
101
+ mapDefaultValue(description) {
102
+ if (description.defaultValue === null ||
103
+ !description.defaultValue?.startsWith('(') ||
104
+ !description.defaultValue?.endsWith(')')) {
105
+ // Strange case if not null
106
+ return {
107
+ defaultValue: null,
108
+ isLiteralDefaultValue: false,
109
+ };
110
+ }
111
+ const defaultValueWithoutParenthesis = description.defaultValue.slice(1, -1);
112
+ if (defaultValueWithoutParenthesis.startsWith("N'") &&
113
+ defaultValueWithoutParenthesis.endsWith("'")) {
114
+ return {
115
+ defaultValue: this.extractConstantValue(defaultValueWithoutParenthesis.slice(2, -1)),
116
+ isLiteralDefaultValue: false,
117
+ };
118
+ }
119
+ if (defaultValueWithoutParenthesis.startsWith("'") &&
120
+ defaultValueWithoutParenthesis.endsWith("'")) {
121
+ return {
122
+ defaultValue: this.extractConstantValue(defaultValueWithoutParenthesis.slice(1, -1)),
123
+ isLiteralDefaultValue: false,
124
+ };
125
+ }
126
+ if (defaultValueWithoutParenthesis.startsWith('(') &&
127
+ defaultValueWithoutParenthesis.endsWith(')') &&
128
+ !Number.isNaN(Number(defaultValueWithoutParenthesis.slice(1, -1)))) {
129
+ return {
130
+ defaultValue: defaultValueWithoutParenthesis.slice(1, -1),
131
+ isLiteralDefaultValue: false,
132
+ };
133
+ }
134
+ if (defaultValueWithoutParenthesis === 'NULL') {
135
+ return {
136
+ defaultValue: null,
137
+ isLiteralDefaultValue: false,
138
+ };
139
+ }
140
+ return {
141
+ defaultValue: defaultValueWithoutParenthesis,
142
+ isLiteralDefaultValue: true,
143
+ };
144
+ }
145
+ extractConstantValue(value) {
146
+ return value.replace(/''/g, "'");
147
+ }
148
+ }
149
+ exports.default = MsSQLDialect;
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNzcWwtZGlhbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnRyb3NwZWN0aW9uL2RpYWxlY3RzL21zc3FsLWRpYWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBa0Q7QUFpQmxELE1BQXFCLFlBQVk7SUFDL0IsS0FBSyxDQUFDLFdBQVcsQ0FDZixVQUFzQyxFQUN0QyxTQUFvQjtRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNO1lBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVTthQUM5QixHQUFHLENBQ0YsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDWCxnQ0FBZ0MsS0FBSzsyQ0FDSixLQUFLO2NBQ2xDLENBQ1A7YUFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUVuQixNQUFNLEtBQUssR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQXdDSixVQUFVLEVBQUUsQ0FBQztRQUV2QixNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNwQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLEdBQUcsR0FBRztZQUNOLENBQUMsWUFBWSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzFDLENBQUMsYUFBYSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSztTQUNsRCxDQUFDLEVBQ0Y7WUFDRSxRQUFRLEVBQUUsU0FBUyxDQUFDLGVBQWUsRUFBRTtTQUN0QyxDQUNGLENBQUM7UUFFRixN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
@@ -0,0 +1,26 @@
1
+ import { Sequelize } from 'sequelize';
2
+ import { SequelizeTableIdentifier } from '../../type-overrides';
3
+ import IntrospectionDialect, { ColumnDescription } from '../dialect.interface';
4
+ export type MySQLDBColumn = {
5
+ Table: string;
6
+ Field: string;
7
+ Default: string;
8
+ Null: 'YES' | 'NO';
9
+ Type: string;
10
+ Extra: string;
11
+ Comment: string;
12
+ Key: string;
13
+ };
14
+ export default class MySQLDialect implements IntrospectionDialect {
15
+ listColumns(tableNames: SequelizeTableIdentifier[], sequelize: Sequelize): Promise<ColumnDescription[][]>;
16
+ private getColumnDescription;
17
+ /**
18
+ * Fixes the default behavior of Sequelize that does not allow us to
19
+ * detect if a value is a function call or a constant value
20
+ */
21
+ protected mapDefaultValue(dbColumn: MySQLDBColumn): {
22
+ defaultValue: string;
23
+ isLiteralDefaultValue: boolean;
24
+ };
25
+ }
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const sequelize_1 = require("sequelize");
7
+ const parse_enum_1 = __importDefault(require("./parse-enum"));
8
+ class MySQLDialect {
9
+ async listColumns(tableNames, sequelize) {
10
+ if (!sequelize.getDatabaseName())
11
+ throw new Error('Database name is required. Please check your connection settings.');
12
+ if (!tableNames?.length)
13
+ return Promise.resolve([]);
14
+ const columns = await sequelize.query(`
15
+ SELECT TABLE_NAME AS 'Table',
16
+ COLUMN_NAME AS 'Field',
17
+ COLUMN_DEFAULT AS 'Default',
18
+ IS_NULLABLE AS 'Null',
19
+ COLUMN_TYPE AS 'Type',
20
+ EXTRA AS 'Extra',
21
+ COLUMN_COMMENT AS 'Comment',
22
+ COLUMN_KEY AS 'Key'
23
+ FROM INFORMATION_SCHEMA.COLUMNS
24
+ WHERE TABLE_SCHEMA = :databaseName
25
+ AND TABLE_NAME IN (:tableNames)
26
+ ORDER BY TABLE_NAME, ORDINAL_POSITION
27
+ `, {
28
+ type: sequelize_1.QueryTypes.SELECT,
29
+ replacements: {
30
+ databaseName: sequelize.getDatabaseName(),
31
+ tableNames: tableNames.map(t => t.tableName),
32
+ },
33
+ });
34
+ return tableNames.map(table => {
35
+ const tableColumns = columns.filter(c => c.Table === table.tableName);
36
+ return tableColumns.map(c => this.getColumnDescription(c));
37
+ });
38
+ }
39
+ getColumnDescription(dbColumn) {
40
+ const type = dbColumn.Type.startsWith('enum')
41
+ ? dbColumn.Type.replace(/^enum/, 'ENUM')
42
+ : dbColumn.Type.toUpperCase();
43
+ const sequelizeColumn = {
44
+ type,
45
+ allowNull: dbColumn.Null === 'YES',
46
+ comment: dbColumn.Comment || null,
47
+ primaryKey: dbColumn.Key === 'PRI',
48
+ defaultValue: dbColumn.Default,
49
+ autoIncrement: dbColumn.Extra?.toLowerCase() === 'auto_increment',
50
+ };
51
+ const { defaultValue, isLiteralDefaultValue } = this.mapDefaultValue(dbColumn);
52
+ return {
53
+ ...sequelizeColumn,
54
+ name: dbColumn.Field,
55
+ defaultValue,
56
+ isLiteralDefaultValue,
57
+ enumValues: (0, parse_enum_1.default)(type),
58
+ };
59
+ }
60
+ /**
61
+ * Fixes the default behavior of Sequelize that does not allow us to
62
+ * detect if a value is a function call or a constant value
63
+ */
64
+ mapDefaultValue(dbColumn) {
65
+ if (dbColumn.Default === null) {
66
+ return {
67
+ defaultValue: null,
68
+ isLiteralDefaultValue: false,
69
+ };
70
+ }
71
+ const extra = dbColumn.Extra?.toUpperCase();
72
+ if (extra?.includes('DEFAULT_GENERATED') || extra?.includes('AUTO_INCREMENT')) {
73
+ return {
74
+ defaultValue: dbColumn.Default,
75
+ isLiteralDefaultValue: true,
76
+ };
77
+ }
78
+ // For MySQL 5
79
+ if (dbColumn.Type?.toLowerCase() === 'datetime' &&
80
+ dbColumn.Default?.toLowerCase() === 'current_timestamp') {
81
+ return {
82
+ defaultValue: dbColumn.Default,
83
+ isLiteralDefaultValue: true,
84
+ };
85
+ }
86
+ return {
87
+ defaultValue: dbColumn.Default,
88
+ isLiteralDefaultValue: false,
89
+ };
90
+ }
91
+ }
92
+ exports.default = MySQLDialect;
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9kaWFsZWN0cy9teXNxbC1kaWFsZWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQWtEO0FBRWxELDhEQUFxQztBQWVyQyxNQUFxQixZQUFZO0lBQy9CLEtBQUssQ0FBQyxXQUFXLENBQ2YsVUFBc0MsRUFDdEMsU0FBb0I7UUFFcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTTtZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQ25DOzs7Ozs7Ozs7Ozs7O09BYUMsRUFDRDtZQUNFLElBQUksRUFBRSxzQkFBVSxDQUFDLE1BQU07WUFDdkIsWUFBWSxFQUFFO2dCQUNaLFlBQVksRUFBRSxTQUFTLENBQUMsZUFBZSxFQUFFO2dCQUN6QyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDN0M7U0FDRixDQUNGLENBQUM7UUFFRixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXRFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQXVCO1FBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMzQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUN4QyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoQyxNQUFNLGVBQWUsR0FBb0I7WUFDdkMsSUFBSTtZQUNKLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUs7WUFDbEMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSTtZQUNqQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxLQUFLO1lBQ2xDLFlBQVksRUFBRSxRQUFRLENBQUMsT0FBTztZQUM5QixhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxnQkFBZ0I7U0FDbEUsQ0FBQztRQUVGLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9FLE9BQU87WUFDTCxHQUFHLGVBQWU7WUFDbEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3BCLFlBQVk7WUFDWixxQkFBcUI7WUFDckIsVUFBVSxFQUFFLElBQUEsb0JBQVMsRUFBQyxJQUFJLENBQUM7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDTyxlQUFlLENBQUMsUUFBdUI7UUFJL0MsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUM3QixPQUFPO2dCQUNMLFlBQVksRUFBRSxJQUFJO2dCQUNsQixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSDtRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFNUMsSUFBSSxLQUFLLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzdFLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUM5QixxQkFBcUIsRUFBRSxJQUFJO2FBQzVCLENBQUM7U0FDSDtRQUVELGNBQWM7UUFDZCxJQUNFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssVUFBVTtZQUMzQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLG1CQUFtQixFQUN2RDtZQUNBLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUM5QixxQkFBcUIsRUFBRSxJQUFJO2FBQzVCLENBQUM7U0FDSDtRQUVELE9BQU87WUFDTCxZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDOUIscUJBQXFCLEVBQUUsS0FBSztTQUM3QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBekdELCtCQXlHQyJ9
@@ -0,0 +1,5 @@
1
+ /**
2
+ * "ENUM('enum1','enum2')" returns ['enum1', 'enum2']]
3
+ */
4
+ export default function parseEnum(type: string | null): string[];
5
+ //# sourceMappingURL=parse-enum.d.ts.map
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * "ENUM('enum1','enum2')" returns ['enum1', 'enum2']]
5
+ */
6
+ function parseEnum(type) {
7
+ if (!type?.startsWith('ENUM('))
8
+ return null;
9
+ const values = type.slice(5, -1);
10
+ let buffer = '';
11
+ let isInValue = false;
12
+ const list = [];
13
+ for (let i = 0; i < values.length; i += 1) {
14
+ const currentChar = values[i];
15
+ if (currentChar === "'") {
16
+ if (!isInValue) {
17
+ isInValue = true;
18
+ }
19
+ else if (values[i + 1] === "'") {
20
+ buffer += "'";
21
+ i += 1;
22
+ }
23
+ else {
24
+ isInValue = false;
25
+ }
26
+ }
27
+ else if (currentChar === '\\') {
28
+ buffer += values[i + 1];
29
+ i += 1;
30
+ }
31
+ else if (!isInValue && currentChar === ',') {
32
+ list.push(buffer);
33
+ buffer = '';
34
+ }
35
+ else {
36
+ buffer += currentChar;
37
+ }
38
+ }
39
+ if (buffer.length)
40
+ list.push(buffer);
41
+ return list;
42
+ }
43
+ exports.default = parseEnum;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbnRyb3NwZWN0aW9uL2RpYWxlY3RzL215c3FsLWRpYWxlY3QvcGFyc2UtZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOztHQUVHO0FBQ0gsU0FBd0IsU0FBUyxDQUFDLElBQW1CO0lBQ25ELElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN0QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUIsSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNsQjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUNoQyxNQUFNLElBQUksR0FBRyxDQUFDO2dCQUNkLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDUjtpQkFBTTtnQkFDTCxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQ25CO1NBQ0Y7YUFBTSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDL0IsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNSO2FBQU0sSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUNiO2FBQU07WUFDTCxNQUFNLElBQUksV0FBVyxDQUFDO1NBQ3ZCO0tBQ0Y7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFuQ0QsNEJBbUNDIn0=
@@ -0,0 +1,20 @@
1
+ import { Sequelize } from 'sequelize';
2
+ import { SequelizeTableIdentifier } from '../../type-overrides';
3
+ import IntrospectionDialect, { ColumnDescription } from '../dialect.interface';
4
+ export default class PostgreSQLDialect implements IntrospectionDialect {
5
+ listColumns(tableNames: SequelizeTableIdentifier[], sequelize: Sequelize): Promise<ColumnDescription[][]>;
6
+ private getColumnDescription;
7
+ /**
8
+ * Fixes the default behavior of Sequelize that does not allow us to
9
+ * detect if a value is a function call or a constant value
10
+ */
11
+ private mapDefaultValue;
12
+ /**
13
+ * Fixes the default behavior from Sequelize that does not support
14
+ * default values containing "::"
15
+ * And we don't want to make the same mistake with other characters
16
+ * ex: ''rabbit'::character varying' returns 'rabbit'
17
+ */
18
+ private extractConstantValue;
19
+ }
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const sequelize_1 = require("sequelize");
7
+ const parse_array_1 = __importDefault(require("./parse-array"));
8
+ class PostgreSQLDialect {
9
+ async listColumns(tableNames, sequelize) {
10
+ if (!sequelize.getDatabaseName())
11
+ throw new Error('Database name is required. Please check your connection settings.');
12
+ if (!tableNames?.length)
13
+ return [];
14
+ const conditions = `(${tableNames
15
+ .map((_, index) => `(c.table_schema = :schemaName${index}
16
+ AND c.table_name = :tableName${index}
17
+ )`)
18
+ .join(' OR ')})`;
19
+ // Query inspired by Sequelize, but adapted for multiple tables
20
+ // and support of multiple databases
21
+ const query = `
22
+ SELECT
23
+ c.table_schema as "Schema",
24
+ c.table_name as "Table",
25
+ c.column_name as "Field",
26
+ pk.constraint_type as "Constraint",
27
+ c.column_default as "Default",
28
+ c.is_nullable as "Null",
29
+ c.identity_generation as "Identity",
30
+ (CASE WHEN c.udt_name = 'hstore' THEN c.udt_name ELSE c.data_type END)
31
+ || (CASE WHEN c.character_maximum_length IS NOT NULL
32
+ THEN '(' || c.character_maximum_length || ')'
33
+ ELSE '' END) as "Type",
34
+ (SELECT array_agg(e.enumlabel)
35
+ FROM pg_catalog.pg_type t JOIN pg_catalog.pg_enum e ON t.oid=e.enumtypid
36
+ WHERE t.typname=c.udt_name
37
+ ) AS "Special",
38
+ (SELECT pgd.description
39
+ FROM pg_catalog.pg_statio_all_tables AS st
40
+ INNER JOIN pg_catalog.pg_description pgd on (pgd.objoid=st.relid)
41
+ WHERE c.ordinal_position=pgd.objsubid AND c.table_name=st.relname
42
+ ) AS "Comment"
43
+ FROM
44
+ information_schema.columns c
45
+ LEFT JOIN (
46
+ SELECT tc.table_schema, tc.table_name,
47
+ cu.column_name, tc.constraint_type
48
+ FROM information_schema.TABLE_CONSTRAINTS tc
49
+ JOIN information_schema.KEY_COLUMN_USAGE cu
50
+ ON tc.table_schema=cu.table_schema
51
+ AND tc.table_name=cu.table_name
52
+ AND tc.constraint_name=cu.constraint_name
53
+ AND tc.constraint_type='PRIMARY KEY'
54
+ AND tc.constraint_catalog=:database
55
+ ) pk ON pk.table_schema=c.table_schema
56
+ AND pk.table_name=c.table_name
57
+ AND pk.column_name=c.column_name
58
+ WHERE c.table_catalog = :database
59
+ AND ${conditions}
60
+ ORDER BY c.table_schema, c.table_name, c.ordinal_position;
61
+ `;
62
+ const replacements = tableNames.reduce((acc, tableName, index) => ({
63
+ ...acc,
64
+ [`tableName${index}`]: tableName.tableName,
65
+ [`schemaName${index}`]: tableName.schema || 'public',
66
+ }), {
67
+ database: sequelize.getDatabaseName(),
68
+ });
69
+ const results = await sequelize.query(query, {
70
+ replacements,
71
+ type: sequelize_1.QueryTypes.SELECT,
72
+ logging: false,
73
+ });
74
+ return tableNames.map(tableName => {
75
+ return results
76
+ .filter(column => column.Table === tableName.tableName &&
77
+ column.Schema === (tableName.schema || 'public'))
78
+ .map(column => this.getColumnDescription(column));
79
+ });
80
+ }
81
+ getColumnDescription(dbColumn) {
82
+ const type = dbColumn.Type.toUpperCase();
83
+ const sequelizeColumn = {
84
+ type,
85
+ allowNull: dbColumn.Null === 'YES',
86
+ comment: dbColumn.Comment,
87
+ special: (0, parse_array_1.default)(dbColumn.Special),
88
+ primaryKey: dbColumn.Constraint === 'PRIMARY KEY',
89
+ defaultValue: dbColumn.Default,
90
+ // Supabase databases do not expose a default value for auto-increment columns
91
+ // but Identity is set to "BY DEFAULT" in this case
92
+ autoIncrement: Boolean(dbColumn.Default?.startsWith('nextval(')) || dbColumn.Identity !== null,
93
+ };
94
+ const { defaultValue, isLiteralDefaultValue } = this.mapDefaultValue(sequelizeColumn);
95
+ return {
96
+ ...sequelizeColumn,
97
+ name: dbColumn.Field,
98
+ defaultValue,
99
+ isLiteralDefaultValue,
100
+ enumValues: sequelizeColumn.special,
101
+ };
102
+ }
103
+ /**
104
+ * Fixes the default behavior of Sequelize that does not allow us to
105
+ * detect if a value is a function call or a constant value
106
+ */
107
+ mapDefaultValue(description) {
108
+ if (description.type === 'BOOLEAN' && !description.defaultValue) {
109
+ return { defaultValue: 'false', isLiteralDefaultValue: false };
110
+ }
111
+ if (description.defaultValue === null || description.defaultValue?.startsWith('NULL::')) {
112
+ return { defaultValue: null, isLiteralDefaultValue: false };
113
+ }
114
+ if (['true', 'false'].includes(description.defaultValue)) {
115
+ return { defaultValue: description.defaultValue, isLiteralDefaultValue: false };
116
+ }
117
+ if (description.defaultValue && !Number.isNaN(Number(description.defaultValue))) {
118
+ return { defaultValue: description.defaultValue, isLiteralDefaultValue: false };
119
+ }
120
+ if (description.defaultValue.startsWith("'")) {
121
+ const constantValue = this.extractConstantValue(description.defaultValue);
122
+ return { defaultValue: constantValue, isLiteralDefaultValue: false };
123
+ }
124
+ return {
125
+ defaultValue: description.defaultValue,
126
+ isLiteralDefaultValue: true,
127
+ };
128
+ }
129
+ /**
130
+ * Fixes the default behavior from Sequelize that does not support
131
+ * default values containing "::"
132
+ * And we don't want to make the same mistake with other characters
133
+ * ex: ''rabbit'::character varying' returns 'rabbit'
134
+ */
135
+ extractConstantValue(value) {
136
+ let buffer = '';
137
+ for (let i = 1; i < value.length; i += 1) {
138
+ const char = value[i];
139
+ if (char === "'") {
140
+ if (value[i + 1] === "'") {
141
+ i += 1;
142
+ }
143
+ else {
144
+ return buffer;
145
+ }
146
+ }
147
+ buffer += char;
148
+ }
149
+ throw new Error(`Invalid constant value: ${value}`);
150
+ }
151
+ }
152
+ exports.default = PostgreSQLDialect;
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9kaWFsZWN0cy9wb3N0Z3Jlc3FsLWRpYWxlY3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5Q0FBa0Q7QUFFbEQsZ0VBQXVDO0FBaUJ2QyxNQUFxQixpQkFBaUI7SUFDcEMsS0FBSyxDQUFDLFdBQVcsQ0FDZixVQUFzQyxFQUN0QyxTQUFvQjtRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVO2FBQzlCLEdBQUcsQ0FDRixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNYLGdDQUFnQyxLQUFLOzJDQUNKLEtBQUs7Y0FDbEMsQ0FDUDthQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBRW5CLCtEQUErRDtRQUMvRCxvQ0FBb0M7UUFDcEMsTUFBTSxLQUFLLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBc0NKLFVBQVU7O0tBRW5CLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNwQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLEdBQUcsR0FBRztZQUNOLENBQUMsWUFBWSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzFDLENBQUMsYUFBYSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLElBQUksUUFBUTtTQUNyRCxDQUFDLEVBQ0Y7WUFDRSxRQUFRLEVBQUUsU0FBUyxDQUFDLGVBQWUsRUFB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
@@ -0,0 +1,5 @@
1
+ /**
2
+ * '{1,2,"cat", "dog"}' returns ['1', '2', 'cat', 'dog']
3
+ */
4
+ export default function parseArray(value: string | null): string[];
5
+ //# sourceMappingURL=parse-array.d.ts.map
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * '{1,2,"cat", "dog"}' returns ['1', '2', 'cat', 'dog']
5
+ */
6
+ function parseArray(value) {
7
+ if (!value?.length || !value.startsWith('{') || !value.endsWith('}'))
8
+ return null;
9
+ const values = value.slice(1, -1);
10
+ const list = [];
11
+ let isInValue = false;
12
+ let buffer = '';
13
+ for (let i = 0; i < values.length; i += 1) {
14
+ const currentChar = values[i];
15
+ if (currentChar === '\\') {
16
+ buffer += values[i + 1];
17
+ i += 1;
18
+ }
19
+ else if (currentChar === "'" && values[i + 1] === "'") {
20
+ buffer += "'";
21
+ i += 1;
22
+ }
23
+ else if (currentChar === '"') {
24
+ isInValue = !isInValue;
25
+ }
26
+ else if (currentChar === ',' && !isInValue) {
27
+ list.push(buffer);
28
+ buffer = '';
29
+ }
30
+ else {
31
+ buffer += currentChar;
32
+ }
33
+ }
34
+ if (buffer.length)
35
+ list.push(buffer);
36
+ return list;
37
+ }
38
+ exports.default = parseArray;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9kaWFsZWN0cy9wb3N0Z3Jlc3FsLWRpYWxlY3QvcGFyc2UtYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNILFNBQXdCLFVBQVUsQ0FBQyxLQUFvQjtJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWxGLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN0QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUIsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDUjthQUFNLElBQUksV0FBVyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUN2RCxNQUFNLElBQUksR0FBRyxDQUFDO1lBQ2QsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNSO2FBQU0sSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO1lBQzlCLFNBQVMsR0FBRyxDQUFDLFNBQVMsQ0FBQztTQUN4QjthQUFNLElBQUksV0FBVyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDYjthQUFNO1lBQ0wsTUFBTSxJQUFJLFdBQVcsQ0FBQztTQUN2QjtLQUNGO0lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBL0JELDZCQStCQyJ9
@@ -0,0 +1,9 @@
1
+ import { Sequelize } from 'sequelize';
2
+ import IntrospectionDialect, { ColumnDescription } from './dialect.interface';
3
+ import { SequelizeTableIdentifier } from '../type-overrides';
4
+ export default class SQLiteDialect implements IntrospectionDialect {
5
+ listColumns(tableNames: SequelizeTableIdentifier[], sequelize: Sequelize): Promise<ColumnDescription[][]>;
6
+ private listColumnsForTable;
7
+ private mapDefaultValue;
8
+ }
9
+ //# sourceMappingURL=sqlite-dialect.d.ts.map
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sequelize_1 = require("sequelize");
4
+ class SQLiteDialect {
5
+ listColumns(tableNames, sequelize) {
6
+ if (!tableNames?.length)
7
+ return Promise.resolve([]);
8
+ return Promise.all(tableNames.map(tableName => this.listColumnsForTable(tableName, sequelize)));
9
+ }
10
+ async listColumnsForTable(tableIdentifier, sequelize) {
11
+ const [columns, [{ sql }]] = await Promise.all([
12
+ sequelize.query(`PRAGMA table_info(:tableName)`, {
13
+ type: sequelize_1.QueryTypes.SELECT,
14
+ replacements: { tableName: tableIdentifier.tableName },
15
+ }),
16
+ sequelize.query(`SELECT sql FROM sqlite_master WHERE tbl_name=:tableName`, {
17
+ type: sequelize_1.QueryTypes.SELECT,
18
+ replacements: { tableName: tableIdentifier.tableName },
19
+ }),
20
+ ]);
21
+ return columns.map(column => {
22
+ const primaryKey = Boolean(column.pk);
23
+ return {
24
+ name: column.name,
25
+ type: column.type,
26
+ allowNull: !column.notnull && !primaryKey,
27
+ primaryKey,
28
+ // Not bullet proof, but that's all we can do with SQLite
29
+ // without starting to parse SQL queries
30
+ autoIncrement: primaryKey && sql.includes(`AUTOINCREMENT`),
31
+ comment: null,
32
+ ...this.mapDefaultValue(column),
33
+ enumValues: null,
34
+ };
35
+ });
36
+ }
37
+ mapDefaultValue(column) {
38
+ if (column.dflt_value === null || column.dflt_value?.toUpperCase() === 'NULL') {
39
+ return {
40
+ defaultValue: null,
41
+ isLiteralDefaultValue: false,
42
+ };
43
+ }
44
+ if (column.dflt_value?.startsWith("'") && column.dflt_value?.endsWith("'")) {
45
+ return {
46
+ defaultValue: column.dflt_value.slice(1, -1).replace(/''/g, "'"),
47
+ isLiteralDefaultValue: false,
48
+ };
49
+ }
50
+ if (!Number.isNaN(Number(column.dflt_value))) {
51
+ return {
52
+ defaultValue: column.dflt_value,
53
+ isLiteralDefaultValue: false,
54
+ };
55
+ }
56
+ return {
57
+ defaultValue: column.dflt_value,
58
+ isLiteralDefaultValue: true,
59
+ };
60
+ }
61
+ }
62
+ exports.default = SQLiteDialect;
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlLWRpYWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9kaWFsZWN0cy9zcWxpdGUtZGlhbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUFrRDtBQWNsRCxNQUFxQixhQUFhO0lBQ2hDLFdBQVcsQ0FDVCxVQUFzQyxFQUN0QyxTQUFvQjtRQUVwQixJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU07WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUMvQixlQUF5QyxFQUN6QyxTQUFvQjtRQUVwQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzdDLFNBQVMsQ0FBQyxLQUFLLENBQVcsK0JBQStCLEVBQUU7Z0JBQ3pELElBQUksRUFBRSxzQkFBVSxDQUFDLE1BQU07Z0JBQ3ZCLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFO2FBQ3ZELENBQUM7WUFDRixTQUFTLENBQUMsS0FBSyxDQUFVLHlEQUF5RCxFQUFFO2dCQUNsRixJQUFJLEVBQUUsc0JBQVUsQ0FBQyxNQUFNO2dCQUN2QixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRTthQUN2RCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFdEMsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVU7Z0JBQ3pDLFVBQVU7Z0JBQ1YseURBQXlEO2dCQUN6RCx3Q0FBd0M7Z0JBQ3hDLGFBQWEsRUFBRSxVQUFVLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQzFELE9BQU8sRUFBRSxJQUFJO2dCQUNiLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBZ0I7UUFJdEMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRTtZQUM3RSxPQUFPO2dCQUNMLFlBQVksRUFBRSxJQUFJO2dCQUNsQixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSDtRQUVELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUUsT0FBTztnQkFDTCxZQUFZLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7Z0JBQ2hFLHFCQUFxQixFQUFFLEtBQUs7YUFDN0IsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1lBQzVDLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUMvQixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSDtRQUVELE9BQU87WUFDTCxZQUFZLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDL0IscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBekVELGdDQXlFQyJ9
@@ -1,13 +1,8 @@
1
- import { Dialect } from 'sequelize';
1
+ import { ColumnDescription } from '../dialects/dialect.interface';
2
2
  import { ColumnType } from '../types';
3
3
  export default class DefaultValueParser {
4
- private readonly dialect;
5
- constructor(dialect: Dialect);
6
- parse(expression: any, columnType: ColumnType): unknown;
7
- isLiteral(expression: any, columnType: ColumnType): boolean;
8
- private parseGeneric;
9
- private sanitizeExpression;
10
- private literalUnlessMatch;
11
- private parseNumber;
4
+ static parse(column: Pick<ColumnDescription, 'defaultValue' | 'isLiteralDefaultValue' | 'enumValues'>, columnType: ColumnType): unknown;
5
+ private static parseGeneric;
6
+ private static parseNumber;
12
7
  }
13
8
  //# sourceMappingURL=default-value-parser.d.ts.map
@@ -2,81 +2,48 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const sequelize_1 = require("sequelize");
4
4
  class DefaultValueParser {
5
- constructor(dialect) {
6
- this.dialect = dialect;
7
- }
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
- parse(expression, columnType) {
10
- if (expression === null || expression === undefined)
5
+ static parse(column, columnType) {
6
+ if (column.defaultValue === null || column.defaultValue === undefined)
11
7
  return undefined;
12
- if (typeof expression === 'string' && expression.startsWith('NULL'))
13
- return null;
14
- // FA backend not handle correctly
15
8
  if (columnType.type === 'array')
16
9
  return undefined;
10
+ if (column.isLiteralDefaultValue)
11
+ return (0, sequelize_1.literal)(column.defaultValue);
17
12
  try {
18
- const result = this.parseGeneric(expression, columnType);
19
- return result !== undefined ? result : (0, sequelize_1.literal)(expression);
13
+ const result = this.parseGeneric(column, columnType);
14
+ return result !== undefined ? result : (0, sequelize_1.literal)(column.defaultValue);
20
15
  }
21
16
  catch (e) {
22
- return (0, sequelize_1.literal)(expression);
17
+ return (0, sequelize_1.literal)(column.defaultValue);
23
18
  }
24
19
  }
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- isLiteral(expression, columnType) {
27
- return this.parse(expression, columnType)?.constructor.name === 'Literal';
28
- }
29
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
- parseGeneric(expression, columnType) {
31
- let sanitizedExpression = expression;
32
- // sanitize string
33
- if (typeof expression === 'string') {
34
- sanitizedExpression = this.sanitizeExpression(expression);
35
- }
20
+ static parseGeneric(column, columnType) {
36
21
  if (columnType.type === 'enum') {
37
- return sanitizedExpression;
22
+ return column.defaultValue;
38
23
  }
39
24
  switch (columnType.subType) {
40
25
  case 'BOOLEAN':
41
- return [true, 'true', 'TRUE', "b'1'", '1'].includes(sanitizedExpression);
26
+ return [true, 'true', 'TRUE', "b'1'", '1'].includes(column.defaultValue);
42
27
  case 'NUMBER':
43
28
  case 'BIGINT':
44
29
  case 'FLOAT':
45
30
  case 'DOUBLE':
46
- return this.parseNumber(sanitizedExpression);
31
+ return this.parseNumber(column.defaultValue);
47
32
  case 'DATE':
48
33
  case 'DATEONLY':
49
- return this.literalUnlessMatch(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})|(\d{4}-\d{2}-\d{2})|(\d{2}:\d{2}:\d{2})$/, sanitizedExpression);
50
34
  case 'STRING':
51
- return sanitizedExpression;
35
+ return column.defaultValue;
52
36
  case 'JSON':
53
37
  case 'JSONB':
54
- return JSON.parse(sanitizedExpression);
38
+ return JSON.parse(column.defaultValue);
55
39
  default:
56
40
  return undefined;
57
41
  }
58
42
  }
59
- sanitizeExpression(expression) {
60
- let sanitizedExpression = expression;
61
- if (/^'.*'$/.test(sanitizedExpression)) {
62
- sanitizedExpression = expression.substring(1, expression.length - 1);
63
- }
64
- if (this.dialect === 'mssql') {
65
- // Sequelize send default values with weird char at the beginning (`(Ndefault value`)
66
- sanitizedExpression = sanitizedExpression.replace(/\(N/, '');
67
- while (/^\(.*\)$/.test(sanitizedExpression)) {
68
- sanitizedExpression = sanitizedExpression.substring(1, sanitizedExpression.length - 1);
69
- }
70
- }
71
- return sanitizedExpression;
72
- }
73
- literalUnlessMatch(regexp, expression) {
74
- return regexp.test(expression) ? expression : (0, sequelize_1.literal)(expression);
75
- }
76
- parseNumber(expression) {
43
+ static parseNumber(expression) {
77
44
  const result = Number.parseFloat(expression);
78
45
  return Number.isNaN(result) ? (0, sequelize_1.literal)(expression) : result;
79
46
  }
80
47
  }
81
48
  exports.default = DefaultValueParser;
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC12YWx1ZS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9oZWxwZXJzL2RlZmF1bHQtdmFsdWUtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQTZDO0FBSTdDLE1BQXFCLGtCQUFrQjtJQUdyQyxZQUFZLE9BQWdCO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsS0FBSyxDQUFDLFVBQWUsRUFBRSxVQUFzQjtRQUMzQyxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV0RSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWpGLGtDQUFrQztRQUNsQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWxELElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUV6RCxPQUFPLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxtQkFBTyxFQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUEsbUJBQU8sRUFBQyxVQUFVLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsU0FBUyxDQUFDLFVBQWUsRUFBRSxVQUFzQjtRQUMvQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFD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
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC12YWx1ZS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50cm9zcGVjdGlvbi9oZWxwZXJzL2RlZmF1bHQtdmFsdWUtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBS3BDLE1BQXFCLGtCQUFrQjtJQUNyQyxNQUFNLENBQUMsS0FBSyxDQUNWLE1BQXdGLEVBQ3hGLFVBQXNCO1FBRXRCLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFeEYsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU87WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVsRCxJQUFJLE1BQU0sQ0FBQyxxQkFBcUI7WUFBRSxPQUFPLElBQUEsbUJBQU8sRUFBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEUsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXJELE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JFO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUEsbUJBQU8sRUFBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLFlBQVksQ0FDekIsTUFBd0YsRUFDeEYsVUFBc0I7UUFFdEIsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUM7U0FDNUI7UUFFRCxRQUFRLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDMUIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUzRSxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUvQyxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFFN0IsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV6QztnQkFDRSxPQUFPLFNBQVMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0MsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUF6REQscUNBeURDIn0=
@@ -1,11 +1,12 @@
1
1
  import { Sequelize } from 'sequelize';
2
- import { SequelizeColumn, SequelizeTableIdentifier } from '../type-overrides';
2
+ import { ColumnDescription } from '../dialects/dialect.interface';
3
+ import { SequelizeTableIdentifier } from '../type-overrides';
3
4
  import { ColumnType } from '../types';
4
5
  export default class SqlTypeConverter {
5
6
  private static readonly enumRegex;
6
7
  private readonly sequelize;
7
8
  constructor(sequelize: Sequelize);
8
- convert(tableIdentifier: SequelizeTableIdentifier, columnName: string, columnInfo: SequelizeColumn): Promise<ColumnType>;
9
+ convert(tableIdentifier: SequelizeTableIdentifier, columnName: string, columnInfo: ColumnDescription): Promise<ColumnType>;
9
10
  /** Get the type of an enum from sequelize column description */
10
11
  private getEnumType;
11
12
  /**
@@ -18,16 +18,10 @@ class SqlTypeConverter {
18
18
  }
19
19
  /** Get the type of an enum from sequelize column description */
20
20
  getEnumType(columnInfo) {
21
- if (columnInfo.type === 'USER-DEFINED') {
22
- // Postgres enum
23
- return columnInfo?.special?.length > 0
24
- ? { type: 'enum', values: columnInfo.special }
25
- : // User-defined enum with no values will default to string
26
- { type: 'scalar', subType: 'STRING' };
27
- }
28
- // Other SGDB
29
- const enumOptions = SqlTypeConverter.enumRegex.exec(columnInfo.type)?.[1];
30
- return { type: 'enum', values: enumOptions.replace(/'/g, '').split(',') };
21
+ return columnInfo.enumValues?.length > 0
22
+ ? { type: 'enum', values: columnInfo.enumValues }
23
+ : // User-defined enum with no values will default to string
24
+ { type: 'scalar', subType: 'STRING' };
31
25
  }
32
26
  /**
33
27
  * Get the type of an array from sequelize column description
@@ -155,4 +149,4 @@ class SqlTypeConverter {
155
149
  }
156
150
  exports.default = SqlTypeConverter;
157
151
  SqlTypeConverter.enumRegex = /ENUM\((.*)\)/i;
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXR5cGUtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaGVscGVycy9zcWwtdHlwZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBa0Q7QUFLbEQsTUFBcUIsZ0JBQWdCO0lBSW5DLFlBQVksU0FBb0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsZUFBeUMsRUFDekMsVUFBa0IsRUFDbEIsVUFBMkI7UUFFM0IsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXhELEtBQUssY0FBYyxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztnQkFDOUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXRDO2dCQUNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVELGdFQUFnRTtJQUN4RCxXQUFXLENBQUMsVUFBMkI7UUFDN0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRTtZQUN0QyxnQkFBZ0I7WUFDaEIsT0FBTyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDO2dCQUNwQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUM5QyxDQUFDLENBQUMsMERBQTBEO29C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
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXR5cGUtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaGVscGVycy9zcWwtdHlwZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBa0Q7QUFNbEQsTUFBcUIsZ0JBQWdCO0lBSW5DLFlBQVksU0FBb0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsZUFBeUMsRUFDekMsVUFBa0IsRUFDbEIsVUFBNkI7UUFFN0IsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXhELEtBQUssY0FBYyxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztnQkFDOUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXRDO2dCQUNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVELGdFQUFnRTtJQUN4RCxXQUFXLENBQUMsVUFBNkI7UUFDL0MsT0FBTyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDakQsQ0FBQyxDQUFDLDBEQUEwRDtnQkFDMUQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztJ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
@@ -7,6 +7,7 @@ export default class Introspector {
7
7
  private static getTableNames;
8
8
  private static getDefaultSchema;
9
9
  private static getTableIdentifier;
10
+ private static getTables;
10
11
  /** Instrospect a single table */
11
12
  private static getTable;
12
13
  private static getColumn;
@@ -15,7 +16,6 @@ export default class Introspector {
15
16
  * (happens when we skip entities because of errors)
16
17
  */
17
18
  private static sanitizeInPlace;
18
- private static detectBrokenRelationship;
19
19
  private static logBrokenRelationship;
20
20
  }
21
21
  //# sourceMappingURL=introspector.d.ts.map
@@ -3,22 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const sequelize_1 = require("sequelize");
6
+ const dialect_factory_1 = __importDefault(require("./dialects/dialect-factory"));
7
7
  const default_value_parser_1 = __importDefault(require("./helpers/default-value-parser"));
8
8
  const sql_type_converter_1 = __importDefault(require("./helpers/sql-type-converter"));
9
9
  class Introspector {
10
10
  static async introspect(sequelize, logger) {
11
- const tableNamesAndSchemas = await this.getTableNames(sequelize);
12
- const validTableNames = tableNamesAndSchemas.filter(name => sequelize.getDialect() !== 'mssql' || !name.tableName.includes('.'));
13
- if (validTableNames.length < tableNamesAndSchemas.length) {
14
- const diff = tableNamesAndSchemas.filter(name => !validTableNames.includes(name));
15
- logger?.('Warn', `Skipping table(s): ${diff
16
- .map(tableNameAndSchema => `'${tableNameAndSchema.tableName}'`)
17
- .join(', ')}. MSSQL tables with dots are not supported`);
18
- }
19
- const promises = validTableNames.map(name => this.getTable(sequelize, logger, name));
20
- const tables = await Promise.all(promises);
21
- this.sanitizeInPlace(tables);
11
+ const tableNames = await this.getTableNames(sequelize);
12
+ const tables = await this.getTables(tableNames, sequelize, logger);
13
+ this.sanitizeInPlace(tables, logger);
22
14
  return tables;
23
15
  }
24
16
  /** Get names of all tables in the public schema of the db */
@@ -66,27 +58,46 @@ class Introspector {
66
58
  return { tableName: tableIdentifier.tableName };
67
59
  }
68
60
  }
61
+ static async getTables(tableNames, sequelize, logger) {
62
+ const dialect = (0, dialect_factory_1.default)(sequelize.getDialect());
63
+ const tablesColumns = await dialect.listColumns(tableNames, sequelize);
64
+ return Promise.all(tableNames.map((tableIdentifier, index) => {
65
+ const columnDescriptions = tablesColumns[index];
66
+ return this.getTable(sequelize, tableIdentifier, columnDescriptions, logger);
67
+ }));
68
+ }
69
69
  /** Instrospect a single table */
70
- static async getTable(sequelize, logger, tableIdentifier) {
70
+ static async getTable(sequelize, tableIdentifier, columnDescriptions, logger) {
71
71
  const queryInterface = sequelize.getQueryInterface();
72
72
  // Sequelize is not consistent in the way it handles table identifiers either when it returns
73
73
  // it, when it uses it internally, or when it is passed as an argument.
74
74
  // Plus it has some bugs with schema handling in postgresql that forces us to be sure that
75
75
  // the table identifier is correct on our side
76
76
  const tableIdentifierForQuery = Introspector.getTableIdentifier(tableIdentifier, sequelize);
77
- const [columnDescriptions, tableIndexes, tableReferences] = await Promise.all([
78
- queryInterface.describeTable(tableIdentifierForQuery),
77
+ const [tableIndexes, tableReferences] = await Promise.all([
79
78
  queryInterface.showIndex(tableIdentifierForQuery),
80
79
  queryInterface.getForeignKeyReferencesForTable(tableIdentifierForQuery),
81
80
  ]);
82
- await this.detectBrokenRelationship(tableIdentifierForQuery, sequelize, tableReferences, logger);
83
- const columns = await Promise.all(Object.entries(columnDescriptions).map(async ([name, description]) => {
84
- const references = tableReferences.filter(
85
- // There is a bug right now with sequelize on postgresql: returned association
86
- // are not filtered on the schema. So we have to filter them manually.
87
- // Should be fixed with Sequelize v7
88
- r => r.columnName === name && r.tableSchema === tableIdentifier.schema);
89
- const options = { name, description, references };
81
+ const references = tableReferences
82
+ .map(tableReference => ({
83
+ ...tableReference,
84
+ tableName: typeof tableReference.tableName === 'string'
85
+ ? tableReference.tableName
86
+ : // On SQLite, the query interface returns an object with a tableName property
87
+ tableReference.tableName.tableName,
88
+ }))
89
+ .filter(
90
+ // There is a bug right now with sequelize on postgresql: returned association
91
+ // are not filtered on the schema. So we have to filter them manually.
92
+ // Should be fixed with Sequelize v7
93
+ r => r.tableName === tableIdentifier.tableName && r.tableSchema === tableIdentifier.schema);
94
+ const columns = await Promise.all(columnDescriptions.map(async (columnDescription) => {
95
+ const columnReferences = references.filter(r => r.columnName === columnDescription.name);
96
+ const options = {
97
+ name: columnDescription.name,
98
+ description: columnDescription,
99
+ references: columnReferences,
100
+ };
90
101
  return this.getColumn(sequelize, logger, tableIdentifier, options);
91
102
  }));
92
103
  return {
@@ -100,20 +111,16 @@ class Introspector {
100
111
  }
101
112
  static async getColumn(sequelize, logger, tableIdentifier, options) {
102
113
  const { name, description, references } = options;
103
- const dialect = sequelize.getDialect();
104
114
  const typeConverter = new sql_type_converter_1.default(sequelize);
105
115
  try {
106
116
  const type = await typeConverter.convert(tableIdentifier, name, description);
107
- const parser = new default_value_parser_1.default(dialect);
108
- // Workaround autoincrement flag not being properly set when using postgres
109
- const autoIncrement = Boolean(description.autoIncrement || description.defaultValue?.match?.(/^nextval\(.+\)$/));
110
117
  return {
111
118
  type,
112
- autoIncrement,
113
- defaultValue: autoIncrement ? null : parser.parse(description.defaultValue, type),
114
- isLiteralDefaultValue: autoIncrement
115
- ? false
116
- : parser.isLiteral(description.defaultValue, type),
119
+ autoIncrement: description.autoIncrement,
120
+ defaultValue: description.autoIncrement
121
+ ? null
122
+ : default_value_parser_1.default.parse(description, type),
123
+ isLiteralDefaultValue: description.isLiteralDefaultValue,
117
124
  name,
118
125
  allowNull: description.allowNull,
119
126
  primaryKey: description.primaryKey,
@@ -131,64 +138,30 @@ class Introspector {
131
138
  * Remove references to entities that are not present in the schema
132
139
  * (happens when we skip entities because of errors)
133
140
  */
134
- static sanitizeInPlace(tables) {
141
+ static sanitizeInPlace(tables, logger) {
135
142
  for (const table of tables) {
136
143
  // Remove unique indexes which depennd on columns that are not present in the table.
137
144
  table.unique = table.unique.filter(unique => unique.every(column => table.columns.find(c => c.name === column)));
138
145
  for (const column of table.columns) {
146
+ const references = column.constraints || [];
139
147
  // Remove references to tables that are not present in the schema.
140
- column.constraints = column.constraints.filter(constraint => {
148
+ column.constraints = references.filter(constraint => {
141
149
  const refTable = tables.find(t => t.name === constraint.table);
142
150
  const refColumn = refTable?.columns.find(c => c.name === constraint.column);
143
151
  return refTable && refColumn;
144
152
  });
153
+ this.logBrokenRelationship(references, column.constraints, table.name, logger);
145
154
  }
146
155
  }
147
156
  }
148
- static async detectBrokenRelationship(tableIdentifier, sequelize, tableReferences, logger) {
149
- let constraintNamesForForeignKey = [];
150
- const dialect = sequelize.getDialect();
151
- if (dialect === 'sqlite') {
152
- constraintNamesForForeignKey = await sequelize.query(`SELECT "from" as constraint_name, :tableName as table_name
153
- from pragma_foreign_key_list(:tableName);`, {
154
- replacements: { tableName: tableIdentifier.tableName },
155
- type: sequelize_1.QueryTypes.SELECT,
156
- });
157
- }
158
- else {
159
- constraintNamesForForeignKey = await sequelize.query(`
160
- SELECT constraint_name, table_name
161
- FROM information_schema.table_constraints
162
- WHERE table_name = :tableName
163
- AND constraint_type = 'FOREIGN KEY'
164
- AND (:schema IS NULL OR table_schema = :schema);
165
- `, {
166
- replacements: {
167
- tableName: tableIdentifier.tableName,
168
- schema: tableIdentifier.schema || null,
169
- },
170
- type: sequelize_1.QueryTypes.SELECT,
171
- });
172
- }
173
- this.logBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger);
174
- }
175
- static logBrokenRelationship(constraintNamesForForeignKey, tableReferences, logger) {
176
- if (constraintNamesForForeignKey.length !== tableReferences.length) {
177
- const constraintNames = new Set(constraintNamesForForeignKey.map(c => ({ constraint_name: c.constraint_name, table_name: c.table_name })));
178
- tableReferences.forEach(({ constraintName }) => {
179
- constraintNames.forEach(obj => {
180
- if (obj.constraint_name === constraintName) {
181
- constraintNames.delete(obj);
182
- }
183
- });
184
- });
185
- constraintNames.forEach(obj => {
186
- logger?.('Error',
187
- // eslint-disable-next-line max-len
188
- `Failed to load constraints on relation '${obj.constraint_name}' on table '${obj.table_name}'. The relation will be ignored.`);
189
- });
190
- }
157
+ static logBrokenRelationship(allConstraints, sanitizedConstraints, tableName, logger) {
158
+ const missingConstraints = allConstraints.filter(constraint => !sanitizedConstraints.includes(constraint));
159
+ missingConstraints.forEach(constraint => {
160
+ logger?.('Error',
161
+ // eslint-disable-next-line max-len
162
+ `Failed to load constraints on relation on table '${tableName}' referencing '${constraint.table}.${constraint.column}'. The relation will be ignored.`);
163
+ });
191
164
  }
192
165
  }
193
166
  exports.default = Introspector;
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaW50cm9zcGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUNBQTJEO0FBRTNELDBGQUFnRTtBQUNoRSxzRkFBNEQ7QUFVNUQsTUFBcUIsWUFBWTtJQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFvQixFQUFFLE1BQWU7UUFDM0QsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBaUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQzVFLENBQUM7UUFFRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFO1lBQ3hELE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sRUFBRSxDQUNOLE1BQU0sRUFDTixzQkFBc0IsSUFBSTtpQkFDdkIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxDQUFDO2lCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUMxRCxDQUFDO1NBQ0g7UUFFRCxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDZEQUE2RDtJQUNyRCxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDaEMsU0FBK0I7UUFFL0IsTUFBTSxnQkFBZ0IsR0FBdUMsTUFBTSxTQUFTO2FBQ3pFLGlCQUFpQixFQUFFO2FBQ25CLGFBQWEsRUFBRSxDQUFDO1FBRW5CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRiw0Q0FBNEM7UUFDNUMsOERBQThEO1FBQzlELDJGQUEyRjtRQUMzRixPQUFPLENBQ0wsZ0JBQWdCO2FBQ2IsR0FBRyxDQUFDLENBQUMsZUFBa0QsRUFBRSxFQUFFLENBQzFELE9BQU8sZUFBZSxLQUFLLFFBQVE7WUFDakMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO1lBQ3pELENBQUMsQ0FBQztnQkFDRSxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sSUFBSSxlQUFlO2dCQUNqRCxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7YUFDckMsQ0FDTjtZQUNELG1EQUFtRDthQUNsRCxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUErQjtRQUM3RCxRQUFRLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM5QixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YscUVBQXFFO1lBQ3JFLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxPQUFPO2dCQUNWLE9BQU8sU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JDO2dCQUNFLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDL0IsZUFBeUMsRUFDekMsU0FBb0I7UUFFcEIsUUFBUSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDOUIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxlQUFlLENBQUM7WUFDekIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE9BQU8sQ0FBQztZQUNiO2dCQUNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVELGlDQUFpQztJQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDM0IsU0FBb0IsRUFDcEIsTUFBYyxFQUNkLGVBQXlDO1FBRXpDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBdUIsQ0FBQztRQUMxRSw2RkFBNkY7UUFDN0YsdUVBQXVFO1FBQ3ZFLDBGQUEwRjtRQUMxRiw4Q0FBOEM7UUFDOUMsTUFBTSx1QkFBdUIsR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTVGLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzVFLGNBQWMsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUM7WUFDckQsY0FBYyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztZQUNqRCxjQUFjLENBQUMsK0JBQStCLENBQUMsdUJBQXVCLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQ2pDLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sQ0FDUCxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ25FLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNO1lBQ3ZDLDhFQUE4RTtZQUM5RSxzRUFBc0U7WUFDdEUsb0NBQW9DO1lBQ3BDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsTUFBTSxDQUN2RSxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBRWxELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsT0FBTztZQUNMLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxTQUFTO1lBQ3ZDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNoQyxNQUFNLEVBQUUsWUFBWTtpQkFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO2lCQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUM1QixTQUFvQixFQUNwQixNQUFjLEVBQ2QsZUFBeUMsRUFDekMsT0FJQztRQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFhLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBSSw0QkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxJQUFJO1lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDN0UsTUFBTSxNQUFNLEdBQUcsSUFBSSw4QkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUvQywyRUFBMkU7WUFDM0UsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUMzQixXQUFXLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FDbEYsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixhQUFhO2dCQUNiLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztnQkFDakYscUJBQXFCLEVBQUUsYUFBYTtvQkFDbEMsQ0FBQyxDQUFDLEtBQUs7b0JBQ1AsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7Z0JBQ3BELElBQUk7Z0JBQ0osU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO2dCQUNoQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7Z0JBQ2xDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDaEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxtQkFBbUI7b0JBQzVCLE1BQU0sRUFBRSxDQUFDLENBQUMsb0JBQW9CO2lCQUMvQixDQUFDLENBQUM7YUFDSixDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsZUFBZSxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDekY7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFlO1FBQzVDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQzFCLG9GQUFvRjtZQUNwRixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FDbkUsQ0FBQztZQUVGLEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDbEMsa0VBQWtFO2dCQUNsRSxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9ELE1BQU0sU0FBUyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTVFLE9BQU8sUUFBUSxJQUFJLFNBQVMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQzNDLGVBQXlDLEVBQ3pDLFNBQW9CLEVBQ3BCLGVBQXFDLEVBQ3JDLE1BQWM7UUFFZCxJQUFJLDRCQUE0QixHQUEyRCxFQUFFLENBQUM7UUFDOUYsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBYSxDQUFDO1FBRWxELElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN4Qiw0QkFBNEIsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBSWxEO2tEQUMwQyxFQUMxQztnQkFDRSxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRTtnQkFDdEQsSUFBSSxFQUFFLHNCQUFVLENBQUMsTUFBTTthQUN4QixDQUNGLENBQUM7U0FDSDthQUFNO1lBQ0wsNEJBQTRCLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUlsRDs7Ozs7O1NBTUMsRUFDRDtnQkFDRSxZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFLGVBQWUsQ0FBQyxTQUFTO29CQUNwQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sSUFBSSxJQUFJO2lCQUN2QztnQkFDRCxJQUFJLEVBQUUsc0JBQVUsQ0FBQyxNQUFNO2FBQ3hCLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUNsQyw0QkFBdUMsRUFDdkMsZUFBcUMsRUFDckMsTUFBYztRQUVkLElBQUksNEJBQTRCLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQzVCLDRCQUFrRixDQUFDLEdBQUcsQ0FDckYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUN4RSxDQUNGLENBQUM7WUFDRixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFO2dCQUM3QyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM1QixJQUFJLEdBQUcsQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO3dCQUMxQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUM3QjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxFQUFFLENBQ04sT0FBTztnQkFDUCxtQ0FBbUM7Z0JBQ25DLDJDQUEyQyxHQUFHLENBQUMsZUFBZSxlQUFlLEdBQUcsQ0FBQyxVQUFVLGtDQUFrQyxDQUM5SCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7Q0FDRjtBQWxSRCwrQkFrUkMifQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludHJvc3BlY3Rpb24vaW50cm9zcGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsaUZBQXFFO0FBRXJFLDBGQUFnRTtBQUNoRSxzRkFBNEQ7QUFTNUQsTUFBcUIsWUFBWTtJQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFvQixFQUFFLE1BQWU7UUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQWlDLENBQUMsQ0FBQztRQUMvRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVyQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsNkRBQTZEO0lBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUNoQyxTQUErQjtRQUUvQixNQUFNLGdCQUFnQixHQUF1QyxNQUFNLFNBQVM7YUFDekUsaUJBQWlCLEVBQUU7YUFDbkIsYUFBYSxFQUFFLENBQUM7UUFFbkIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJGLDRDQUE0QztRQUM1Qyw4REFBOEQ7UUFDOUQsMkZBQTJGO1FBQzNGLE9BQU8sQ0FDTCxnQkFBZ0I7YUFDYixHQUFHLENBQUMsQ0FBQyxlQUFrRCxFQUFFLEVBQUUsQ0FDMUQsT0FBTyxlQUFlLEtBQUssUUFBUTtZQUNqQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7WUFDekQsQ0FBQyxDQUFDO2dCQUNFLE1BQU0sRUFB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
@@ -21,7 +21,7 @@ export type SequelizeReference = {
21
21
  constraintName: string;
22
22
  constraintSchema: string;
23
23
  constraintCatalog: string;
24
- tableName: string;
24
+ tableName: string | SequelizeTableIdentifier;
25
25
  tableSchema: string;
26
26
  tableCatalog: string;
27
27
  columnName: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/datasource-sql",
3
- "version": "1.7.41",
3
+ "version": "1.7.42",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {