knex 2.4.1 → 2.4.2

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 (187) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/CONTRIBUTING.md +194 -194
  3. package/LICENSE +22 -22
  4. package/README.md +148 -148
  5. package/UPGRADING.md +233 -233
  6. package/bin/cli.js +473 -472
  7. package/bin/utils/cli-config-utils.js +210 -210
  8. package/bin/utils/constants.js +7 -7
  9. package/bin/utils/migrationsLister.js +37 -37
  10. package/knex.js +23 -23
  11. package/lib/builder-interface-augmenter.js +120 -120
  12. package/lib/client.js +475 -475
  13. package/lib/constants.js +61 -61
  14. package/lib/dialects/better-sqlite3/index.js +72 -72
  15. package/lib/dialects/cockroachdb/crdb-columncompiler.js +14 -14
  16. package/lib/dialects/cockroachdb/crdb-querybuilder.js +11 -11
  17. package/lib/dialects/cockroachdb/crdb-querycompiler.js +122 -122
  18. package/lib/dialects/cockroachdb/crdb-tablecompiler.js +37 -37
  19. package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
  20. package/lib/dialects/cockroachdb/index.js +86 -86
  21. package/lib/dialects/mssql/index.js +495 -495
  22. package/lib/dialects/mssql/mssql-formatter.js +34 -34
  23. package/lib/dialects/mssql/query/mssql-querycompiler.js +600 -600
  24. package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
  25. package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
  26. package/lib/dialects/mssql/schema/mssql-tablecompiler.js +378 -378
  27. package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
  28. package/lib/dialects/mssql/transaction.js +176 -176
  29. package/lib/dialects/mysql/index.js +201 -201
  30. package/lib/dialects/mysql/query/mysql-querycompiler.js +274 -274
  31. package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
  32. package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
  33. package/lib/dialects/mysql/schema/mysql-tablecompiler.js +381 -381
  34. package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
  35. package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
  36. package/lib/dialects/mysql/transaction.js +46 -46
  37. package/lib/dialects/mysql2/index.js +33 -33
  38. package/lib/dialects/mysql2/transaction.js +44 -44
  39. package/lib/dialects/oracle/DEAD_CODE.md +5 -5
  40. package/lib/dialects/oracle/index.js +92 -92
  41. package/lib/dialects/oracle/query/oracle-querycompiler.js +342 -342
  42. package/lib/dialects/oracle/schema/internal/incrementUtils.js +20 -20
  43. package/lib/dialects/oracle/schema/internal/trigger.js +135 -135
  44. package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
  45. package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
  46. package/lib/dialects/oracle/schema/oracle-compiler.js +122 -122
  47. package/lib/dialects/oracle/schema/oracle-tablecompiler.js +190 -190
  48. package/lib/dialects/oracle/utils.js +87 -87
  49. package/lib/dialects/oracledb/index.js +327 -327
  50. package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
  51. package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +55 -55
  52. package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
  53. package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
  54. package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
  55. package/lib/dialects/oracledb/transaction.js +98 -98
  56. package/lib/dialects/oracledb/utils.js +208 -208
  57. package/lib/dialects/pgnative/index.js +60 -60
  58. package/lib/dialects/postgres/execution/pg-transaction.js +12 -12
  59. package/lib/dialects/postgres/index.js +358 -358
  60. package/lib/dialects/postgres/query/pg-querybuilder.js +38 -38
  61. package/lib/dialects/postgres/query/pg-querycompiler.js +395 -395
  62. package/lib/dialects/postgres/schema/pg-columncompiler.js +156 -156
  63. package/lib/dialects/postgres/schema/pg-compiler.js +138 -136
  64. package/lib/dialects/postgres/schema/pg-tablecompiler.js +299 -299
  65. package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
  66. package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
  67. package/lib/dialects/redshift/index.js +86 -86
  68. package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
  69. package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
  70. package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
  71. package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
  72. package/lib/dialects/redshift/schema/redshift-tablecompiler.js +122 -122
  73. package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
  74. package/lib/dialects/redshift/transaction.js +25 -25
  75. package/lib/dialects/sqlite3/execution/sqlite-transaction.js +18 -18
  76. package/lib/dialects/sqlite3/index.js +250 -250
  77. package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
  78. package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +334 -334
  79. package/lib/dialects/sqlite3/schema/ddl.js +400 -400
  80. package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
  81. package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
  82. package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
  83. package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
  84. package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
  85. package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
  86. package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
  87. package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
  88. package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +347 -347
  89. package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
  90. package/lib/execution/batch-insert.js +51 -51
  91. package/lib/execution/internal/delay.js +6 -6
  92. package/lib/execution/internal/ensure-connection-callback.js +41 -41
  93. package/lib/execution/internal/query-executioner.js +62 -62
  94. package/lib/execution/runner.js +307 -307
  95. package/lib/execution/transaction.js +401 -401
  96. package/lib/formatter/formatterUtils.js +42 -42
  97. package/lib/formatter/rawFormatter.js +84 -84
  98. package/lib/formatter/wrappingFormatter.js +250 -250
  99. package/lib/formatter.js +25 -25
  100. package/lib/index.js +3 -3
  101. package/lib/knex-builder/FunctionHelper.js +54 -54
  102. package/lib/knex-builder/Knex.js +59 -59
  103. package/lib/knex-builder/internal/config-resolver.js +57 -57
  104. package/lib/knex-builder/internal/parse-connection.js +87 -87
  105. package/lib/knex-builder/make-knex.js +340 -340
  106. package/lib/logger.js +76 -76
  107. package/lib/migrations/common/MigrationsLoader.js +36 -36
  108. package/lib/migrations/migrate/MigrationGenerator.js +84 -82
  109. package/lib/migrations/migrate/Migrator.js +598 -598
  110. package/lib/migrations/migrate/migrate-stub.js +17 -17
  111. package/lib/migrations/migrate/migration-list-resolver.js +33 -33
  112. package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
  113. package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
  114. package/lib/migrations/migrate/stub/cjs.stub +15 -15
  115. package/lib/migrations/migrate/stub/coffee.stub +13 -13
  116. package/lib/migrations/migrate/stub/eg.stub +14 -14
  117. package/lib/migrations/migrate/stub/js-schema.stub +22 -22
  118. package/lib/migrations/migrate/stub/js.stub +22 -22
  119. package/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
  120. package/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
  121. package/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
  122. package/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
  123. package/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
  124. package/lib/migrations/migrate/stub/ls.stub +14 -14
  125. package/lib/migrations/migrate/stub/mjs.stub +23 -23
  126. package/lib/migrations/migrate/stub/ts-schema.stub +21 -21
  127. package/lib/migrations/migrate/stub/ts.stub +21 -21
  128. package/lib/migrations/migrate/table-creator.js +77 -77
  129. package/lib/migrations/migrate/table-resolver.js +27 -27
  130. package/lib/migrations/seed/Seeder.js +137 -137
  131. package/lib/migrations/seed/seed-stub.js +13 -13
  132. package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
  133. package/lib/migrations/seed/sources/fs-seeds.js +65 -65
  134. package/lib/migrations/seed/stub/coffee.stub +9 -9
  135. package/lib/migrations/seed/stub/eg.stub +11 -11
  136. package/lib/migrations/seed/stub/js.stub +13 -13
  137. package/lib/migrations/seed/stub/ls.stub +11 -11
  138. package/lib/migrations/seed/stub/mjs.stub +12 -12
  139. package/lib/migrations/seed/stub/ts.stub +13 -13
  140. package/lib/migrations/util/fs.js +86 -86
  141. package/lib/migrations/util/import-file.js +12 -12
  142. package/lib/migrations/util/is-module-type.js +9 -9
  143. package/lib/migrations/util/template.js +52 -52
  144. package/lib/migrations/util/timestamp.js +14 -14
  145. package/lib/query/analytic.js +52 -52
  146. package/lib/query/constants.js +15 -15
  147. package/lib/query/joinclause.js +270 -270
  148. package/lib/query/method-constants.js +135 -135
  149. package/lib/query/querybuilder.js +1794 -1794
  150. package/lib/query/querycompiler.js +1580 -1580
  151. package/lib/raw.js +139 -139
  152. package/lib/ref.js +39 -39
  153. package/lib/schema/builder.js +115 -114
  154. package/lib/schema/columnbuilder.js +146 -145
  155. package/lib/schema/columncompiler.js +307 -307
  156. package/lib/schema/compiler.js +187 -187
  157. package/lib/schema/internal/helpers.js +55 -55
  158. package/lib/schema/tablebuilder.js +376 -375
  159. package/lib/schema/tablecompiler.js +433 -433
  160. package/lib/schema/viewbuilder.js +92 -93
  161. package/lib/schema/viewcompiler.js +138 -138
  162. package/lib/util/finally-mixin.js +13 -13
  163. package/lib/util/helpers.js +95 -95
  164. package/lib/util/is.js +32 -32
  165. package/lib/util/nanoid.js +40 -40
  166. package/lib/util/noop.js +1 -1
  167. package/lib/util/save-async-stack.js +14 -14
  168. package/lib/util/string.js +190 -190
  169. package/lib/util/timeout.js +29 -29
  170. package/package.json +8 -6
  171. package/scripts/build.js +125 -125
  172. package/scripts/clean.js +31 -29
  173. package/scripts/docker-compose.yml +152 -152
  174. package/scripts/next-release-howto.md +24 -24
  175. package/scripts/oracledb-install-driver-libs.sh +82 -82
  176. package/scripts/release.sh +34 -34
  177. package/scripts/runkit-example.js +34 -34
  178. package/scripts/stress-test/README.txt +18 -18
  179. package/scripts/stress-test/docker-compose.yml +57 -57
  180. package/scripts/stress-test/knex-stress-test.js +208 -208
  181. package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +145 -145
  182. package/scripts/stress-test/mysql2-sudden-exit-without-error.js +100 -100
  183. package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +184 -184
  184. package/scripts/update_gitignore_for_tsc_output.js +90 -86
  185. package/types/index.d.ts +3233 -3233
  186. package/types/result.d.ts +27 -27
  187. package/types/tables.d.ts +4 -4
@@ -1,122 +1,122 @@
1
- // Oracle Schema Compiler
2
- // -------
3
- const SchemaCompiler = require('../../../schema/compiler');
4
- const utils = require('../utils');
5
- const Trigger = require('./internal/trigger');
6
-
7
- class SchemaCompiler_Oracle extends SchemaCompiler {
8
- constructor() {
9
- super(...arguments);
10
- }
11
-
12
- // Rename a table on the schema.
13
- renameTable(tableName, to) {
14
- const renameTable = Trigger.renameTableAndAutoIncrementTrigger(
15
- this.client.logger,
16
- tableName,
17
- to
18
- );
19
- this.pushQuery(renameTable);
20
- }
21
-
22
- // Check whether a table exists on the query.
23
- hasTable(tableName) {
24
- this.pushQuery({
25
- sql:
26
- 'select TABLE_NAME from USER_TABLES where TABLE_NAME = ' +
27
- this.client.parameter(tableName, this.builder, this.bindingsHolder),
28
- output(resp) {
29
- return resp.length > 0;
30
- },
31
- });
32
- }
33
-
34
- // Check whether a column exists on the schema.
35
- hasColumn(tableName, column) {
36
- const sql =
37
- `select COLUMN_NAME from ALL_TAB_COLUMNS ` +
38
- `where TABLE_NAME = ${this.client.parameter(
39
- tableName,
40
- this.builder,
41
- this.bindingsHolder
42
- )} ` +
43
- `and COLUMN_NAME = ${this.client.parameter(
44
- column,
45
- this.builder,
46
- this.bindingsHolder
47
- )}`;
48
- this.pushQuery({ sql, output: (resp) => resp.length > 0 });
49
- }
50
-
51
- dropSequenceIfExists(sequenceName) {
52
- const prefix = this.schema ? `"${this.schema}".` : '';
53
- this.pushQuery(
54
- utils.wrapSqlWithCatch(
55
- `drop sequence ${prefix}${this.formatter.wrap(sequenceName)}`,
56
- -2289
57
- )
58
- );
59
- }
60
-
61
- _dropRelatedSequenceIfExists(tableName) {
62
- // removing the sequence that was possibly generated by increments() column
63
- const sequenceName = utils.generateCombinedName(
64
- this.client.logger,
65
- 'seq',
66
- tableName
67
- );
68
- this.dropSequenceIfExists(sequenceName);
69
- }
70
-
71
- dropTable(tableName) {
72
- const prefix = this.schema ? `"${this.schema}".` : '';
73
- this.pushQuery(`drop table ${prefix}${this.formatter.wrap(tableName)}`);
74
-
75
- // removing the sequence that was possibly generated by increments() column
76
- this._dropRelatedSequenceIfExists(tableName);
77
- }
78
-
79
- dropTableIfExists(tableName) {
80
- this.dropObject(tableName, 'table');
81
- }
82
-
83
- dropViewIfExists(viewName) {
84
- this.dropObject(viewName, 'view');
85
- }
86
-
87
- dropObject(objectName, type) {
88
- const prefix = this.schema ? `"${this.schema}".` : '';
89
- let errorCode = -942;
90
- if (type === 'materialized view') {
91
- // https://stackoverflow.com/a/1801453
92
- errorCode = -12003;
93
- }
94
- this.pushQuery(
95
- utils.wrapSqlWithCatch(
96
- `drop ${type} ${prefix}${this.formatter.wrap(objectName)}`,
97
- errorCode
98
- )
99
- );
100
-
101
- // removing the sequence that was possibly generated by increments() column
102
- this._dropRelatedSequenceIfExists(objectName);
103
- }
104
-
105
- refreshMaterializedView(viewName) {
106
- return this.pushQuery({
107
- sql: `BEGIN DBMS_MVIEW.REFRESH('${
108
- this.schemaNameRaw ? this.schemaNameRaw + '.' : ''
109
- }${viewName}'); END;`,
110
- });
111
- }
112
-
113
- dropMaterializedView(viewName) {
114
- this._dropView(viewName, false, true);
115
- }
116
-
117
- dropMaterializedViewIfExists(viewName) {
118
- this.dropObject(viewName, 'materialized view');
119
- }
120
- }
121
-
122
- module.exports = SchemaCompiler_Oracle;
1
+ // Oracle Schema Compiler
2
+ // -------
3
+ const SchemaCompiler = require('../../../schema/compiler');
4
+ const utils = require('../utils');
5
+ const Trigger = require('./internal/trigger');
6
+
7
+ class SchemaCompiler_Oracle extends SchemaCompiler {
8
+ constructor() {
9
+ super(...arguments);
10
+ }
11
+
12
+ // Rename a table on the schema.
13
+ renameTable(tableName, to) {
14
+ const renameTable = Trigger.renameTableAndAutoIncrementTrigger(
15
+ this.client.logger,
16
+ tableName,
17
+ to
18
+ );
19
+ this.pushQuery(renameTable);
20
+ }
21
+
22
+ // Check whether a table exists on the query.
23
+ hasTable(tableName) {
24
+ this.pushQuery({
25
+ sql:
26
+ 'select TABLE_NAME from USER_TABLES where TABLE_NAME = ' +
27
+ this.client.parameter(tableName, this.builder, this.bindingsHolder),
28
+ output(resp) {
29
+ return resp.length > 0;
30
+ },
31
+ });
32
+ }
33
+
34
+ // Check whether a column exists on the schema.
35
+ hasColumn(tableName, column) {
36
+ const sql =
37
+ `select COLUMN_NAME from ALL_TAB_COLUMNS ` +
38
+ `where TABLE_NAME = ${this.client.parameter(
39
+ tableName,
40
+ this.builder,
41
+ this.bindingsHolder
42
+ )} ` +
43
+ `and COLUMN_NAME = ${this.client.parameter(
44
+ column,
45
+ this.builder,
46
+ this.bindingsHolder
47
+ )}`;
48
+ this.pushQuery({ sql, output: (resp) => resp.length > 0 });
49
+ }
50
+
51
+ dropSequenceIfExists(sequenceName) {
52
+ const prefix = this.schema ? `"${this.schema}".` : '';
53
+ this.pushQuery(
54
+ utils.wrapSqlWithCatch(
55
+ `drop sequence ${prefix}${this.formatter.wrap(sequenceName)}`,
56
+ -2289
57
+ )
58
+ );
59
+ }
60
+
61
+ _dropRelatedSequenceIfExists(tableName) {
62
+ // removing the sequence that was possibly generated by increments() column
63
+ const sequenceName = utils.generateCombinedName(
64
+ this.client.logger,
65
+ 'seq',
66
+ tableName
67
+ );
68
+ this.dropSequenceIfExists(sequenceName);
69
+ }
70
+
71
+ dropTable(tableName) {
72
+ const prefix = this.schema ? `"${this.schema}".` : '';
73
+ this.pushQuery(`drop table ${prefix}${this.formatter.wrap(tableName)}`);
74
+
75
+ // removing the sequence that was possibly generated by increments() column
76
+ this._dropRelatedSequenceIfExists(tableName);
77
+ }
78
+
79
+ dropTableIfExists(tableName) {
80
+ this.dropObject(tableName, 'table');
81
+ }
82
+
83
+ dropViewIfExists(viewName) {
84
+ this.dropObject(viewName, 'view');
85
+ }
86
+
87
+ dropObject(objectName, type) {
88
+ const prefix = this.schema ? `"${this.schema}".` : '';
89
+ let errorCode = -942;
90
+ if (type === 'materialized view') {
91
+ // https://stackoverflow.com/a/1801453
92
+ errorCode = -12003;
93
+ }
94
+ this.pushQuery(
95
+ utils.wrapSqlWithCatch(
96
+ `drop ${type} ${prefix}${this.formatter.wrap(objectName)}`,
97
+ errorCode
98
+ )
99
+ );
100
+
101
+ // removing the sequence that was possibly generated by increments() column
102
+ this._dropRelatedSequenceIfExists(objectName);
103
+ }
104
+
105
+ refreshMaterializedView(viewName) {
106
+ return this.pushQuery({
107
+ sql: `BEGIN DBMS_MVIEW.REFRESH('${
108
+ this.schemaNameRaw ? this.schemaNameRaw + '.' : ''
109
+ }${viewName}'); END;`,
110
+ });
111
+ }
112
+
113
+ dropMaterializedView(viewName) {
114
+ this._dropView(viewName, false, true);
115
+ }
116
+
117
+ dropMaterializedViewIfExists(viewName) {
118
+ this.dropObject(viewName, 'materialized view');
119
+ }
120
+ }
121
+
122
+ module.exports = SchemaCompiler_Oracle;
@@ -1,190 +1,190 @@
1
- /* eslint max-len:0 */
2
-
3
- const utils = require('../utils');
4
- const TableCompiler = require('../../../schema/tablecompiler');
5
- const helpers = require('../../../util/helpers');
6
- const Trigger = require('./internal/trigger');
7
- const { isObject } = require('../../../util/is');
8
-
9
- // Table Compiler
10
- // ------
11
-
12
- class TableCompiler_Oracle extends TableCompiler {
13
- constructor() {
14
- super(...arguments);
15
- }
16
-
17
- addColumns(columns, prefix) {
18
- if (columns.sql.length > 0) {
19
- prefix = prefix || this.addColumnsPrefix;
20
-
21
- const columnSql = columns.sql;
22
- const alter = this.lowerCase ? 'alter table ' : 'ALTER TABLE ';
23
-
24
- let sql = `${alter}${this.tableName()} ${prefix}`;
25
- if (columns.sql.length > 1) {
26
- sql += `(${columnSql.join(', ')})`;
27
- } else {
28
- sql += columnSql.join(', ');
29
- }
30
-
31
- this.pushQuery({
32
- sql,
33
- bindings: columns.bindings,
34
- });
35
- }
36
- }
37
-
38
- // Compile a rename column command.
39
- renameColumn(from, to) {
40
- // Remove quotes around tableName
41
- const tableName = this.tableName().slice(1, -1);
42
- return this.pushQuery(
43
- Trigger.renameColumnTrigger(this.client.logger, tableName, from, to)
44
- );
45
- }
46
-
47
- compileAdd(builder) {
48
- const table = this.formatter.wrap(builder);
49
- const columns = this.prefixArray('add column', this.getColumns(builder));
50
- return this.pushQuery({
51
- sql: `alter table ${table} ${columns.join(', ')}`,
52
- });
53
- }
54
-
55
- // Adds the "create" query to the query sequence.
56
- createQuery(columns, ifNot, like) {
57
- const columnsSql =
58
- like && this.tableNameLike()
59
- ? ' as (select * from ' + this.tableNameLike() + ' where 0=1)'
60
- : ' (' + columns.sql.join(', ') + this._addChecks() + ')';
61
- const sql = `create table ${this.tableName()}${columnsSql}`;
62
-
63
- this.pushQuery({
64
- // catch "name is already used by an existing object" for workaround for "if not exists"
65
- sql: ifNot ? utils.wrapSqlWithCatch(sql, -955) : sql,
66
- bindings: columns.bindings,
67
- });
68
- if (this.single.comment) this.comment(this.single.comment);
69
- if (like) {
70
- this.addColumns(columns, this.addColumnsPrefix);
71
- }
72
- }
73
-
74
- // Compiles the comment on the table.
75
- comment(comment) {
76
- this.pushQuery(`comment on table ${this.tableName()} is '${comment}'`);
77
- }
78
-
79
- dropColumn() {
80
- const columns = helpers.normalizeArr.apply(null, arguments);
81
- this.pushQuery(
82
- `alter table ${this.tableName()} drop (${this.formatter.columnize(
83
- columns
84
- )})`
85
- );
86
- }
87
-
88
- _indexCommand(type, tableName, columns) {
89
- return this.formatter.wrap(
90
- utils.generateCombinedName(this.client.logger, type, tableName, columns)
91
- );
92
- }
93
-
94
- primary(columns, constraintName) {
95
- let deferrable;
96
- if (isObject(constraintName)) {
97
- ({ constraintName, deferrable } = constraintName);
98
- }
99
- deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
100
- constraintName = constraintName
101
- ? this.formatter.wrap(constraintName)
102
- : this.formatter.wrap(`${this.tableNameRaw}_pkey`);
103
- const primaryCols = columns;
104
- let incrementsCols = [];
105
- if (this.grouped.columns) {
106
- incrementsCols = this._getIncrementsColumnNames();
107
- if (incrementsCols) {
108
- incrementsCols.forEach((c) => {
109
- if (!primaryCols.includes(c)) {
110
- primaryCols.unshift(c);
111
- }
112
- });
113
- }
114
- }
115
- this.pushQuery(
116
- `alter table ${this.tableName()} add constraint ${constraintName} primary key (${this.formatter.columnize(
117
- primaryCols
118
- )})${deferrable}`
119
- );
120
- }
121
-
122
- dropPrimary(constraintName) {
123
- constraintName = constraintName
124
- ? this.formatter.wrap(constraintName)
125
- : this.formatter.wrap(this.tableNameRaw + '_pkey');
126
- this.pushQuery(
127
- `alter table ${this.tableName()} drop constraint ${constraintName}`
128
- );
129
- }
130
-
131
- index(columns, indexName) {
132
- indexName = indexName
133
- ? this.formatter.wrap(indexName)
134
- : this._indexCommand('index', this.tableNameRaw, columns);
135
- this.pushQuery(
136
- `create index ${indexName} on ${this.tableName()}` +
137
- ' (' +
138
- this.formatter.columnize(columns) +
139
- ')'
140
- );
141
- }
142
-
143
- dropIndex(columns, indexName) {
144
- indexName = indexName
145
- ? this.formatter.wrap(indexName)
146
- : this._indexCommand('index', this.tableNameRaw, columns);
147
- this.pushQuery(`drop index ${indexName}`);
148
- }
149
-
150
- unique(columns, indexName) {
151
- let deferrable;
152
- if (isObject(indexName)) {
153
- ({ indexName, deferrable } = indexName);
154
- }
155
- deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
156
- indexName = indexName
157
- ? this.formatter.wrap(indexName)
158
- : this._indexCommand('unique', this.tableNameRaw, columns);
159
- this.pushQuery(
160
- `alter table ${this.tableName()} add constraint ${indexName}` +
161
- ' unique (' +
162
- this.formatter.columnize(columns) +
163
- ')' +
164
- deferrable
165
- );
166
- }
167
-
168
- dropUnique(columns, indexName) {
169
- indexName = indexName
170
- ? this.formatter.wrap(indexName)
171
- : this._indexCommand('unique', this.tableNameRaw, columns);
172
- this.pushQuery(
173
- `alter table ${this.tableName()} drop constraint ${indexName}`
174
- );
175
- }
176
-
177
- dropForeign(columns, indexName) {
178
- indexName = indexName
179
- ? this.formatter.wrap(indexName)
180
- : this._indexCommand('foreign', this.tableNameRaw, columns);
181
- this.pushQuery(
182
- `alter table ${this.tableName()} drop constraint ${indexName}`
183
- );
184
- }
185
- }
186
-
187
- TableCompiler_Oracle.prototype.addColumnsPrefix = 'add ';
188
- TableCompiler_Oracle.prototype.alterColumnsPrefix = 'modify ';
189
-
190
- module.exports = TableCompiler_Oracle;
1
+ /* eslint max-len:0 */
2
+
3
+ const utils = require('../utils');
4
+ const TableCompiler = require('../../../schema/tablecompiler');
5
+ const helpers = require('../../../util/helpers');
6
+ const Trigger = require('./internal/trigger');
7
+ const { isObject } = require('../../../util/is');
8
+
9
+ // Table Compiler
10
+ // ------
11
+
12
+ class TableCompiler_Oracle extends TableCompiler {
13
+ constructor() {
14
+ super(...arguments);
15
+ }
16
+
17
+ addColumns(columns, prefix) {
18
+ if (columns.sql.length > 0) {
19
+ prefix = prefix || this.addColumnsPrefix;
20
+
21
+ const columnSql = columns.sql;
22
+ const alter = this.lowerCase ? 'alter table ' : 'ALTER TABLE ';
23
+
24
+ let sql = `${alter}${this.tableName()} ${prefix}`;
25
+ if (columns.sql.length > 1) {
26
+ sql += `(${columnSql.join(', ')})`;
27
+ } else {
28
+ sql += columnSql.join(', ');
29
+ }
30
+
31
+ this.pushQuery({
32
+ sql,
33
+ bindings: columns.bindings,
34
+ });
35
+ }
36
+ }
37
+
38
+ // Compile a rename column command.
39
+ renameColumn(from, to) {
40
+ // Remove quotes around tableName
41
+ const tableName = this.tableName().slice(1, -1);
42
+ return this.pushQuery(
43
+ Trigger.renameColumnTrigger(this.client.logger, tableName, from, to)
44
+ );
45
+ }
46
+
47
+ compileAdd(builder) {
48
+ const table = this.formatter.wrap(builder);
49
+ const columns = this.prefixArray('add column', this.getColumns(builder));
50
+ return this.pushQuery({
51
+ sql: `alter table ${table} ${columns.join(', ')}`,
52
+ });
53
+ }
54
+
55
+ // Adds the "create" query to the query sequence.
56
+ createQuery(columns, ifNot, like) {
57
+ const columnsSql =
58
+ like && this.tableNameLike()
59
+ ? ' as (select * from ' + this.tableNameLike() + ' where 0=1)'
60
+ : ' (' + columns.sql.join(', ') + this._addChecks() + ')';
61
+ const sql = `create table ${this.tableName()}${columnsSql}`;
62
+
63
+ this.pushQuery({
64
+ // catch "name is already used by an existing object" for workaround for "if not exists"
65
+ sql: ifNot ? utils.wrapSqlWithCatch(sql, -955) : sql,
66
+ bindings: columns.bindings,
67
+ });
68
+ if (this.single.comment) this.comment(this.single.comment);
69
+ if (like) {
70
+ this.addColumns(columns, this.addColumnsPrefix);
71
+ }
72
+ }
73
+
74
+ // Compiles the comment on the table.
75
+ comment(comment) {
76
+ this.pushQuery(`comment on table ${this.tableName()} is '${comment}'`);
77
+ }
78
+
79
+ dropColumn() {
80
+ const columns = helpers.normalizeArr.apply(null, arguments);
81
+ this.pushQuery(
82
+ `alter table ${this.tableName()} drop (${this.formatter.columnize(
83
+ columns
84
+ )})`
85
+ );
86
+ }
87
+
88
+ _indexCommand(type, tableName, columns) {
89
+ return this.formatter.wrap(
90
+ utils.generateCombinedName(this.client.logger, type, tableName, columns)
91
+ );
92
+ }
93
+
94
+ primary(columns, constraintName) {
95
+ let deferrable;
96
+ if (isObject(constraintName)) {
97
+ ({ constraintName, deferrable } = constraintName);
98
+ }
99
+ deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
100
+ constraintName = constraintName
101
+ ? this.formatter.wrap(constraintName)
102
+ : this.formatter.wrap(`${this.tableNameRaw}_pkey`);
103
+ const primaryCols = columns;
104
+ let incrementsCols = [];
105
+ if (this.grouped.columns) {
106
+ incrementsCols = this._getIncrementsColumnNames();
107
+ if (incrementsCols) {
108
+ incrementsCols.forEach((c) => {
109
+ if (!primaryCols.includes(c)) {
110
+ primaryCols.unshift(c);
111
+ }
112
+ });
113
+ }
114
+ }
115
+ this.pushQuery(
116
+ `alter table ${this.tableName()} add constraint ${constraintName} primary key (${this.formatter.columnize(
117
+ primaryCols
118
+ )})${deferrable}`
119
+ );
120
+ }
121
+
122
+ dropPrimary(constraintName) {
123
+ constraintName = constraintName
124
+ ? this.formatter.wrap(constraintName)
125
+ : this.formatter.wrap(this.tableNameRaw + '_pkey');
126
+ this.pushQuery(
127
+ `alter table ${this.tableName()} drop constraint ${constraintName}`
128
+ );
129
+ }
130
+
131
+ index(columns, indexName) {
132
+ indexName = indexName
133
+ ? this.formatter.wrap(indexName)
134
+ : this._indexCommand('index', this.tableNameRaw, columns);
135
+ this.pushQuery(
136
+ `create index ${indexName} on ${this.tableName()}` +
137
+ ' (' +
138
+ this.formatter.columnize(columns) +
139
+ ')'
140
+ );
141
+ }
142
+
143
+ dropIndex(columns, indexName) {
144
+ indexName = indexName
145
+ ? this.formatter.wrap(indexName)
146
+ : this._indexCommand('index', this.tableNameRaw, columns);
147
+ this.pushQuery(`drop index ${indexName}`);
148
+ }
149
+
150
+ unique(columns, indexName) {
151
+ let deferrable;
152
+ if (isObject(indexName)) {
153
+ ({ indexName, deferrable } = indexName);
154
+ }
155
+ deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
156
+ indexName = indexName
157
+ ? this.formatter.wrap(indexName)
158
+ : this._indexCommand('unique', this.tableNameRaw, columns);
159
+ this.pushQuery(
160
+ `alter table ${this.tableName()} add constraint ${indexName}` +
161
+ ' unique (' +
162
+ this.formatter.columnize(columns) +
163
+ ')' +
164
+ deferrable
165
+ );
166
+ }
167
+
168
+ dropUnique(columns, indexName) {
169
+ indexName = indexName
170
+ ? this.formatter.wrap(indexName)
171
+ : this._indexCommand('unique', this.tableNameRaw, columns);
172
+ this.pushQuery(
173
+ `alter table ${this.tableName()} drop constraint ${indexName}`
174
+ );
175
+ }
176
+
177
+ dropForeign(columns, indexName) {
178
+ indexName = indexName
179
+ ? this.formatter.wrap(indexName)
180
+ : this._indexCommand('foreign', this.tableNameRaw, columns);
181
+ this.pushQuery(
182
+ `alter table ${this.tableName()} drop constraint ${indexName}`
183
+ );
184
+ }
185
+ }
186
+
187
+ TableCompiler_Oracle.prototype.addColumnsPrefix = 'add ';
188
+ TableCompiler_Oracle.prototype.alterColumnsPrefix = 'modify ';
189
+
190
+ module.exports = TableCompiler_Oracle;