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.
Files changed (113) hide show
  1. package/README.md +168 -164
  2. package/dist/dialects/core/dbImportProvider.d.ts +5 -5
  3. package/dist/dialects/core/dbImportProvider.js +6 -6
  4. package/dist/dialects/core/dbProvider.d.ts +34 -34
  5. package/dist/dialects/core/dbProvider.js +119 -119
  6. package/dist/dialects/core/dbProvider.js.map +1 -1
  7. package/dist/dialects/core/dbUtils.d.ts +35 -35
  8. package/dist/dialects/core/dbUtils.js +157 -158
  9. package/dist/dialects/core/dbUtils.js.map +1 -1
  10. package/dist/dialects/core/providerFactory.d.ts +7 -7
  11. package/dist/dialects/core/providerFactory.js +63 -63
  12. package/dist/dialects/core/providerFactory.js.map +1 -1
  13. package/dist/dialects/db2/db2Provider.d.ts +19 -19
  14. package/dist/dialects/db2/db2Provider.js +185 -186
  15. package/dist/dialects/db2/db2Provider.js.map +1 -1
  16. package/dist/dialects/mariadb/mariaDbImportProvider.d.ts +19 -19
  17. package/dist/dialects/mariadb/mariaDbImportProvider.js +260 -260
  18. package/dist/dialects/mariadb/mariaDbImportProvider.js.map +1 -1
  19. package/dist/dialects/mariadb/mariaDbProvider.d.ts +18 -18
  20. package/dist/dialects/mariadb/mariaDbProvider.js +152 -153
  21. package/dist/dialects/mariadb/mariaDbProvider.js.map +1 -1
  22. package/dist/dialects/mariadb/mariaDbUtil.d.ts +6 -6
  23. package/dist/dialects/mariadb/mariaDbUtil.js +22 -22
  24. package/dist/dialects/mariadb/mariaDbUtil.js.map +1 -1
  25. package/dist/dialects/mssql/msSqlProvider.d.ts +21 -21
  26. package/dist/dialects/mssql/msSqlProvider.js +264 -265
  27. package/dist/dialects/mssql/msSqlProvider.js.map +1 -1
  28. package/dist/dialects/mysql/mySqlImportProvider.d.ts +3 -3
  29. package/dist/dialects/mysql/mySqlImportProvider.js +7 -7
  30. package/dist/dialects/mysql/mySqlProvider.d.ts +3 -3
  31. package/dist/dialects/mysql/mySqlProvider.js +7 -7
  32. package/dist/dialects/oracle/oracleProvider.d.ts +35 -35
  33. package/dist/dialects/oracle/oracleProvider.js +327 -327
  34. package/dist/dialects/oracle/oracleProvider.js.map +1 -1
  35. package/dist/dialects/postgresql/postgreSqlProvider.d.ts +19 -19
  36. package/dist/dialects/postgresql/postgreSqlProvider.js +172 -173
  37. package/dist/dialects/postgresql/postgreSqlProvider.js.map +1 -1
  38. package/dist/dialects/sqlite/sqliteSqlProvider.d.ts +23 -23
  39. package/dist/dialects/sqlite/sqliteSqlProvider.js +147 -148
  40. package/dist/dialects/sqlite/sqliteSqlProvider.js.map +1 -1
  41. package/dist/index.d.ts +10 -10
  42. package/dist/index.js +9 -9
  43. package/dist/lib/code-flow/codeFlow.d.ts +37 -37
  44. package/dist/lib/code-flow/codeFlow.js +61 -61
  45. package/dist/lib/markdown-object/markdownModel.d.ts +14 -14
  46. package/dist/lib/markdown-object/markdownModel.js +12 -12
  47. package/dist/lib/markdown-object/markdownModel.js.map +1 -1
  48. package/dist/lib/markdown-object/markdownReader.d.ts +39 -39
  49. package/dist/lib/markdown-object/markdownReader.js +261 -261
  50. package/dist/lib/markdown-object/markdownReader.js.map +1 -1
  51. package/dist/lib/markdown-object/markdownWriter.d.ts +36 -36
  52. package/dist/lib/markdown-object/markdownWriter.js +224 -224
  53. package/dist/lib/markdown-object/markdownWriter.js.map +1 -1
  54. package/dist/lib/markdown-object/readerContext.d.ts +12 -12
  55. package/dist/lib/markdown-object/readerContext.js +48 -48
  56. package/dist/lib/markdown-object/readerContext.js.map +1 -1
  57. package/dist/lib/utils/fileHelper.d.ts +14 -15
  58. package/dist/lib/utils/fileHelper.js +58 -57
  59. package/dist/lib/utils/fileHelper.js.map +1 -1
  60. package/dist/lib/utils/logger.d.ts +9 -9
  61. package/dist/lib/utils/logger.js +60 -60
  62. package/dist/lib/utils/logger.js.map +1 -1
  63. package/dist/lib/utils/markdownParser.d.ts +22 -22
  64. package/dist/lib/utils/markdownParser.js +99 -95
  65. package/dist/lib/utils/markdownParser.js.map +1 -1
  66. package/dist/lib/utils/sqlHelper.d.ts +3 -3
  67. package/dist/lib/utils/sqlHelper.js +23 -23
  68. package/dist/lib/utils/sqlHelper.js.map +1 -1
  69. package/dist/lib/utils/systemHelper.d.ts +2 -2
  70. package/dist/lib/utils/systemHelper.js +6 -6
  71. package/dist/lib/utils/textFileReader.d.ts +25 -25
  72. package/dist/lib/utils/textFileReader.js +57 -57
  73. package/dist/lib/utils/textFileReader.js.map +1 -1
  74. package/dist/lib/utils/textHelper.d.ts +21 -21
  75. package/dist/lib/utils/textHelper.js +75 -71
  76. package/dist/lib/utils/textHelper.js.map +1 -1
  77. package/dist/models/databaseTypes.d.ts +33 -33
  78. package/dist/models/databaseTypes.js +37 -37
  79. package/dist/models/databaseTypes.js.map +1 -1
  80. package/dist/models/dbColumn.d.ts +43 -43
  81. package/dist/models/dbColumn.js +2 -2
  82. package/dist/models/dbDiffModel.d.ts +43 -43
  83. package/dist/models/dbDiffModel.js +2 -2
  84. package/dist/models/dbForeignKey.d.ts +33 -33
  85. package/dist/models/dbForeignKey.js +2 -2
  86. package/dist/models/dbIndex.d.ts +28 -28
  87. package/dist/models/dbIndex.js +2 -2
  88. package/dist/models/dbIndexType.d.ts +8 -8
  89. package/dist/models/dbIndexType.js +12 -12
  90. package/dist/models/dbIndexType.js.map +1 -1
  91. package/dist/models/dbModel.d.ts +10 -10
  92. package/dist/models/dbModel.js +2 -2
  93. package/dist/models/dbPrimaryKey.d.ts +16 -16
  94. package/dist/models/dbPrimaryKey.js +2 -2
  95. package/dist/models/dbTable.d.ts +49 -49
  96. package/dist/models/dbTable.js +2 -2
  97. package/dist/models/dbTableMarkdown.d.ts +35 -35
  98. package/dist/models/dbTableMarkdown.js +2 -2
  99. package/dist/resources/mariadb/procAppUpgradeDB.sql +164 -164
  100. package/dist/resources/mariadb/sql-create-table-fk.njk +10 -10
  101. package/dist/resources/mariadb/sql-create-table.njk +11 -11
  102. package/dist/resources/mariadb/sql-create-tables.njk +8 -8
  103. package/dist/resources/mariadb/sql-upgrade-new-table.njk +14 -14
  104. package/dist/services/dbOptions.d.ts +35 -35
  105. package/dist/services/dbOptions.js +17 -17
  106. package/dist/services/dbmOptions.d.ts +28 -28
  107. package/dist/services/dbmOptions.js +34 -34
  108. package/dist/services/dbmService.d.ts +87 -87
  109. package/dist/services/dbmService.js +244 -244
  110. package/dist/services/dbmService.js.map +1 -1
  111. package/package.json +28 -34
  112. package/CHANGELOG.md +0 -81
  113. 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