knex 0.21.20 → 0.21.21

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 (141) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/CONTRIBUTING.md +184 -184
  3. package/LICENSE +22 -22
  4. package/README.md +95 -95
  5. package/bin/cli.js +414 -414
  6. package/bin/utils/cli-config-utils.js +151 -151
  7. package/bin/utils/constants.js +7 -7
  8. package/bin/utils/migrationsLister.js +37 -37
  9. package/knex.js +8 -8
  10. package/lib/client.js +413 -413
  11. package/lib/config-resolver.js +61 -61
  12. package/lib/constants.js +44 -44
  13. package/lib/dialects/mssql/index.js +390 -390
  14. package/lib/dialects/mssql/query/compiler.js +444 -444
  15. package/lib/dialects/mssql/schema/columncompiler.js +103 -103
  16. package/lib/dialects/mssql/schema/compiler.js +59 -59
  17. package/lib/dialects/mssql/schema/tablecompiler.js +245 -245
  18. package/lib/dialects/mssql/transaction.js +97 -97
  19. package/lib/dialects/mysql/index.js +191 -191
  20. package/lib/dialects/mysql/query/compiler.js +142 -142
  21. package/lib/dialects/mysql/schema/columncompiler.js +171 -171
  22. package/lib/dialects/mysql/schema/compiler.js +60 -60
  23. package/lib/dialects/mysql/schema/tablecompiler.js +262 -262
  24. package/lib/dialects/mysql/transaction.js +48 -48
  25. package/lib/dialects/mysql2/index.js +35 -35
  26. package/lib/dialects/mysql2/transaction.js +46 -46
  27. package/lib/dialects/oracle/DEAD_CODE.md +5 -5
  28. package/lib/dialects/oracle/formatter.js +20 -20
  29. package/lib/dialects/oracle/index.js +79 -79
  30. package/lib/dialects/oracle/query/compiler.js +327 -327
  31. package/lib/dialects/oracle/schema/columnbuilder.js +18 -18
  32. package/lib/dialects/oracle/schema/columncompiler.js +139 -139
  33. package/lib/dialects/oracle/schema/compiler.js +81 -81
  34. package/lib/dialects/oracle/schema/tablecompiler.js +165 -165
  35. package/lib/dialects/oracle/schema/trigger.js +126 -126
  36. package/lib/dialects/oracle/utils.js +86 -86
  37. package/lib/dialects/oracledb/index.js +489 -489
  38. package/lib/dialects/oracledb/query/compiler.js +363 -363
  39. package/lib/dialects/oracledb/schema/columncompiler.js +35 -35
  40. package/lib/dialects/oracledb/transaction.js +76 -76
  41. package/lib/dialects/oracledb/utils.js +14 -14
  42. package/lib/dialects/postgres/index.js +319 -319
  43. package/lib/dialects/postgres/query/compiler.js +206 -206
  44. package/lib/dialects/postgres/schema/columncompiler.js +125 -125
  45. package/lib/dialects/postgres/schema/compiler.js +109 -109
  46. package/lib/dialects/postgres/schema/tablecompiler.js +183 -183
  47. package/lib/dialects/redshift/index.js +73 -73
  48. package/lib/dialects/redshift/query/compiler.js +119 -119
  49. package/lib/dialects/redshift/schema/columnbuilder.js +20 -20
  50. package/lib/dialects/redshift/schema/columncompiler.js +60 -60
  51. package/lib/dialects/redshift/schema/compiler.js +14 -14
  52. package/lib/dialects/redshift/schema/tablecompiler.js +123 -123
  53. package/lib/dialects/redshift/transaction.js +18 -18
  54. package/lib/dialects/sqlite3/formatter.js +21 -21
  55. package/lib/dialects/sqlite3/index.js +169 -169
  56. package/lib/dialects/sqlite3/query/compiler.js +222 -222
  57. package/lib/dialects/sqlite3/schema/columncompiler.js +27 -27
  58. package/lib/dialects/sqlite3/schema/compiler.js +49 -49
  59. package/lib/dialects/sqlite3/schema/ddl.js +525 -525
  60. package/lib/dialects/sqlite3/schema/tablecompiler.js +238 -238
  61. package/lib/formatter.js +295 -295
  62. package/lib/functionhelper.js +14 -14
  63. package/lib/helpers.js +92 -92
  64. package/lib/index.js +3 -3
  65. package/lib/interface.js +115 -115
  66. package/lib/knex.js +42 -42
  67. package/lib/logger.js +76 -76
  68. package/lib/migrate/MigrationGenerator.js +82 -82
  69. package/lib/migrate/Migrator.js +611 -611
  70. package/lib/migrate/configuration-merger.js +60 -60
  71. package/lib/migrate/migrate-stub.js +17 -17
  72. package/lib/migrate/migration-list-resolver.js +36 -36
  73. package/lib/migrate/sources/fs-migrations.js +99 -99
  74. package/lib/migrate/stub/cjs.stub +15 -15
  75. package/lib/migrate/stub/coffee.stub +13 -13
  76. package/lib/migrate/stub/eg.stub +14 -14
  77. package/lib/migrate/stub/js.stub +15 -15
  78. package/lib/migrate/stub/knexfile-coffee.stub +34 -34
  79. package/lib/migrate/stub/knexfile-eg.stub +43 -43
  80. package/lib/migrate/stub/knexfile-js.stub +44 -44
  81. package/lib/migrate/stub/knexfile-ls.stub +35 -35
  82. package/lib/migrate/stub/knexfile-ts.stub +44 -44
  83. package/lib/migrate/stub/ls.stub +14 -14
  84. package/lib/migrate/stub/ts.stub +21 -21
  85. package/lib/migrate/table-creator.js +67 -67
  86. package/lib/migrate/table-resolver.js +27 -27
  87. package/lib/query/builder.js +1372 -1372
  88. package/lib/query/compiler.js +889 -889
  89. package/lib/query/constants.js +13 -13
  90. package/lib/query/joinclause.js +263 -263
  91. package/lib/query/methods.js +92 -92
  92. package/lib/query/string.js +190 -190
  93. package/lib/raw.js +188 -188
  94. package/lib/ref.js +39 -39
  95. package/lib/runner.js +285 -285
  96. package/lib/schema/builder.js +82 -82
  97. package/lib/schema/columnbuilder.js +117 -117
  98. package/lib/schema/columncompiler.js +177 -177
  99. package/lib/schema/compiler.js +101 -101
  100. package/lib/schema/helpers.js +51 -51
  101. package/lib/schema/tablebuilder.js +288 -288
  102. package/lib/schema/tablecompiler.js +296 -296
  103. package/lib/seed/Seeder.js +203 -203
  104. package/lib/seed/seed-stub.js +13 -13
  105. package/lib/seed/stub/coffee.stub +9 -9
  106. package/lib/seed/stub/eg.stub +11 -11
  107. package/lib/seed/stub/js.stub +13 -13
  108. package/lib/seed/stub/ls.stub +11 -11
  109. package/lib/seed/stub/ts.stub +13 -13
  110. package/lib/transaction.js +363 -363
  111. package/lib/util/batchInsert.js +59 -59
  112. package/lib/util/delay.js +6 -6
  113. package/lib/util/fake-client.js +9 -9
  114. package/lib/util/finally-mixin.js +13 -13
  115. package/lib/util/fs.js +76 -76
  116. package/lib/util/import-file.js +13 -13
  117. package/lib/util/is-module-type.js +14 -14
  118. package/lib/util/is.js +32 -32
  119. package/lib/util/make-knex.js +338 -338
  120. package/lib/util/nanoid.js +29 -29
  121. package/lib/util/noop.js +1 -1
  122. package/lib/util/parse-connection.js +66 -66
  123. package/lib/util/save-async-stack.js +14 -14
  124. package/lib/util/template.js +52 -52
  125. package/lib/util/timeout.js +29 -29
  126. package/lib/util/timestamp.js +16 -16
  127. package/package.json +1 -1
  128. package/scripts/build.js +125 -125
  129. package/scripts/docker-compose.yml +111 -111
  130. package/scripts/next-release-howto.md +24 -24
  131. package/scripts/release.sh +34 -34
  132. package/scripts/runkit-example.js +34 -34
  133. package/scripts/stress-test/README.txt +18 -18
  134. package/scripts/stress-test/docker-compose.yml +47 -47
  135. package/scripts/stress-test/knex-stress-test.js +196 -196
  136. package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +145 -145
  137. package/scripts/stress-test/mysql2-sudden-exit-without-error.js +100 -100
  138. package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +184 -184
  139. package/types/index.d.ts +2249 -2249
  140. package/types/result.d.ts +27 -27
  141. package/types/tables.d.ts +4 -4
@@ -1,165 +1,165 @@
1
- /* eslint max-len:0 */
2
-
3
- const { inherits } = require('util');
4
- const utils = require('../utils');
5
- const TableCompiler = require('../../../schema/tablecompiler');
6
- const helpers = require('../../../helpers');
7
- const Trigger = require('./trigger');
8
-
9
- // Table Compiler
10
- // ------
11
-
12
- function TableCompiler_Oracle() {
13
- TableCompiler.apply(this, arguments);
14
- }
15
- inherits(TableCompiler_Oracle, TableCompiler);
16
-
17
- Object.assign(TableCompiler_Oracle.prototype, {
18
- addColumns(columns, prefix) {
19
- if (columns.sql.length > 0) {
20
- prefix = prefix || this.addColumnsPrefix;
21
-
22
- const columnSql = columns.sql;
23
- const alter = this.lowerCase ? 'alter table ' : 'ALTER TABLE ';
24
-
25
- let sql = `${alter}${this.tableName()} ${prefix}`;
26
- if (columns.sql.length > 1) {
27
- sql += `(${columnSql.join(', ')})`;
28
- } else {
29
- sql += columnSql.join(', ');
30
- }
31
-
32
- this.pushQuery({
33
- sql,
34
- bindings: columns.bindings,
35
- });
36
- }
37
- },
38
-
39
- // Compile a rename column command.
40
- renameColumn(from, to) {
41
- // Remove quotes around tableName
42
- const tableName = this.tableName().slice(1, -1);
43
- return this.pushQuery(
44
- Trigger.renameColumnTrigger(this.client.logger, tableName, from, to)
45
- );
46
- },
47
-
48
- compileAdd(builder) {
49
- const table = this.formatter.wrap(builder);
50
- const columns = this.prefixArray('add column', this.getColumns(builder));
51
- return this.pushQuery({
52
- sql: `alter table ${table} ${columns.join(', ')}`,
53
- });
54
- },
55
-
56
- // Adds the "create" query to the query sequence.
57
- createQuery(columns, ifNot) {
58
- const sql = `create table ${this.tableName()} (${columns.sql.join(', ')})`;
59
- this.pushQuery({
60
- // catch "name is already used by an existing object" for workaround for "if not exists"
61
- sql: ifNot ? utils.wrapSqlWithCatch(sql, -955) : sql,
62
- bindings: columns.bindings,
63
- });
64
- if (this.single.comment) this.comment(this.single.comment);
65
- },
66
-
67
- // Compiles the comment on the table.
68
- comment(comment) {
69
- this.pushQuery(`comment on table ${this.tableName()} is '${comment}'`);
70
- },
71
-
72
- addColumnsPrefix: 'add ',
73
-
74
- alterColumnsPrefix: 'modify ',
75
-
76
- dropColumn() {
77
- const columns = helpers.normalizeArr.apply(null, arguments);
78
- this.pushQuery(
79
- `alter table ${this.tableName()} drop (${this.formatter.columnize(
80
- columns
81
- )})`
82
- );
83
- },
84
-
85
- changeType() {
86
- // alter table + table + ' modify ' + wrapped + '// type';
87
- },
88
-
89
- _indexCommand(type, tableName, columns) {
90
- return this.formatter.wrap(
91
- utils.generateCombinedName(this.client.logger, type, tableName, columns)
92
- );
93
- },
94
-
95
- primary(columns, constraintName) {
96
- constraintName = constraintName
97
- ? this.formatter.wrap(constraintName)
98
- : this.formatter.wrap(`${this.tableNameRaw}_pkey`);
99
- this.pushQuery(
100
- `alter table ${this.tableName()} add constraint ${constraintName} primary key (${this.formatter.columnize(
101
- columns
102
- )})`
103
- );
104
- },
105
-
106
- dropPrimary(constraintName) {
107
- constraintName = constraintName
108
- ? this.formatter.wrap(constraintName)
109
- : this.formatter.wrap(this.tableNameRaw + '_pkey');
110
- this.pushQuery(
111
- `alter table ${this.tableName()} drop constraint ${constraintName}`
112
- );
113
- },
114
-
115
- index(columns, indexName) {
116
- indexName = indexName
117
- ? this.formatter.wrap(indexName)
118
- : this._indexCommand('index', this.tableNameRaw, columns);
119
- this.pushQuery(
120
- `create index ${indexName} on ${this.tableName()}` +
121
- ' (' +
122
- this.formatter.columnize(columns) +
123
- ')'
124
- );
125
- },
126
-
127
- dropIndex(columns, indexName) {
128
- indexName = indexName
129
- ? this.formatter.wrap(indexName)
130
- : this._indexCommand('index', this.tableNameRaw, columns);
131
- this.pushQuery(`drop index ${indexName}`);
132
- },
133
-
134
- unique(columns, indexName) {
135
- indexName = indexName
136
- ? this.formatter.wrap(indexName)
137
- : this._indexCommand('unique', this.tableNameRaw, columns);
138
- this.pushQuery(
139
- `alter table ${this.tableName()} add constraint ${indexName}` +
140
- ' unique (' +
141
- this.formatter.columnize(columns) +
142
- ')'
143
- );
144
- },
145
-
146
- dropUnique(columns, indexName) {
147
- indexName = indexName
148
- ? this.formatter.wrap(indexName)
149
- : this._indexCommand('unique', this.tableNameRaw, columns);
150
- this.pushQuery(
151
- `alter table ${this.tableName()} drop constraint ${indexName}`
152
- );
153
- },
154
-
155
- dropForeign(columns, indexName) {
156
- indexName = indexName
157
- ? this.formatter.wrap(indexName)
158
- : this._indexCommand('foreign', this.tableNameRaw, columns);
159
- this.pushQuery(
160
- `alter table ${this.tableName()} drop constraint ${indexName}`
161
- );
162
- },
163
- });
164
-
165
- module.exports = TableCompiler_Oracle;
1
+ /* eslint max-len:0 */
2
+
3
+ const { inherits } = require('util');
4
+ const utils = require('../utils');
5
+ const TableCompiler = require('../../../schema/tablecompiler');
6
+ const helpers = require('../../../helpers');
7
+ const Trigger = require('./trigger');
8
+
9
+ // Table Compiler
10
+ // ------
11
+
12
+ function TableCompiler_Oracle() {
13
+ TableCompiler.apply(this, arguments);
14
+ }
15
+ inherits(TableCompiler_Oracle, TableCompiler);
16
+
17
+ Object.assign(TableCompiler_Oracle.prototype, {
18
+ addColumns(columns, prefix) {
19
+ if (columns.sql.length > 0) {
20
+ prefix = prefix || this.addColumnsPrefix;
21
+
22
+ const columnSql = columns.sql;
23
+ const alter = this.lowerCase ? 'alter table ' : 'ALTER TABLE ';
24
+
25
+ let sql = `${alter}${this.tableName()} ${prefix}`;
26
+ if (columns.sql.length > 1) {
27
+ sql += `(${columnSql.join(', ')})`;
28
+ } else {
29
+ sql += columnSql.join(', ');
30
+ }
31
+
32
+ this.pushQuery({
33
+ sql,
34
+ bindings: columns.bindings,
35
+ });
36
+ }
37
+ },
38
+
39
+ // Compile a rename column command.
40
+ renameColumn(from, to) {
41
+ // Remove quotes around tableName
42
+ const tableName = this.tableName().slice(1, -1);
43
+ return this.pushQuery(
44
+ Trigger.renameColumnTrigger(this.client.logger, tableName, from, to)
45
+ );
46
+ },
47
+
48
+ compileAdd(builder) {
49
+ const table = this.formatter.wrap(builder);
50
+ const columns = this.prefixArray('add column', this.getColumns(builder));
51
+ return this.pushQuery({
52
+ sql: `alter table ${table} ${columns.join(', ')}`,
53
+ });
54
+ },
55
+
56
+ // Adds the "create" query to the query sequence.
57
+ createQuery(columns, ifNot) {
58
+ const sql = `create table ${this.tableName()} (${columns.sql.join(', ')})`;
59
+ this.pushQuery({
60
+ // catch "name is already used by an existing object" for workaround for "if not exists"
61
+ sql: ifNot ? utils.wrapSqlWithCatch(sql, -955) : sql,
62
+ bindings: columns.bindings,
63
+ });
64
+ if (this.single.comment) this.comment(this.single.comment);
65
+ },
66
+
67
+ // Compiles the comment on the table.
68
+ comment(comment) {
69
+ this.pushQuery(`comment on table ${this.tableName()} is '${comment}'`);
70
+ },
71
+
72
+ addColumnsPrefix: 'add ',
73
+
74
+ alterColumnsPrefix: 'modify ',
75
+
76
+ dropColumn() {
77
+ const columns = helpers.normalizeArr.apply(null, arguments);
78
+ this.pushQuery(
79
+ `alter table ${this.tableName()} drop (${this.formatter.columnize(
80
+ columns
81
+ )})`
82
+ );
83
+ },
84
+
85
+ changeType() {
86
+ // alter table + table + ' modify ' + wrapped + '// type';
87
+ },
88
+
89
+ _indexCommand(type, tableName, columns) {
90
+ return this.formatter.wrap(
91
+ utils.generateCombinedName(this.client.logger, type, tableName, columns)
92
+ );
93
+ },
94
+
95
+ primary(columns, constraintName) {
96
+ constraintName = constraintName
97
+ ? this.formatter.wrap(constraintName)
98
+ : this.formatter.wrap(`${this.tableNameRaw}_pkey`);
99
+ this.pushQuery(
100
+ `alter table ${this.tableName()} add constraint ${constraintName} primary key (${this.formatter.columnize(
101
+ columns
102
+ )})`
103
+ );
104
+ },
105
+
106
+ dropPrimary(constraintName) {
107
+ constraintName = constraintName
108
+ ? this.formatter.wrap(constraintName)
109
+ : this.formatter.wrap(this.tableNameRaw + '_pkey');
110
+ this.pushQuery(
111
+ `alter table ${this.tableName()} drop constraint ${constraintName}`
112
+ );
113
+ },
114
+
115
+ index(columns, indexName) {
116
+ indexName = indexName
117
+ ? this.formatter.wrap(indexName)
118
+ : this._indexCommand('index', this.tableNameRaw, columns);
119
+ this.pushQuery(
120
+ `create index ${indexName} on ${this.tableName()}` +
121
+ ' (' +
122
+ this.formatter.columnize(columns) +
123
+ ')'
124
+ );
125
+ },
126
+
127
+ dropIndex(columns, indexName) {
128
+ indexName = indexName
129
+ ? this.formatter.wrap(indexName)
130
+ : this._indexCommand('index', this.tableNameRaw, columns);
131
+ this.pushQuery(`drop index ${indexName}`);
132
+ },
133
+
134
+ unique(columns, indexName) {
135
+ indexName = indexName
136
+ ? this.formatter.wrap(indexName)
137
+ : this._indexCommand('unique', this.tableNameRaw, columns);
138
+ this.pushQuery(
139
+ `alter table ${this.tableName()} add constraint ${indexName}` +
140
+ ' unique (' +
141
+ this.formatter.columnize(columns) +
142
+ ')'
143
+ );
144
+ },
145
+
146
+ dropUnique(columns, indexName) {
147
+ indexName = indexName
148
+ ? this.formatter.wrap(indexName)
149
+ : this._indexCommand('unique', this.tableNameRaw, columns);
150
+ this.pushQuery(
151
+ `alter table ${this.tableName()} drop constraint ${indexName}`
152
+ );
153
+ },
154
+
155
+ dropForeign(columns, indexName) {
156
+ indexName = indexName
157
+ ? this.formatter.wrap(indexName)
158
+ : this._indexCommand('foreign', this.tableNameRaw, columns);
159
+ this.pushQuery(
160
+ `alter table ${this.tableName()} drop constraint ${indexName}`
161
+ );
162
+ },
163
+ });
164
+
165
+ module.exports = TableCompiler_Oracle;
@@ -1,126 +1,126 @@
1
- const utils = require('../utils');
2
-
3
- const trigger = {
4
- renameColumnTrigger: function (logger, tableName, columnName, to) {
5
- const triggerName = utils.generateCombinedName(
6
- logger,
7
- 'autoinc_trg',
8
- tableName
9
- );
10
- const sequenceName = utils.generateCombinedName(logger, 'seq', tableName);
11
- return (
12
- `DECLARE ` +
13
- `PK_NAME VARCHAR(200); ` +
14
- `IS_AUTOINC NUMBER := 0; ` +
15
- `BEGIN` +
16
- ` EXECUTE IMMEDIATE ('ALTER TABLE "${tableName}" RENAME COLUMN "${columnName}" TO "${to}"');` +
17
- ` SELECT COUNT(*) INTO IS_AUTOINC from "USER_TRIGGERS" where trigger_name = '${triggerName}';` +
18
- ` IF (IS_AUTOINC > 0) THEN` +
19
- ` SELECT cols.column_name INTO PK_NAME` +
20
- ` FROM all_constraints cons, all_cons_columns cols` +
21
- ` WHERE cons.constraint_type = 'P'` +
22
- ` AND cons.constraint_name = cols.constraint_name` +
23
- ` AND cons.owner = cols.owner` +
24
- ` AND cols.table_name = '${tableName}';` +
25
- ` IF ('${to}' = PK_NAME) THEN` +
26
- ` EXECUTE IMMEDIATE ('DROP TRIGGER "${triggerName}"');` +
27
- ` EXECUTE IMMEDIATE ('create or replace trigger "${triggerName}"` +
28
- ` BEFORE INSERT on "${tableName}" for each row` +
29
- ` declare` +
30
- ` checking number := 1;` +
31
- ` begin` +
32
- ` if (:new."${to}" is null) then` +
33
- ` while checking >= 1 loop` +
34
- ` select "${sequenceName}".nextval into :new."${to}" from dual;` +
35
- ` select count("${to}") into checking from "${tableName}"` +
36
- ` where "${to}" = :new."${to}";` +
37
- ` end loop;` +
38
- ` end if;` +
39
- ` end;');` +
40
- ` end if;` +
41
- ` end if;` +
42
- `END;`
43
- );
44
- },
45
-
46
- createAutoIncrementTrigger: function (logger, tableName) {
47
- const triggerName = utils.generateCombinedName(
48
- logger,
49
- 'autoinc_trg',
50
- tableName
51
- );
52
- const sequenceName = utils.generateCombinedName(logger, 'seq', tableName);
53
- return (
54
- `DECLARE ` +
55
- `PK_NAME VARCHAR(200); ` +
56
- `BEGIN` +
57
- ` EXECUTE IMMEDIATE ('CREATE SEQUENCE "${sequenceName}"');` +
58
- ` SELECT cols.column_name INTO PK_NAME` +
59
- ` FROM all_constraints cons, all_cons_columns cols` +
60
- ` WHERE cons.constraint_type = 'P'` +
61
- ` AND cons.constraint_name = cols.constraint_name` +
62
- ` AND cons.owner = cols.owner` +
63
- ` AND cols.table_name = '${tableName}';` +
64
- ` execute immediate ('create or replace trigger "${triggerName}"` +
65
- ` BEFORE INSERT on "${tableName}"` +
66
- ` for each row` +
67
- ` declare` +
68
- ` checking number := 1;` +
69
- ` begin` +
70
- ` if (:new."' || PK_NAME || '" is null) then` +
71
- ` while checking >= 1 loop` +
72
- ` select "${sequenceName}".nextval into :new."' || PK_NAME || '" from dual;` +
73
- ` select count("' || PK_NAME || '") into checking from "${tableName}"` +
74
- ` where "' || PK_NAME || '" = :new."' || PK_NAME || '";` +
75
- ` end loop;` +
76
- ` end if;` +
77
- ` end;'); ` +
78
- `END;`
79
- );
80
- },
81
-
82
- renameTableAndAutoIncrementTrigger: function (logger, tableName, to) {
83
- const triggerName = utils.generateCombinedName(
84
- logger,
85
- 'autoinc_trg',
86
- tableName
87
- );
88
- const sequenceName = utils.generateCombinedName(logger, 'seq', tableName);
89
- const toTriggerName = utils.generateCombinedName(logger, 'autoinc_trg', to);
90
- const toSequenceName = utils.generateCombinedName(logger, 'seq', to);
91
- return (
92
- `DECLARE ` +
93
- `PK_NAME VARCHAR(200); ` +
94
- `IS_AUTOINC NUMBER := 0; ` +
95
- `BEGIN` +
96
- ` EXECUTE IMMEDIATE ('RENAME "${tableName}" TO "${to}"');` +
97
- ` SELECT COUNT(*) INTO IS_AUTOINC from "USER_TRIGGERS" where trigger_name = '${triggerName}';` +
98
- ` IF (IS_AUTOINC > 0) THEN` +
99
- ` EXECUTE IMMEDIATE ('DROP TRIGGER "${triggerName}"');` +
100
- ` EXECUTE IMMEDIATE ('RENAME "${sequenceName}" TO "${toSequenceName}"');` +
101
- ` SELECT cols.column_name INTO PK_NAME` +
102
- ` FROM all_constraints cons, all_cons_columns cols` +
103
- ` WHERE cons.constraint_type = 'P'` +
104
- ` AND cons.constraint_name = cols.constraint_name` +
105
- ` AND cons.owner = cols.owner` +
106
- ` AND cols.table_name = '${to}';` +
107
- ` EXECUTE IMMEDIATE ('create or replace trigger "${toTriggerName}"` +
108
- ` BEFORE INSERT on "${to}" for each row` +
109
- ` declare` +
110
- ` checking number := 1;` +
111
- ` begin` +
112
- ` if (:new."' || PK_NAME || '" is null) then` +
113
- ` while checking >= 1 loop` +
114
- ` select "${toSequenceName}".nextval into :new."' || PK_NAME || '" from dual;` +
115
- ` select count("' || PK_NAME || '") into checking from "${to}"` +
116
- ` where "' || PK_NAME || '" = :new."' || PK_NAME || '";` +
117
- ` end loop;` +
118
- ` end if;` +
119
- ` end;');` +
120
- ` end if;` +
121
- `END;`
122
- );
123
- },
124
- };
125
-
126
- module.exports = trigger;
1
+ const utils = require('../utils');
2
+
3
+ const trigger = {
4
+ renameColumnTrigger: function (logger, tableName, columnName, to) {
5
+ const triggerName = utils.generateCombinedName(
6
+ logger,
7
+ 'autoinc_trg',
8
+ tableName
9
+ );
10
+ const sequenceName = utils.generateCombinedName(logger, 'seq', tableName);
11
+ return (
12
+ `DECLARE ` +
13
+ `PK_NAME VARCHAR(200); ` +
14
+ `IS_AUTOINC NUMBER := 0; ` +
15
+ `BEGIN` +
16
+ ` EXECUTE IMMEDIATE ('ALTER TABLE "${tableName}" RENAME COLUMN "${columnName}" TO "${to}"');` +
17
+ ` SELECT COUNT(*) INTO IS_AUTOINC from "USER_TRIGGERS" where trigger_name = '${triggerName}';` +
18
+ ` IF (IS_AUTOINC > 0) THEN` +
19
+ ` SELECT cols.column_name INTO PK_NAME` +
20
+ ` FROM all_constraints cons, all_cons_columns cols` +
21
+ ` WHERE cons.constraint_type = 'P'` +
22
+ ` AND cons.constraint_name = cols.constraint_name` +
23
+ ` AND cons.owner = cols.owner` +
24
+ ` AND cols.table_name = '${tableName}';` +
25
+ ` IF ('${to}' = PK_NAME) THEN` +
26
+ ` EXECUTE IMMEDIATE ('DROP TRIGGER "${triggerName}"');` +
27
+ ` EXECUTE IMMEDIATE ('create or replace trigger "${triggerName}"` +
28
+ ` BEFORE INSERT on "${tableName}" for each row` +
29
+ ` declare` +
30
+ ` checking number := 1;` +
31
+ ` begin` +
32
+ ` if (:new."${to}" is null) then` +
33
+ ` while checking >= 1 loop` +
34
+ ` select "${sequenceName}".nextval into :new."${to}" from dual;` +
35
+ ` select count("${to}") into checking from "${tableName}"` +
36
+ ` where "${to}" = :new."${to}";` +
37
+ ` end loop;` +
38
+ ` end if;` +
39
+ ` end;');` +
40
+ ` end if;` +
41
+ ` end if;` +
42
+ `END;`
43
+ );
44
+ },
45
+
46
+ createAutoIncrementTrigger: function (logger, tableName) {
47
+ const triggerName = utils.generateCombinedName(
48
+ logger,
49
+ 'autoinc_trg',
50
+ tableName
51
+ );
52
+ const sequenceName = utils.generateCombinedName(logger, 'seq', tableName);
53
+ return (
54
+ `DECLARE ` +
55
+ `PK_NAME VARCHAR(200); ` +
56
+ `BEGIN` +
57
+ ` EXECUTE IMMEDIATE ('CREATE SEQUENCE "${sequenceName}"');` +
58
+ ` SELECT cols.column_name INTO PK_NAME` +
59
+ ` FROM all_constraints cons, all_cons_columns cols` +
60
+ ` WHERE cons.constraint_type = 'P'` +
61
+ ` AND cons.constraint_name = cols.constraint_name` +
62
+ ` AND cons.owner = cols.owner` +
63
+ ` AND cols.table_name = '${tableName}';` +
64
+ ` execute immediate ('create or replace trigger "${triggerName}"` +
65
+ ` BEFORE INSERT on "${tableName}"` +
66
+ ` for each row` +
67
+ ` declare` +
68
+ ` checking number := 1;` +
69
+ ` begin` +
70
+ ` if (:new."' || PK_NAME || '" is null) then` +
71
+ ` while checking >= 1 loop` +
72
+ ` select "${sequenceName}".nextval into :new."' || PK_NAME || '" from dual;` +
73
+ ` select count("' || PK_NAME || '") into checking from "${tableName}"` +
74
+ ` where "' || PK_NAME || '" = :new."' || PK_NAME || '";` +
75
+ ` end loop;` +
76
+ ` end if;` +
77
+ ` end;'); ` +
78
+ `END;`
79
+ );
80
+ },
81
+
82
+ renameTableAndAutoIncrementTrigger: function (logger, tableName, to) {
83
+ const triggerName = utils.generateCombinedName(
84
+ logger,
85
+ 'autoinc_trg',
86
+ tableName
87
+ );
88
+ const sequenceName = utils.generateCombinedName(logger, 'seq', tableName);
89
+ const toTriggerName = utils.generateCombinedName(logger, 'autoinc_trg', to);
90
+ const toSequenceName = utils.generateCombinedName(logger, 'seq', to);
91
+ return (
92
+ `DECLARE ` +
93
+ `PK_NAME VARCHAR(200); ` +
94
+ `IS_AUTOINC NUMBER := 0; ` +
95
+ `BEGIN` +
96
+ ` EXECUTE IMMEDIATE ('RENAME "${tableName}" TO "${to}"');` +
97
+ ` SELECT COUNT(*) INTO IS_AUTOINC from "USER_TRIGGERS" where trigger_name = '${triggerName}';` +
98
+ ` IF (IS_AUTOINC > 0) THEN` +
99
+ ` EXECUTE IMMEDIATE ('DROP TRIGGER "${triggerName}"');` +
100
+ ` EXECUTE IMMEDIATE ('RENAME "${sequenceName}" TO "${toSequenceName}"');` +
101
+ ` SELECT cols.column_name INTO PK_NAME` +
102
+ ` FROM all_constraints cons, all_cons_columns cols` +
103
+ ` WHERE cons.constraint_type = 'P'` +
104
+ ` AND cons.constraint_name = cols.constraint_name` +
105
+ ` AND cons.owner = cols.owner` +
106
+ ` AND cols.table_name = '${to}';` +
107
+ ` EXECUTE IMMEDIATE ('create or replace trigger "${toTriggerName}"` +
108
+ ` BEFORE INSERT on "${to}" for each row` +
109
+ ` declare` +
110
+ ` checking number := 1;` +
111
+ ` begin` +
112
+ ` if (:new."' || PK_NAME || '" is null) then` +
113
+ ` while checking >= 1 loop` +
114
+ ` select "${toSequenceName}".nextval into :new."' || PK_NAME || '" from dual;` +
115
+ ` select count("' || PK_NAME || '") into checking from "${to}"` +
116
+ ` where "' || PK_NAME || '" = :new."' || PK_NAME || '";` +
117
+ ` end loop;` +
118
+ ` end if;` +
119
+ ` end;');` +
120
+ ` end if;` +
121
+ `END;`
122
+ );
123
+ },
124
+ };
125
+
126
+ module.exports = trigger;