db-modeling-markdown 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -164
- package/dist/dialects/core/dbImportProvider.d.ts +5 -5
- package/dist/dialects/core/dbImportProvider.js +6 -6
- package/dist/dialects/core/dbProvider.d.ts +34 -34
- package/dist/dialects/core/dbProvider.js +119 -119
- package/dist/dialects/core/dbProvider.js.map +1 -1
- package/dist/dialects/core/dbUtils.d.ts +35 -35
- package/dist/dialects/core/dbUtils.js +157 -158
- package/dist/dialects/core/dbUtils.js.map +1 -1
- package/dist/dialects/core/providerFactory.d.ts +7 -7
- package/dist/dialects/core/providerFactory.js +63 -63
- package/dist/dialects/core/providerFactory.js.map +1 -1
- package/dist/dialects/db2/db2Provider.d.ts +19 -19
- package/dist/dialects/db2/db2Provider.js +185 -186
- package/dist/dialects/db2/db2Provider.js.map +1 -1
- package/dist/dialects/mariadb/mariaDbImportProvider.d.ts +19 -19
- package/dist/dialects/mariadb/mariaDbImportProvider.js +260 -260
- package/dist/dialects/mariadb/mariaDbImportProvider.js.map +1 -1
- package/dist/dialects/mariadb/mariaDbProvider.d.ts +18 -18
- package/dist/dialects/mariadb/mariaDbProvider.js +152 -153
- package/dist/dialects/mariadb/mariaDbProvider.js.map +1 -1
- package/dist/dialects/mariadb/mariaDbUtil.d.ts +6 -6
- package/dist/dialects/mariadb/mariaDbUtil.js +22 -22
- package/dist/dialects/mariadb/mariaDbUtil.js.map +1 -1
- package/dist/dialects/mssql/msSqlProvider.d.ts +21 -21
- package/dist/dialects/mssql/msSqlProvider.js +264 -265
- package/dist/dialects/mssql/msSqlProvider.js.map +1 -1
- package/dist/dialects/mysql/mySqlImportProvider.d.ts +3 -3
- package/dist/dialects/mysql/mySqlImportProvider.js +7 -7
- package/dist/dialects/mysql/mySqlProvider.d.ts +3 -3
- package/dist/dialects/mysql/mySqlProvider.js +7 -7
- package/dist/dialects/oracle/oracleProvider.d.ts +35 -35
- package/dist/dialects/oracle/oracleProvider.js +327 -327
- package/dist/dialects/oracle/oracleProvider.js.map +1 -1
- package/dist/dialects/postgresql/postgreSqlProvider.d.ts +19 -19
- package/dist/dialects/postgresql/postgreSqlProvider.js +172 -173
- package/dist/dialects/postgresql/postgreSqlProvider.js.map +1 -1
- package/dist/dialects/sqlite/sqliteSqlProvider.d.ts +23 -23
- package/dist/dialects/sqlite/sqliteSqlProvider.js +147 -148
- package/dist/dialects/sqlite/sqliteSqlProvider.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +9 -9
- package/dist/lib/code-flow/codeFlow.d.ts +37 -37
- package/dist/lib/code-flow/codeFlow.js +61 -61
- package/dist/lib/markdown-object/markdownModel.d.ts +14 -14
- package/dist/lib/markdown-object/markdownModel.js +12 -12
- package/dist/lib/markdown-object/markdownModel.js.map +1 -1
- package/dist/lib/markdown-object/markdownReader.d.ts +39 -39
- package/dist/lib/markdown-object/markdownReader.js +261 -261
- package/dist/lib/markdown-object/markdownReader.js.map +1 -1
- package/dist/lib/markdown-object/markdownWriter.d.ts +36 -36
- package/dist/lib/markdown-object/markdownWriter.js +224 -224
- package/dist/lib/markdown-object/markdownWriter.js.map +1 -1
- package/dist/lib/markdown-object/readerContext.d.ts +12 -12
- package/dist/lib/markdown-object/readerContext.js +48 -48
- package/dist/lib/markdown-object/readerContext.js.map +1 -1
- package/dist/lib/utils/fileHelper.d.ts +14 -15
- package/dist/lib/utils/fileHelper.js +58 -57
- package/dist/lib/utils/fileHelper.js.map +1 -1
- package/dist/lib/utils/logger.d.ts +9 -9
- package/dist/lib/utils/logger.js +60 -60
- package/dist/lib/utils/logger.js.map +1 -1
- package/dist/lib/utils/markdownParser.d.ts +22 -22
- package/dist/lib/utils/markdownParser.js +99 -95
- package/dist/lib/utils/markdownParser.js.map +1 -1
- package/dist/lib/utils/sqlHelper.d.ts +3 -3
- package/dist/lib/utils/sqlHelper.js +23 -23
- package/dist/lib/utils/sqlHelper.js.map +1 -1
- package/dist/lib/utils/systemHelper.d.ts +2 -2
- package/dist/lib/utils/systemHelper.js +6 -6
- package/dist/lib/utils/textFileReader.d.ts +25 -25
- package/dist/lib/utils/textFileReader.js +57 -57
- package/dist/lib/utils/textFileReader.js.map +1 -1
- package/dist/lib/utils/textHelper.d.ts +21 -21
- package/dist/lib/utils/textHelper.js +75 -71
- package/dist/lib/utils/textHelper.js.map +1 -1
- package/dist/models/databaseTypes.d.ts +33 -33
- package/dist/models/databaseTypes.js +37 -37
- package/dist/models/databaseTypes.js.map +1 -1
- package/dist/models/dbColumn.d.ts +43 -43
- package/dist/models/dbColumn.js +2 -2
- package/dist/models/dbDiffModel.d.ts +43 -43
- package/dist/models/dbDiffModel.js +2 -2
- package/dist/models/dbForeignKey.d.ts +33 -33
- package/dist/models/dbForeignKey.js +2 -2
- package/dist/models/dbIndex.d.ts +28 -28
- package/dist/models/dbIndex.js +2 -2
- package/dist/models/dbIndexType.d.ts +8 -8
- package/dist/models/dbIndexType.js +12 -12
- package/dist/models/dbIndexType.js.map +1 -1
- package/dist/models/dbModel.d.ts +10 -10
- package/dist/models/dbModel.js +2 -2
- package/dist/models/dbPrimaryKey.d.ts +16 -16
- package/dist/models/dbPrimaryKey.js +2 -2
- package/dist/models/dbTable.d.ts +49 -49
- package/dist/models/dbTable.js +2 -2
- package/dist/models/dbTableMarkdown.d.ts +35 -35
- package/dist/models/dbTableMarkdown.js +2 -2
- package/dist/resources/mariadb/procAppUpgradeDB.sql +164 -164
- package/dist/resources/mariadb/sql-create-table-fk.njk +10 -10
- package/dist/resources/mariadb/sql-create-table.njk +11 -11
- package/dist/resources/mariadb/sql-create-tables.njk +8 -8
- package/dist/resources/mariadb/sql-upgrade-new-table.njk +14 -14
- package/dist/services/dbOptions.d.ts +35 -35
- package/dist/services/dbOptions.js +17 -17
- package/dist/services/dbmOptions.d.ts +28 -28
- package/dist/services/dbmOptions.js +34 -34
- package/dist/services/dbmService.d.ts +87 -87
- package/dist/services/dbmService.js +244 -244
- package/dist/services/dbmService.js.map +1 -1
- package/package.json +28 -34
- package/CHANGELOG.md +0 -81
- package/CONTRIBUTING.md +0 -85
|
@@ -1,328 +1,328 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable class-methods-use-this */
|
|
3
|
-
/* eslint-disable prefer-template */
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.OracleProvider = void 0;
|
|
6
|
-
const sqlHelper_1 = require("../../lib/utils/sqlHelper");
|
|
7
|
-
const dbProvider_1 = require("../core/dbProvider");
|
|
8
|
-
class OracleProvider extends dbProvider_1.DbProvider {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.SP_REMVOE_FK_NAME = 'tmp_dbm_drop_table_fk';
|
|
12
|
-
this.MAX_OBJECT_NAME_LENGTH = 30;
|
|
13
|
-
this.SQL_DELIMITER = '/';
|
|
14
|
-
this.p_colObjectNames = {};
|
|
15
|
-
}
|
|
16
|
-
getCreateTableIfNotExistsSql(model) {
|
|
17
|
-
this.p_colObjectNames = {};
|
|
18
|
-
this.outputInitialize();
|
|
19
|
-
this.outputlnln(this.getSqlCreateTableIfNotExistsSinglePre());
|
|
20
|
-
model.tables.forEach((table) => {
|
|
21
|
-
const { sqlCreateTable, sqlCreateFK } = this.getSqlCreateTableIfNotExistsSingle(table);
|
|
22
|
-
this.outputlnln(sqlCreateTable);
|
|
23
|
-
if (sqlCreateFK.length > 0) {
|
|
24
|
-
this.outputlnln(sqlCreateFK, 1);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
this.outputln(this.getSqlCreateTableIfNotExistsSinglePost());
|
|
28
|
-
return this.outputCopy();
|
|
29
|
-
}
|
|
30
|
-
getCreateTableSql(model, withComment) {
|
|
31
|
-
this.outputInitialize();
|
|
32
|
-
this.getCreateTableSqlInternal(model, withComment);
|
|
33
|
-
return this.outputCopy();
|
|
34
|
-
}
|
|
35
|
-
getCreateTableSqlInternal(model, withComment) {
|
|
36
|
-
this.p_colObjectNames = {};
|
|
37
|
-
// Create tables
|
|
38
|
-
model.tables.forEach((table) => {
|
|
39
|
-
const { sqlCreateTable, sqlCreateFK } = this.getSqlCreateTableSingle(table, withComment);
|
|
40
|
-
this.outputlnln(sqlCreateTable);
|
|
41
|
-
if (sqlCreateFK) {
|
|
42
|
-
this.outputlnln(sqlCreateFK, 1);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
getDropTableSql(model) {
|
|
47
|
-
let sSQL;
|
|
48
|
-
this.outputInitialize();
|
|
49
|
-
// Create the store procedure of dropping foreign key
|
|
50
|
-
sSQL = this.getSqlRemoveFKPre();
|
|
51
|
-
this.outputlnln(sSQL + dbProvider_1.line + this.SQL_DELIMITER);
|
|
52
|
-
// Drop foreign key relation
|
|
53
|
-
model.tables.forEach((table) => {
|
|
54
|
-
sSQL = this.getSqlRemoveFkSingle(table);
|
|
55
|
-
this.outputlnln(sSQL);
|
|
56
|
-
});
|
|
57
|
-
// Drop the store procedure of dropping foreign key
|
|
58
|
-
sSQL = this.getSqlRemoveFKPost();
|
|
59
|
-
this.outputlnln(sSQL);
|
|
60
|
-
// Drop tables
|
|
61
|
-
this.outputlnln(this.getSqlDropTableSinglePre());
|
|
62
|
-
model.tables.forEach((table) => {
|
|
63
|
-
sSQL = this.getSqlDropTableSingle(table);
|
|
64
|
-
this.outputlnln(sSQL);
|
|
65
|
-
});
|
|
66
|
-
this.outputlnln(this.getSqlDropTableSinglePost());
|
|
67
|
-
return this.outputCopy();
|
|
68
|
-
}
|
|
69
|
-
getDropThenCreateTableSql(model, withComment) {
|
|
70
|
-
let sSQL;
|
|
71
|
-
this.outputInitialize();
|
|
72
|
-
// Create the store procedure of dropping foreign key
|
|
73
|
-
sSQL = this.getSqlRemoveFKPre();
|
|
74
|
-
this.outputlnln(sSQL + dbProvider_1.line + this.SQL_DELIMITER);
|
|
75
|
-
// Drop foreign key relation
|
|
76
|
-
model.tables.forEach((table) => {
|
|
77
|
-
sSQL = this.getSqlRemoveFkSingle(table);
|
|
78
|
-
this.outputlnln(sSQL);
|
|
79
|
-
});
|
|
80
|
-
// Drop the store procedure of dropping foreign key
|
|
81
|
-
sSQL = this.getSqlRemoveFKPost();
|
|
82
|
-
this.outputlnln(sSQL);
|
|
83
|
-
// Drop tables
|
|
84
|
-
this.outputlnln(this.getSqlDropTableSinglePre());
|
|
85
|
-
model.tables.forEach((table) => {
|
|
86
|
-
sSQL = this.getSqlDropTableSingle(table);
|
|
87
|
-
this.outputlnln(sSQL);
|
|
88
|
-
});
|
|
89
|
-
this.outputlnln(this.getSqlDropTableSinglePost());
|
|
90
|
-
// Create tables
|
|
91
|
-
this.getCreateTableSqlInternal(model, withComment);
|
|
92
|
-
return this.outputCopy();
|
|
93
|
-
}
|
|
94
|
-
getSqlCreateTableIfNotExistsSingle(table) {
|
|
95
|
-
const result = this.getSqlCreateTableSingle(table, false);
|
|
96
|
-
const sSQL = ' SELECT COUNT(*) INTO v_table_is_exists' +
|
|
97
|
-
dbProvider_1.line +
|
|
98
|
-
' FROM user_tables' +
|
|
99
|
-
dbProvider_1.line +
|
|
100
|
-
` WHERE lower(table_name) = lower('${table.name}');` +
|
|
101
|
-
dbProvider_1.line +
|
|
102
|
-
' IF v_table_is_exists != 0 THEN' +
|
|
103
|
-
dbProvider_1.line +
|
|
104
|
-
` execute immediate ${result.sqlCreateTable}` +
|
|
105
|
-
dbProvider_1.line +
|
|
106
|
-
' END IF;';
|
|
107
|
-
result.sqlCreateTable = sSQL;
|
|
108
|
-
return result;
|
|
109
|
-
}
|
|
110
|
-
getSqlCreateTableIfNotExistsSinglePost() {
|
|
111
|
-
const sSQL = 'END;' + dbProvider_1.line + this.SQL_DELIMITER;
|
|
112
|
-
return sSQL;
|
|
113
|
-
}
|
|
114
|
-
getSqlCreateTableIfNotExistsSinglePre() {
|
|
115
|
-
const sSQL = 'DECLARE' + dbProvider_1.line + ' v_table_is_exists integer;' + dbProvider_1.line + 'BEGIN';
|
|
116
|
-
return sSQL;
|
|
117
|
-
}
|
|
118
|
-
getSqlCreateTableSingle(table, withComment) {
|
|
119
|
-
const result = {
|
|
120
|
-
sqlCreateFK: '',
|
|
121
|
-
sqlCreateTable: '',
|
|
122
|
-
};
|
|
123
|
-
if (!table.columns) {
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
// Create Columns sql
|
|
127
|
-
let sqlColumn = '';
|
|
128
|
-
table.columns.forEach((column, index) => {
|
|
129
|
-
const sqlComma = index === 0 ? ' ' : ',';
|
|
130
|
-
const sqlNullable = column.nullable ? 'NULL' : 'NOT NULL';
|
|
131
|
-
const sqlDefault = column.default.length === 0 ? '' : ` DEFAULT ${column.default}`;
|
|
132
|
-
sqlColumn += dbProvider_1.line + ` ${sqlComma}${column.name} ${column.type} ${sqlDefault}${sqlNullable}`;
|
|
133
|
-
});
|
|
134
|
-
// Primary key SQL
|
|
135
|
-
let sqlPrimaryKey = '';
|
|
136
|
-
if (table.primaryKey) {
|
|
137
|
-
const sqlPkName = this.renderPkName(table);
|
|
138
|
-
const sqlPkColumns = table.primaryKey.columns.replace(',\\s*', ', ');
|
|
139
|
-
sqlPrimaryKey =
|
|
140
|
-
dbProvider_1.line +
|
|
141
|
-
`ALTER TABLE ${table.name} ADD CONSTRAINT ${sqlPkName} PRIMARY KEY (${sqlPkColumns});`;
|
|
142
|
-
}
|
|
143
|
-
// unique Indexes SQL
|
|
144
|
-
let sqlUniqueIndex = '';
|
|
145
|
-
table.indexes?.forEach((index) => {
|
|
146
|
-
if (index.unique) {
|
|
147
|
-
const sqlIndexName = this.renderIndexName(table, index);
|
|
148
|
-
const sqlColumns = index.columns.replace(',\\s*', ', ');
|
|
149
|
-
sqlUniqueIndex +=
|
|
150
|
-
dbProvider_1.line + `ALTER TABLE ${table.name} ADD CONSTRAINT ${sqlIndexName} UNIQUE (${sqlColumns});`;
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
// non-unique Indexes SQL
|
|
154
|
-
let sqlNoUniqueIndex = '';
|
|
155
|
-
table.indexes?.forEach((index) => {
|
|
156
|
-
if (!index.unique) {
|
|
157
|
-
const sqlIndexName = this.renderIndexName(table, index);
|
|
158
|
-
const sqlColumns = index.columns.replace(',\\s*', ', ');
|
|
159
|
-
sqlNoUniqueIndex += dbProvider_1.line + `CREATE INDEX ${sqlIndexName} ON ${table.name} (${sqlColumns});`;
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
// Generate table sql
|
|
163
|
-
// Create table
|
|
164
|
-
result.sqlCreateTable =
|
|
165
|
-
''.padEnd(32, '-') +
|
|
166
|
-
dbProvider_1.line +
|
|
167
|
-
`-- Create table: '${table.name}'` +
|
|
168
|
-
dbProvider_1.line +
|
|
169
|
-
''.padEnd(32, '-') +
|
|
170
|
-
dbProvider_1.line +
|
|
171
|
-
`CREATE TABLE ${table.name} (` +
|
|
172
|
-
sqlColumn +
|
|
173
|
-
dbProvider_1.line +
|
|
174
|
-
');' +
|
|
175
|
-
sqlPrimaryKey +
|
|
176
|
-
sqlUniqueIndex +
|
|
177
|
-
sqlNoUniqueIndex;
|
|
178
|
-
// Generate Foreign key SQL
|
|
179
|
-
if (table.foreignKeys.length > 0) {
|
|
180
|
-
result.sqlCreateFK = `-- Create foreign keys for table: '${table.name}'`;
|
|
181
|
-
table.foreignKeys.forEach((foreignKey) => {
|
|
182
|
-
const sqlFkName = this.renderFkName(table, foreignKey);
|
|
183
|
-
const sqlColumns = foreignKey.columns.replace(',\\s*', ', ');
|
|
184
|
-
const sqlRefInfo = `${foreignKey.refTable}(${foreignKey.refColumns.replace(',\\s*', ', ')})`;
|
|
185
|
-
const sqlOptions = foreignKey.options.length > 0 ? foreignKey.options : '';
|
|
186
|
-
result.sqlCreateFK +=
|
|
187
|
-
dbProvider_1.line +
|
|
188
|
-
`ALTER TABLE ${table.name}` +
|
|
189
|
-
dbProvider_1.line +
|
|
190
|
-
` ADD CONSTRAINT ${sqlFkName}` +
|
|
191
|
-
dbProvider_1.line +
|
|
192
|
-
` FOREIGN KEY (${sqlColumns})` +
|
|
193
|
-
dbProvider_1.line +
|
|
194
|
-
` REFERENCES ${sqlRefInfo}${sqlOptions};`;
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
// Column comment
|
|
198
|
-
let sqlComment = '';
|
|
199
|
-
if (withComment) {
|
|
200
|
-
sqlComment = `COMMENT ON TABLE ${table.name} IS ${sqlHelper_1.SqlHelper.toSQL(table.comment)};`;
|
|
201
|
-
table.columns.forEach((column) => {
|
|
202
|
-
let sqlColumnComment = this.getColumnComment(column);
|
|
203
|
-
if (sqlColumnComment) {
|
|
204
|
-
sqlColumnComment = sqlHelper_1.SqlHelper.toSQL(sqlColumnComment);
|
|
205
|
-
sqlComment +=
|
|
206
|
-
dbProvider_1.line + `COMMENT ON COLUMN ${table.name}.${column.name} IS ${sqlColumnComment};`;
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
if (sqlComment) {
|
|
211
|
-
result.sqlCreateTable += dbProvider_1.line + sqlComment;
|
|
212
|
-
}
|
|
213
|
-
return result;
|
|
214
|
-
}
|
|
215
|
-
getSqlDropTableSingle(table) {
|
|
216
|
-
const sSQL = ' SELECT COUNT(*) INTO v_table_is_exists' +
|
|
217
|
-
dbProvider_1.line +
|
|
218
|
-
' FROM user_tables' +
|
|
219
|
-
dbProvider_1.line +
|
|
220
|
-
` WHERE lower(table_name) = lower('${table.name}');` +
|
|
221
|
-
dbProvider_1.line +
|
|
222
|
-
' IF v_table_is_exists != 0 THEN' +
|
|
223
|
-
dbProvider_1.line +
|
|
224
|
-
` execute immediate 'DROP TABLE ${table.name} PURGE';` +
|
|
225
|
-
dbProvider_1.line +
|
|
226
|
-
' END IF;';
|
|
227
|
-
return sSQL;
|
|
228
|
-
}
|
|
229
|
-
getSqlDropTableSinglePost() {
|
|
230
|
-
const sSQL = 'END;' + dbProvider_1.line + '/' + dbProvider_1.line;
|
|
231
|
-
return sSQL;
|
|
232
|
-
}
|
|
233
|
-
getSqlDropTableSinglePre() {
|
|
234
|
-
const sSQL = 'DECLARE' + dbProvider_1.line + ' v_table_is_exists integer;' + dbProvider_1.line + 'BEGIN';
|
|
235
|
-
return sSQL;
|
|
236
|
-
}
|
|
237
|
-
getSqlRemoveFKPost() {
|
|
238
|
-
const sSQL = '-- Remove temporary store procedure for remove foreign key' +
|
|
239
|
-
dbProvider_1.line +
|
|
240
|
-
`DROP PROCEDURE ${this.SP_REMVOE_FK_NAME};`;
|
|
241
|
-
return sSQL;
|
|
242
|
-
}
|
|
243
|
-
getSqlRemoveFKPre() {
|
|
244
|
-
const sSQL = '-- temporary store procedure for remove foreign key' +
|
|
245
|
-
dbProvider_1.line +
|
|
246
|
-
`CREATE or REPLACE PROCEDURE ${this.SP_REMVOE_FK_NAME}(` +
|
|
247
|
-
dbProvider_1.line +
|
|
248
|
-
' a_table_name IN VARCHAR2' +
|
|
249
|
-
dbProvider_1.line +
|
|
250
|
-
') IS' +
|
|
251
|
-
dbProvider_1.line +
|
|
252
|
-
' v_fk_name varchar2(250);' +
|
|
253
|
-
dbProvider_1.line +
|
|
254
|
-
' CURSOR c_fk IS' +
|
|
255
|
-
dbProvider_1.line +
|
|
256
|
-
' SELECT UC.constraint_name' +
|
|
257
|
-
dbProvider_1.line +
|
|
258
|
-
' FROM user_constraints UC' +
|
|
259
|
-
dbProvider_1.line +
|
|
260
|
-
' WHERE lower(UC.table_name) = lower(a_table_name)' +
|
|
261
|
-
dbProvider_1.line +
|
|
262
|
-
" AND UC.constraint_type = 'R';" +
|
|
263
|
-
dbProvider_1.line +
|
|
264
|
-
'BEGIN' +
|
|
265
|
-
dbProvider_1.line +
|
|
266
|
-
'' +
|
|
267
|
-
dbProvider_1.line +
|
|
268
|
-
' OPEN c_fk;' +
|
|
269
|
-
dbProvider_1.line +
|
|
270
|
-
' LOOP' +
|
|
271
|
-
dbProvider_1.line +
|
|
272
|
-
' FETCH c_fk INTO v_fk_name;' +
|
|
273
|
-
dbProvider_1.line +
|
|
274
|
-
' EXIT WHEN c_fk%NOTFOUND;' +
|
|
275
|
-
dbProvider_1.line +
|
|
276
|
-
" EXECUTE IMMEDIATE 'ALTER TABLE ' || a_table_name || ' DROP CONSTRAINT ' || v_fk_name;" +
|
|
277
|
-
dbProvider_1.line +
|
|
278
|
-
' END LOOP;' +
|
|
279
|
-
dbProvider_1.line +
|
|
280
|
-
' CLOSE c_fk;' +
|
|
281
|
-
dbProvider_1.line +
|
|
282
|
-
`END ${this.SP_REMVOE_FK_NAME};`;
|
|
283
|
-
return sSQL;
|
|
284
|
-
}
|
|
285
|
-
getSqlRemoveFkSingle(table) {
|
|
286
|
-
const sSQL = `-- Remove ${table.name} foreign key constraint` +
|
|
287
|
-
dbProvider_1.line +
|
|
288
|
-
`CALL ${this.SP_REMVOE_FK_NAME}('${table.name}');`;
|
|
289
|
-
return sSQL;
|
|
290
|
-
}
|
|
291
|
-
renderDefaultName(table, column) {
|
|
292
|
-
const sSQL = this.RenderObjectName(super.renderDefaultName(table, column));
|
|
293
|
-
return sSQL;
|
|
294
|
-
}
|
|
295
|
-
renderFkName(table, foreignKey) {
|
|
296
|
-
const sSQL = this.RenderObjectName(super.renderFkName(table, foreignKey));
|
|
297
|
-
return sSQL;
|
|
298
|
-
}
|
|
299
|
-
renderIndexName(table, index) {
|
|
300
|
-
const sSQL = this.RenderObjectName(super.renderIndexName(table, index));
|
|
301
|
-
return sSQL;
|
|
302
|
-
}
|
|
303
|
-
RenderObjectName(ObjectName) {
|
|
304
|
-
let newObjectName;
|
|
305
|
-
let objectNameIndex;
|
|
306
|
-
newObjectName = ObjectName;
|
|
307
|
-
if (newObjectName.length > this.MAX_OBJECT_NAME_LENGTH) {
|
|
308
|
-
newObjectName = newObjectName.substring(0, this.MAX_OBJECT_NAME_LENGTH - 4);
|
|
309
|
-
objectNameIndex = this.p_colObjectNames[newObjectName];
|
|
310
|
-
if (!objectNameIndex) {
|
|
311
|
-
objectNameIndex = 0;
|
|
312
|
-
this.p_colObjectNames[newObjectName] = newObjectName;
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
objectNameIndex += 1;
|
|
316
|
-
this.p_colObjectNames[newObjectName] = objectNameIndex;
|
|
317
|
-
}
|
|
318
|
-
newObjectName += objectNameIndex.toString().padEnd(4, '0');
|
|
319
|
-
}
|
|
320
|
-
return newObjectName;
|
|
321
|
-
}
|
|
322
|
-
renderPkName(table) {
|
|
323
|
-
const sSQL = this.RenderObjectName(super.renderPkName(table));
|
|
324
|
-
return sSQL;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
exports.OracleProvider = OracleProvider;
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable class-methods-use-this */
|
|
3
|
+
/* eslint-disable prefer-template */
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.OracleProvider = void 0;
|
|
6
|
+
const sqlHelper_1 = require("../../lib/utils/sqlHelper");
|
|
7
|
+
const dbProvider_1 = require("../core/dbProvider");
|
|
8
|
+
class OracleProvider extends dbProvider_1.DbProvider {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.SP_REMVOE_FK_NAME = 'tmp_dbm_drop_table_fk';
|
|
12
|
+
this.MAX_OBJECT_NAME_LENGTH = 30;
|
|
13
|
+
this.SQL_DELIMITER = '/';
|
|
14
|
+
this.p_colObjectNames = {};
|
|
15
|
+
}
|
|
16
|
+
getCreateTableIfNotExistsSql(model) {
|
|
17
|
+
this.p_colObjectNames = {};
|
|
18
|
+
this.outputInitialize();
|
|
19
|
+
this.outputlnln(this.getSqlCreateTableIfNotExistsSinglePre());
|
|
20
|
+
model.tables.forEach((table) => {
|
|
21
|
+
const { sqlCreateTable, sqlCreateFK } = this.getSqlCreateTableIfNotExistsSingle(table);
|
|
22
|
+
this.outputlnln(sqlCreateTable);
|
|
23
|
+
if (sqlCreateFK.length > 0) {
|
|
24
|
+
this.outputlnln(sqlCreateFK, 1);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
this.outputln(this.getSqlCreateTableIfNotExistsSinglePost());
|
|
28
|
+
return this.outputCopy();
|
|
29
|
+
}
|
|
30
|
+
getCreateTableSql(model, withComment) {
|
|
31
|
+
this.outputInitialize();
|
|
32
|
+
this.getCreateTableSqlInternal(model, withComment);
|
|
33
|
+
return this.outputCopy();
|
|
34
|
+
}
|
|
35
|
+
getCreateTableSqlInternal(model, withComment) {
|
|
36
|
+
this.p_colObjectNames = {};
|
|
37
|
+
// Create tables
|
|
38
|
+
model.tables.forEach((table) => {
|
|
39
|
+
const { sqlCreateTable, sqlCreateFK } = this.getSqlCreateTableSingle(table, withComment);
|
|
40
|
+
this.outputlnln(sqlCreateTable);
|
|
41
|
+
if (sqlCreateFK) {
|
|
42
|
+
this.outputlnln(sqlCreateFK, 1);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
getDropTableSql(model) {
|
|
47
|
+
let sSQL;
|
|
48
|
+
this.outputInitialize();
|
|
49
|
+
// Create the store procedure of dropping foreign key
|
|
50
|
+
sSQL = this.getSqlRemoveFKPre();
|
|
51
|
+
this.outputlnln(sSQL + dbProvider_1.line + this.SQL_DELIMITER);
|
|
52
|
+
// Drop foreign key relation
|
|
53
|
+
model.tables.forEach((table) => {
|
|
54
|
+
sSQL = this.getSqlRemoveFkSingle(table);
|
|
55
|
+
this.outputlnln(sSQL);
|
|
56
|
+
});
|
|
57
|
+
// Drop the store procedure of dropping foreign key
|
|
58
|
+
sSQL = this.getSqlRemoveFKPost();
|
|
59
|
+
this.outputlnln(sSQL);
|
|
60
|
+
// Drop tables
|
|
61
|
+
this.outputlnln(this.getSqlDropTableSinglePre());
|
|
62
|
+
model.tables.forEach((table) => {
|
|
63
|
+
sSQL = this.getSqlDropTableSingle(table);
|
|
64
|
+
this.outputlnln(sSQL);
|
|
65
|
+
});
|
|
66
|
+
this.outputlnln(this.getSqlDropTableSinglePost());
|
|
67
|
+
return this.outputCopy();
|
|
68
|
+
}
|
|
69
|
+
getDropThenCreateTableSql(model, withComment) {
|
|
70
|
+
let sSQL;
|
|
71
|
+
this.outputInitialize();
|
|
72
|
+
// Create the store procedure of dropping foreign key
|
|
73
|
+
sSQL = this.getSqlRemoveFKPre();
|
|
74
|
+
this.outputlnln(sSQL + dbProvider_1.line + this.SQL_DELIMITER);
|
|
75
|
+
// Drop foreign key relation
|
|
76
|
+
model.tables.forEach((table) => {
|
|
77
|
+
sSQL = this.getSqlRemoveFkSingle(table);
|
|
78
|
+
this.outputlnln(sSQL);
|
|
79
|
+
});
|
|
80
|
+
// Drop the store procedure of dropping foreign key
|
|
81
|
+
sSQL = this.getSqlRemoveFKPost();
|
|
82
|
+
this.outputlnln(sSQL);
|
|
83
|
+
// Drop tables
|
|
84
|
+
this.outputlnln(this.getSqlDropTableSinglePre());
|
|
85
|
+
model.tables.forEach((table) => {
|
|
86
|
+
sSQL = this.getSqlDropTableSingle(table);
|
|
87
|
+
this.outputlnln(sSQL);
|
|
88
|
+
});
|
|
89
|
+
this.outputlnln(this.getSqlDropTableSinglePost());
|
|
90
|
+
// Create tables
|
|
91
|
+
this.getCreateTableSqlInternal(model, withComment);
|
|
92
|
+
return this.outputCopy();
|
|
93
|
+
}
|
|
94
|
+
getSqlCreateTableIfNotExistsSingle(table) {
|
|
95
|
+
const result = this.getSqlCreateTableSingle(table, false);
|
|
96
|
+
const sSQL = ' SELECT COUNT(*) INTO v_table_is_exists' +
|
|
97
|
+
dbProvider_1.line +
|
|
98
|
+
' FROM user_tables' +
|
|
99
|
+
dbProvider_1.line +
|
|
100
|
+
` WHERE lower(table_name) = lower('${table.name}');` +
|
|
101
|
+
dbProvider_1.line +
|
|
102
|
+
' IF v_table_is_exists != 0 THEN' +
|
|
103
|
+
dbProvider_1.line +
|
|
104
|
+
` execute immediate ${result.sqlCreateTable}` +
|
|
105
|
+
dbProvider_1.line +
|
|
106
|
+
' END IF;';
|
|
107
|
+
result.sqlCreateTable = sSQL;
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
getSqlCreateTableIfNotExistsSinglePost() {
|
|
111
|
+
const sSQL = 'END;' + dbProvider_1.line + this.SQL_DELIMITER;
|
|
112
|
+
return sSQL;
|
|
113
|
+
}
|
|
114
|
+
getSqlCreateTableIfNotExistsSinglePre() {
|
|
115
|
+
const sSQL = 'DECLARE' + dbProvider_1.line + ' v_table_is_exists integer;' + dbProvider_1.line + 'BEGIN';
|
|
116
|
+
return sSQL;
|
|
117
|
+
}
|
|
118
|
+
getSqlCreateTableSingle(table, withComment) {
|
|
119
|
+
const result = {
|
|
120
|
+
sqlCreateFK: '',
|
|
121
|
+
sqlCreateTable: '',
|
|
122
|
+
};
|
|
123
|
+
if (!table.columns) {
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
// Create Columns sql
|
|
127
|
+
let sqlColumn = '';
|
|
128
|
+
table.columns.forEach((column, index) => {
|
|
129
|
+
const sqlComma = index === 0 ? ' ' : ',';
|
|
130
|
+
const sqlNullable = column.nullable ? 'NULL' : 'NOT NULL';
|
|
131
|
+
const sqlDefault = column.default.length === 0 ? '' : ` DEFAULT ${column.default}`;
|
|
132
|
+
sqlColumn += dbProvider_1.line + ` ${sqlComma}${column.name} ${column.type} ${sqlDefault}${sqlNullable}`;
|
|
133
|
+
});
|
|
134
|
+
// Primary key SQL
|
|
135
|
+
let sqlPrimaryKey = '';
|
|
136
|
+
if (table.primaryKey) {
|
|
137
|
+
const sqlPkName = this.renderPkName(table);
|
|
138
|
+
const sqlPkColumns = table.primaryKey.columns.replace(',\\s*', ', ');
|
|
139
|
+
sqlPrimaryKey =
|
|
140
|
+
dbProvider_1.line +
|
|
141
|
+
`ALTER TABLE ${table.name} ADD CONSTRAINT ${sqlPkName} PRIMARY KEY (${sqlPkColumns});`;
|
|
142
|
+
}
|
|
143
|
+
// unique Indexes SQL
|
|
144
|
+
let sqlUniqueIndex = '';
|
|
145
|
+
table.indexes?.forEach((index) => {
|
|
146
|
+
if (index.unique) {
|
|
147
|
+
const sqlIndexName = this.renderIndexName(table, index);
|
|
148
|
+
const sqlColumns = index.columns.replace(',\\s*', ', ');
|
|
149
|
+
sqlUniqueIndex +=
|
|
150
|
+
dbProvider_1.line + `ALTER TABLE ${table.name} ADD CONSTRAINT ${sqlIndexName} UNIQUE (${sqlColumns});`;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
// non-unique Indexes SQL
|
|
154
|
+
let sqlNoUniqueIndex = '';
|
|
155
|
+
table.indexes?.forEach((index) => {
|
|
156
|
+
if (!index.unique) {
|
|
157
|
+
const sqlIndexName = this.renderIndexName(table, index);
|
|
158
|
+
const sqlColumns = index.columns.replace(',\\s*', ', ');
|
|
159
|
+
sqlNoUniqueIndex += dbProvider_1.line + `CREATE INDEX ${sqlIndexName} ON ${table.name} (${sqlColumns});`;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// Generate table sql
|
|
163
|
+
// Create table
|
|
164
|
+
result.sqlCreateTable =
|
|
165
|
+
''.padEnd(32, '-') +
|
|
166
|
+
dbProvider_1.line +
|
|
167
|
+
`-- Create table: '${table.name}'` +
|
|
168
|
+
dbProvider_1.line +
|
|
169
|
+
''.padEnd(32, '-') +
|
|
170
|
+
dbProvider_1.line +
|
|
171
|
+
`CREATE TABLE ${table.name} (` +
|
|
172
|
+
sqlColumn +
|
|
173
|
+
dbProvider_1.line +
|
|
174
|
+
');' +
|
|
175
|
+
sqlPrimaryKey +
|
|
176
|
+
sqlUniqueIndex +
|
|
177
|
+
sqlNoUniqueIndex;
|
|
178
|
+
// Generate Foreign key SQL
|
|
179
|
+
if (table.foreignKeys.length > 0) {
|
|
180
|
+
result.sqlCreateFK = `-- Create foreign keys for table: '${table.name}'`;
|
|
181
|
+
table.foreignKeys.forEach((foreignKey) => {
|
|
182
|
+
const sqlFkName = this.renderFkName(table, foreignKey);
|
|
183
|
+
const sqlColumns = foreignKey.columns.replace(',\\s*', ', ');
|
|
184
|
+
const sqlRefInfo = `${foreignKey.refTable}(${foreignKey.refColumns.replace(',\\s*', ', ')})`;
|
|
185
|
+
const sqlOptions = foreignKey.options.length > 0 ? foreignKey.options : '';
|
|
186
|
+
result.sqlCreateFK +=
|
|
187
|
+
dbProvider_1.line +
|
|
188
|
+
`ALTER TABLE ${table.name}` +
|
|
189
|
+
dbProvider_1.line +
|
|
190
|
+
` ADD CONSTRAINT ${sqlFkName}` +
|
|
191
|
+
dbProvider_1.line +
|
|
192
|
+
` FOREIGN KEY (${sqlColumns})` +
|
|
193
|
+
dbProvider_1.line +
|
|
194
|
+
` REFERENCES ${sqlRefInfo}${sqlOptions};`;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Column comment
|
|
198
|
+
let sqlComment = '';
|
|
199
|
+
if (withComment) {
|
|
200
|
+
sqlComment = `COMMENT ON TABLE ${table.name} IS ${sqlHelper_1.SqlHelper.toSQL(table.comment)};`;
|
|
201
|
+
table.columns.forEach((column) => {
|
|
202
|
+
let sqlColumnComment = this.getColumnComment(column);
|
|
203
|
+
if (sqlColumnComment) {
|
|
204
|
+
sqlColumnComment = sqlHelper_1.SqlHelper.toSQL(sqlColumnComment);
|
|
205
|
+
sqlComment +=
|
|
206
|
+
dbProvider_1.line + `COMMENT ON COLUMN ${table.name}.${column.name} IS ${sqlColumnComment};`;
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (sqlComment) {
|
|
211
|
+
result.sqlCreateTable += dbProvider_1.line + sqlComment;
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
getSqlDropTableSingle(table) {
|
|
216
|
+
const sSQL = ' SELECT COUNT(*) INTO v_table_is_exists' +
|
|
217
|
+
dbProvider_1.line +
|
|
218
|
+
' FROM user_tables' +
|
|
219
|
+
dbProvider_1.line +
|
|
220
|
+
` WHERE lower(table_name) = lower('${table.name}');` +
|
|
221
|
+
dbProvider_1.line +
|
|
222
|
+
' IF v_table_is_exists != 0 THEN' +
|
|
223
|
+
dbProvider_1.line +
|
|
224
|
+
` execute immediate 'DROP TABLE ${table.name} PURGE';` +
|
|
225
|
+
dbProvider_1.line +
|
|
226
|
+
' END IF;';
|
|
227
|
+
return sSQL;
|
|
228
|
+
}
|
|
229
|
+
getSqlDropTableSinglePost() {
|
|
230
|
+
const sSQL = 'END;' + dbProvider_1.line + '/' + dbProvider_1.line;
|
|
231
|
+
return sSQL;
|
|
232
|
+
}
|
|
233
|
+
getSqlDropTableSinglePre() {
|
|
234
|
+
const sSQL = 'DECLARE' + dbProvider_1.line + ' v_table_is_exists integer;' + dbProvider_1.line + 'BEGIN';
|
|
235
|
+
return sSQL;
|
|
236
|
+
}
|
|
237
|
+
getSqlRemoveFKPost() {
|
|
238
|
+
const sSQL = '-- Remove temporary store procedure for remove foreign key' +
|
|
239
|
+
dbProvider_1.line +
|
|
240
|
+
`DROP PROCEDURE ${this.SP_REMVOE_FK_NAME};`;
|
|
241
|
+
return sSQL;
|
|
242
|
+
}
|
|
243
|
+
getSqlRemoveFKPre() {
|
|
244
|
+
const sSQL = '-- temporary store procedure for remove foreign key' +
|
|
245
|
+
dbProvider_1.line +
|
|
246
|
+
`CREATE or REPLACE PROCEDURE ${this.SP_REMVOE_FK_NAME}(` +
|
|
247
|
+
dbProvider_1.line +
|
|
248
|
+
' a_table_name IN VARCHAR2' +
|
|
249
|
+
dbProvider_1.line +
|
|
250
|
+
') IS' +
|
|
251
|
+
dbProvider_1.line +
|
|
252
|
+
' v_fk_name varchar2(250);' +
|
|
253
|
+
dbProvider_1.line +
|
|
254
|
+
' CURSOR c_fk IS' +
|
|
255
|
+
dbProvider_1.line +
|
|
256
|
+
' SELECT UC.constraint_name' +
|
|
257
|
+
dbProvider_1.line +
|
|
258
|
+
' FROM user_constraints UC' +
|
|
259
|
+
dbProvider_1.line +
|
|
260
|
+
' WHERE lower(UC.table_name) = lower(a_table_name)' +
|
|
261
|
+
dbProvider_1.line +
|
|
262
|
+
" AND UC.constraint_type = 'R';" +
|
|
263
|
+
dbProvider_1.line +
|
|
264
|
+
'BEGIN' +
|
|
265
|
+
dbProvider_1.line +
|
|
266
|
+
'' +
|
|
267
|
+
dbProvider_1.line +
|
|
268
|
+
' OPEN c_fk;' +
|
|
269
|
+
dbProvider_1.line +
|
|
270
|
+
' LOOP' +
|
|
271
|
+
dbProvider_1.line +
|
|
272
|
+
' FETCH c_fk INTO v_fk_name;' +
|
|
273
|
+
dbProvider_1.line +
|
|
274
|
+
' EXIT WHEN c_fk%NOTFOUND;' +
|
|
275
|
+
dbProvider_1.line +
|
|
276
|
+
" EXECUTE IMMEDIATE 'ALTER TABLE ' || a_table_name || ' DROP CONSTRAINT ' || v_fk_name;" +
|
|
277
|
+
dbProvider_1.line +
|
|
278
|
+
' END LOOP;' +
|
|
279
|
+
dbProvider_1.line +
|
|
280
|
+
' CLOSE c_fk;' +
|
|
281
|
+
dbProvider_1.line +
|
|
282
|
+
`END ${this.SP_REMVOE_FK_NAME};`;
|
|
283
|
+
return sSQL;
|
|
284
|
+
}
|
|
285
|
+
getSqlRemoveFkSingle(table) {
|
|
286
|
+
const sSQL = `-- Remove ${table.name} foreign key constraint` +
|
|
287
|
+
dbProvider_1.line +
|
|
288
|
+
`CALL ${this.SP_REMVOE_FK_NAME}('${table.name}');`;
|
|
289
|
+
return sSQL;
|
|
290
|
+
}
|
|
291
|
+
renderDefaultName(table, column) {
|
|
292
|
+
const sSQL = this.RenderObjectName(super.renderDefaultName(table, column));
|
|
293
|
+
return sSQL;
|
|
294
|
+
}
|
|
295
|
+
renderFkName(table, foreignKey) {
|
|
296
|
+
const sSQL = this.RenderObjectName(super.renderFkName(table, foreignKey));
|
|
297
|
+
return sSQL;
|
|
298
|
+
}
|
|
299
|
+
renderIndexName(table, index) {
|
|
300
|
+
const sSQL = this.RenderObjectName(super.renderIndexName(table, index));
|
|
301
|
+
return sSQL;
|
|
302
|
+
}
|
|
303
|
+
RenderObjectName(ObjectName) {
|
|
304
|
+
let newObjectName;
|
|
305
|
+
let objectNameIndex;
|
|
306
|
+
newObjectName = ObjectName;
|
|
307
|
+
if (newObjectName.length > this.MAX_OBJECT_NAME_LENGTH) {
|
|
308
|
+
newObjectName = newObjectName.substring(0, this.MAX_OBJECT_NAME_LENGTH - 4);
|
|
309
|
+
objectNameIndex = this.p_colObjectNames[newObjectName];
|
|
310
|
+
if (!objectNameIndex) {
|
|
311
|
+
objectNameIndex = 0;
|
|
312
|
+
this.p_colObjectNames[newObjectName] = newObjectName;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
objectNameIndex += 1;
|
|
316
|
+
this.p_colObjectNames[newObjectName] = objectNameIndex;
|
|
317
|
+
}
|
|
318
|
+
newObjectName += objectNameIndex.toString().padEnd(4, '0');
|
|
319
|
+
}
|
|
320
|
+
return newObjectName;
|
|
321
|
+
}
|
|
322
|
+
renderPkName(table) {
|
|
323
|
+
const sSQL = this.RenderObjectName(super.renderPkName(table));
|
|
324
|
+
return sSQL;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
exports.OracleProvider = OracleProvider;
|
|
328
328
|
//# sourceMappingURL=oracleProvider.js.map
|