knex 2.4.0 → 2.4.1

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 +472 -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 +136 -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 +82 -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 +114 -114
  154. package/lib/schema/columnbuilder.js +145 -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 +375 -375
  159. package/lib/schema/tablecompiler.js +433 -433
  160. package/lib/schema/viewbuilder.js +93 -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 +1 -1
  171. package/scripts/build.js +125 -125
  172. package/scripts/clean.js +29 -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 +86 -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,67 +1,67 @@
1
- // Redshift Column Compiler
2
- // -------
3
-
4
- const ColumnCompiler_PG = require('../../postgres/schema/pg-columncompiler');
5
- const ColumnCompiler = require('../../../schema/columncompiler');
6
-
7
- class ColumnCompiler_Redshift extends ColumnCompiler_PG {
8
- constructor() {
9
- super(...arguments);
10
- }
11
-
12
- // Types:
13
- // ------
14
-
15
- bit(column) {
16
- return column.length !== false ? `char(${column.length})` : 'char(1)';
17
- }
18
-
19
- datetime(without) {
20
- return without ? 'timestamp' : 'timestamptz';
21
- }
22
-
23
- timestamp(without) {
24
- return without ? 'timestamp' : 'timestamptz';
25
- }
26
-
27
- // Modifiers:
28
- // ------
29
- comment(comment) {
30
- this.pushAdditional(function () {
31
- this.pushQuery(
32
- `comment on column ${this.tableCompiler.tableName()}.` +
33
- this.formatter.wrap(this.args[0]) +
34
- ' is ' +
35
- (comment ? `'${comment}'` : 'NULL')
36
- );
37
- }, comment);
38
- }
39
- }
40
-
41
- ColumnCompiler_Redshift.prototype.increments = ({ primaryKey = true } = {}) =>
42
- 'integer identity(1,1)' + (primaryKey ? ' primary key' : '') + ' not null';
43
- ColumnCompiler_Redshift.prototype.bigincrements = ({
44
- primaryKey = true,
45
- } = {}) =>
46
- 'bigint identity(1,1)' + (primaryKey ? ' primary key' : '') + ' not null';
47
- ColumnCompiler_Redshift.prototype.binary = 'varchar(max)';
48
- ColumnCompiler_Redshift.prototype.blob = 'varchar(max)';
49
- ColumnCompiler_Redshift.prototype.enu = 'varchar(255)';
50
- ColumnCompiler_Redshift.prototype.enum = 'varchar(255)';
51
- ColumnCompiler_Redshift.prototype.json = 'varchar(max)';
52
- ColumnCompiler_Redshift.prototype.jsonb = 'varchar(max)';
53
- ColumnCompiler_Redshift.prototype.longblob = 'varchar(max)';
54
- ColumnCompiler_Redshift.prototype.mediumblob = 'varchar(16777218)';
55
- ColumnCompiler_Redshift.prototype.set = 'text';
56
- ColumnCompiler_Redshift.prototype.text = 'varchar(max)';
57
- ColumnCompiler_Redshift.prototype.tinyblob = 'varchar(256)';
58
- ColumnCompiler_Redshift.prototype.uuid = ColumnCompiler.prototype.uuid;
59
- ColumnCompiler_Redshift.prototype.varbinary = 'varchar(max)';
60
- ColumnCompiler_Redshift.prototype.bigint = 'bigint';
61
- ColumnCompiler_Redshift.prototype.bool = 'boolean';
62
- ColumnCompiler_Redshift.prototype.double = 'double precision';
63
- ColumnCompiler_Redshift.prototype.floating = 'real';
64
- ColumnCompiler_Redshift.prototype.smallint = 'smallint';
65
- ColumnCompiler_Redshift.prototype.tinyint = 'smallint';
66
-
67
- module.exports = ColumnCompiler_Redshift;
1
+ // Redshift Column Compiler
2
+ // -------
3
+
4
+ const ColumnCompiler_PG = require('../../postgres/schema/pg-columncompiler');
5
+ const ColumnCompiler = require('../../../schema/columncompiler');
6
+
7
+ class ColumnCompiler_Redshift extends ColumnCompiler_PG {
8
+ constructor() {
9
+ super(...arguments);
10
+ }
11
+
12
+ // Types:
13
+ // ------
14
+
15
+ bit(column) {
16
+ return column.length !== false ? `char(${column.length})` : 'char(1)';
17
+ }
18
+
19
+ datetime(without) {
20
+ return without ? 'timestamp' : 'timestamptz';
21
+ }
22
+
23
+ timestamp(without) {
24
+ return without ? 'timestamp' : 'timestamptz';
25
+ }
26
+
27
+ // Modifiers:
28
+ // ------
29
+ comment(comment) {
30
+ this.pushAdditional(function () {
31
+ this.pushQuery(
32
+ `comment on column ${this.tableCompiler.tableName()}.` +
33
+ this.formatter.wrap(this.args[0]) +
34
+ ' is ' +
35
+ (comment ? `'${comment}'` : 'NULL')
36
+ );
37
+ }, comment);
38
+ }
39
+ }
40
+
41
+ ColumnCompiler_Redshift.prototype.increments = ({ primaryKey = true } = {}) =>
42
+ 'integer identity(1,1)' + (primaryKey ? ' primary key' : '') + ' not null';
43
+ ColumnCompiler_Redshift.prototype.bigincrements = ({
44
+ primaryKey = true,
45
+ } = {}) =>
46
+ 'bigint identity(1,1)' + (primaryKey ? ' primary key' : '') + ' not null';
47
+ ColumnCompiler_Redshift.prototype.binary = 'varchar(max)';
48
+ ColumnCompiler_Redshift.prototype.blob = 'varchar(max)';
49
+ ColumnCompiler_Redshift.prototype.enu = 'varchar(255)';
50
+ ColumnCompiler_Redshift.prototype.enum = 'varchar(255)';
51
+ ColumnCompiler_Redshift.prototype.json = 'varchar(max)';
52
+ ColumnCompiler_Redshift.prototype.jsonb = 'varchar(max)';
53
+ ColumnCompiler_Redshift.prototype.longblob = 'varchar(max)';
54
+ ColumnCompiler_Redshift.prototype.mediumblob = 'varchar(16777218)';
55
+ ColumnCompiler_Redshift.prototype.set = 'text';
56
+ ColumnCompiler_Redshift.prototype.text = 'varchar(max)';
57
+ ColumnCompiler_Redshift.prototype.tinyblob = 'varchar(256)';
58
+ ColumnCompiler_Redshift.prototype.uuid = ColumnCompiler.prototype.uuid;
59
+ ColumnCompiler_Redshift.prototype.varbinary = 'varchar(max)';
60
+ ColumnCompiler_Redshift.prototype.bigint = 'bigint';
61
+ ColumnCompiler_Redshift.prototype.bool = 'boolean';
62
+ ColumnCompiler_Redshift.prototype.double = 'double precision';
63
+ ColumnCompiler_Redshift.prototype.floating = 'real';
64
+ ColumnCompiler_Redshift.prototype.smallint = 'smallint';
65
+ ColumnCompiler_Redshift.prototype.tinyint = 'smallint';
66
+
67
+ module.exports = ColumnCompiler_Redshift;
@@ -1,14 +1,14 @@
1
- /* eslint max-len: 0 */
2
-
3
- // Redshift Table Builder & Compiler
4
- // -------
5
-
6
- const SchemaCompiler_PG = require('../../postgres/schema/pg-compiler');
7
-
8
- class SchemaCompiler_Redshift extends SchemaCompiler_PG {
9
- constructor() {
10
- super(...arguments);
11
- }
12
- }
13
-
14
- module.exports = SchemaCompiler_Redshift;
1
+ /* eslint max-len: 0 */
2
+
3
+ // Redshift Table Builder & Compiler
4
+ // -------
5
+
6
+ const SchemaCompiler_PG = require('../../postgres/schema/pg-compiler');
7
+
8
+ class SchemaCompiler_Redshift extends SchemaCompiler_PG {
9
+ constructor() {
10
+ super(...arguments);
11
+ }
12
+ }
13
+
14
+ module.exports = SchemaCompiler_Redshift;
@@ -1,122 +1,122 @@
1
- /* eslint max-len: 0 */
2
-
3
- // Redshift Table Builder & Compiler
4
- // -------
5
-
6
- const has = require('lodash/has');
7
- const TableCompiler_PG = require('../../postgres/schema/pg-tablecompiler');
8
-
9
- class TableCompiler_Redshift extends TableCompiler_PG {
10
- constructor() {
11
- super(...arguments);
12
- }
13
-
14
- index(columns, indexName, options) {
15
- this.client.logger.warn(
16
- 'Redshift does not support the creation of indexes.'
17
- );
18
- }
19
-
20
- dropIndex(columns, indexName) {
21
- this.client.logger.warn(
22
- 'Redshift does not support the deletion of indexes.'
23
- );
24
- }
25
-
26
- // TODO: have to disable setting not null on columns that already exist...
27
-
28
- // Adds the "create" query to the query sequence.
29
- createQuery(columns, ifNot, like) {
30
- const createStatement = ifNot
31
- ? 'create table if not exists '
32
- : 'create table ';
33
- const columnsSql = ' (' + columns.sql.join(', ') + this._addChecks() + ')';
34
- let sql =
35
- createStatement +
36
- this.tableName() +
37
- (like && this.tableNameLike()
38
- ? ' (like ' + this.tableNameLike() + ')'
39
- : columnsSql);
40
- if (this.single.inherits)
41
- sql += ` like (${this.formatter.wrap(this.single.inherits)})`;
42
- this.pushQuery({
43
- sql,
44
- bindings: columns.bindings,
45
- });
46
- const hasComment = has(this.single, 'comment');
47
- if (hasComment) this.comment(this.single.comment);
48
- if (like) {
49
- this.addColumns(columns, this.addColumnsPrefix);
50
- }
51
- }
52
-
53
- primary(columns, constraintName) {
54
- const self = this;
55
- constraintName = constraintName
56
- ? self.formatter.wrap(constraintName)
57
- : self.formatter.wrap(`${this.tableNameRaw}_pkey`);
58
- if (columns.constructor !== Array) {
59
- columns = [columns];
60
- }
61
- const thiscolumns = self.grouped.columns;
62
-
63
- if (thiscolumns) {
64
- for (let i = 0; i < columns.length; i++) {
65
- let exists = thiscolumns.find(
66
- (tcb) =>
67
- tcb.grouping === 'columns' &&
68
- tcb.builder &&
69
- tcb.builder._method === 'add' &&
70
- tcb.builder._args &&
71
- tcb.builder._args.indexOf(columns[i]) > -1
72
- );
73
- if (exists) {
74
- exists = exists.builder;
75
- }
76
- const nullable = !(
77
- exists &&
78
- exists._modifiers &&
79
- exists._modifiers['nullable'] &&
80
- exists._modifiers['nullable'][0] === false
81
- );
82
- if (nullable) {
83
- if (exists) {
84
- return this.client.logger.warn(
85
- 'Redshift does not allow primary keys to contain nullable columns.'
86
- );
87
- } else {
88
- return this.client.logger.warn(
89
- 'Redshift does not allow primary keys to contain nonexistent columns.'
90
- );
91
- }
92
- }
93
- }
94
- }
95
- return self.pushQuery(
96
- `alter table ${self.tableName()} add constraint ${constraintName} primary key (${self.formatter.columnize(
97
- columns
98
- )})`
99
- );
100
- }
101
-
102
- // Compiles column add. Redshift can only add one column per ALTER TABLE, so core addColumns doesn't work. #2545
103
- addColumns(columns, prefix, colCompilers) {
104
- if (prefix === this.alterColumnsPrefix) {
105
- super.addColumns(columns, prefix, colCompilers);
106
- } else {
107
- prefix = prefix || this.addColumnsPrefix;
108
- colCompilers = colCompilers || this.getColumns();
109
- for (const col of colCompilers) {
110
- const quotedTableName = this.tableName();
111
- const colCompiled = col.compileColumn();
112
-
113
- this.pushQuery({
114
- sql: `alter table ${quotedTableName} ${prefix}${colCompiled}`,
115
- bindings: [],
116
- });
117
- }
118
- }
119
- }
120
- }
121
-
122
- module.exports = TableCompiler_Redshift;
1
+ /* eslint max-len: 0 */
2
+
3
+ // Redshift Table Builder & Compiler
4
+ // -------
5
+
6
+ const has = require('lodash/has');
7
+ const TableCompiler_PG = require('../../postgres/schema/pg-tablecompiler');
8
+
9
+ class TableCompiler_Redshift extends TableCompiler_PG {
10
+ constructor() {
11
+ super(...arguments);
12
+ }
13
+
14
+ index(columns, indexName, options) {
15
+ this.client.logger.warn(
16
+ 'Redshift does not support the creation of indexes.'
17
+ );
18
+ }
19
+
20
+ dropIndex(columns, indexName) {
21
+ this.client.logger.warn(
22
+ 'Redshift does not support the deletion of indexes.'
23
+ );
24
+ }
25
+
26
+ // TODO: have to disable setting not null on columns that already exist...
27
+
28
+ // Adds the "create" query to the query sequence.
29
+ createQuery(columns, ifNot, like) {
30
+ const createStatement = ifNot
31
+ ? 'create table if not exists '
32
+ : 'create table ';
33
+ const columnsSql = ' (' + columns.sql.join(', ') + this._addChecks() + ')';
34
+ let sql =
35
+ createStatement +
36
+ this.tableName() +
37
+ (like && this.tableNameLike()
38
+ ? ' (like ' + this.tableNameLike() + ')'
39
+ : columnsSql);
40
+ if (this.single.inherits)
41
+ sql += ` like (${this.formatter.wrap(this.single.inherits)})`;
42
+ this.pushQuery({
43
+ sql,
44
+ bindings: columns.bindings,
45
+ });
46
+ const hasComment = has(this.single, 'comment');
47
+ if (hasComment) this.comment(this.single.comment);
48
+ if (like) {
49
+ this.addColumns(columns, this.addColumnsPrefix);
50
+ }
51
+ }
52
+
53
+ primary(columns, constraintName) {
54
+ const self = this;
55
+ constraintName = constraintName
56
+ ? self.formatter.wrap(constraintName)
57
+ : self.formatter.wrap(`${this.tableNameRaw}_pkey`);
58
+ if (columns.constructor !== Array) {
59
+ columns = [columns];
60
+ }
61
+ const thiscolumns = self.grouped.columns;
62
+
63
+ if (thiscolumns) {
64
+ for (let i = 0; i < columns.length; i++) {
65
+ let exists = thiscolumns.find(
66
+ (tcb) =>
67
+ tcb.grouping === 'columns' &&
68
+ tcb.builder &&
69
+ tcb.builder._method === 'add' &&
70
+ tcb.builder._args &&
71
+ tcb.builder._args.indexOf(columns[i]) > -1
72
+ );
73
+ if (exists) {
74
+ exists = exists.builder;
75
+ }
76
+ const nullable = !(
77
+ exists &&
78
+ exists._modifiers &&
79
+ exists._modifiers['nullable'] &&
80
+ exists._modifiers['nullable'][0] === false
81
+ );
82
+ if (nullable) {
83
+ if (exists) {
84
+ return this.client.logger.warn(
85
+ 'Redshift does not allow primary keys to contain nullable columns.'
86
+ );
87
+ } else {
88
+ return this.client.logger.warn(
89
+ 'Redshift does not allow primary keys to contain nonexistent columns.'
90
+ );
91
+ }
92
+ }
93
+ }
94
+ }
95
+ return self.pushQuery(
96
+ `alter table ${self.tableName()} add constraint ${constraintName} primary key (${self.formatter.columnize(
97
+ columns
98
+ )})`
99
+ );
100
+ }
101
+
102
+ // Compiles column add. Redshift can only add one column per ALTER TABLE, so core addColumns doesn't work. #2545
103
+ addColumns(columns, prefix, colCompilers) {
104
+ if (prefix === this.alterColumnsPrefix) {
105
+ super.addColumns(columns, prefix, colCompilers);
106
+ } else {
107
+ prefix = prefix || this.addColumnsPrefix;
108
+ colCompilers = colCompilers || this.getColumns();
109
+ for (const col of colCompilers) {
110
+ const quotedTableName = this.tableName();
111
+ const colCompiled = col.compileColumn();
112
+
113
+ this.pushQuery({
114
+ sql: `alter table ${quotedTableName} ${prefix}${colCompiled}`,
115
+ bindings: [],
116
+ });
117
+ }
118
+ }
119
+ }
120
+ }
121
+
122
+ module.exports = TableCompiler_Redshift;
@@ -1,11 +1,11 @@
1
- /* eslint max-len: 0 */
2
-
3
- const ViewCompiler_PG = require('../../postgres/schema/pg-viewcompiler.js');
4
-
5
- class ViewCompiler_Redshift extends ViewCompiler_PG {
6
- constructor(client, viewCompiler) {
7
- super(client, viewCompiler);
8
- }
9
- }
10
-
11
- module.exports = ViewCompiler_Redshift;
1
+ /* eslint max-len: 0 */
2
+
3
+ const ViewCompiler_PG = require('../../postgres/schema/pg-viewcompiler.js');
4
+
5
+ class ViewCompiler_Redshift extends ViewCompiler_PG {
6
+ constructor(client, viewCompiler) {
7
+ super(client, viewCompiler);
8
+ }
9
+ }
10
+
11
+ module.exports = ViewCompiler_Redshift;
@@ -1,25 +1,25 @@
1
- const Transaction = require('../../execution/transaction');
2
-
3
- module.exports = class Redshift_Transaction extends Transaction {
4
- begin(conn) {
5
- if (this.isolationLevel) {
6
- return this.query(conn, `BEGIN ISOLATION LEVEL ${this.isolationLevel};`);
7
- }
8
- return this.query(conn, 'BEGIN;');
9
- }
10
-
11
- savepoint(conn) {
12
- this.trxClient.logger('Redshift does not support savepoints.');
13
- return Promise.resolve();
14
- }
15
-
16
- release(conn, value) {
17
- this.trxClient.logger('Redshift does not support savepoints.');
18
- return Promise.resolve();
19
- }
20
-
21
- rollbackTo(conn, error) {
22
- this.trxClient.logger('Redshift does not support savepoints.');
23
- return Promise.resolve();
24
- }
25
- };
1
+ const Transaction = require('../../execution/transaction');
2
+
3
+ module.exports = class Redshift_Transaction extends Transaction {
4
+ begin(conn) {
5
+ if (this.isolationLevel) {
6
+ return this.query(conn, `BEGIN ISOLATION LEVEL ${this.isolationLevel};`);
7
+ }
8
+ return this.query(conn, 'BEGIN;');
9
+ }
10
+
11
+ savepoint(conn) {
12
+ this.trxClient.logger('Redshift does not support savepoints.');
13
+ return Promise.resolve();
14
+ }
15
+
16
+ release(conn, value) {
17
+ this.trxClient.logger('Redshift does not support savepoints.');
18
+ return Promise.resolve();
19
+ }
20
+
21
+ rollbackTo(conn, error) {
22
+ this.trxClient.logger('Redshift does not support savepoints.');
23
+ return Promise.resolve();
24
+ }
25
+ };
@@ -1,18 +1,18 @@
1
- const Transaction = require('../../../execution/transaction');
2
-
3
- class Transaction_Sqlite extends Transaction {
4
- begin(conn) {
5
- // SQLite doesn't really support isolation levels, it is serializable by
6
- // default and so we override it to ignore isolation level.
7
- // There is a `PRAGMA read_uncommitted = true;`, but that's probably not
8
- // what the user wants
9
- if (this.isolationLevel) {
10
- this.client.logger.warn(
11
- 'sqlite3 only supports serializable transactions, ignoring the isolation level param'
12
- );
13
- }
14
- return this.query(conn, 'BEGIN;');
15
- }
16
- }
17
-
18
- module.exports = Transaction_Sqlite;
1
+ const Transaction = require('../../../execution/transaction');
2
+
3
+ class Transaction_Sqlite extends Transaction {
4
+ begin(conn) {
5
+ // SQLite doesn't really support isolation levels, it is serializable by
6
+ // default and so we override it to ignore isolation level.
7
+ // There is a `PRAGMA read_uncommitted = true;`, but that's probably not
8
+ // what the user wants
9
+ if (this.isolationLevel) {
10
+ this.client.logger.warn(
11
+ 'sqlite3 only supports serializable transactions, ignoring the isolation level param'
12
+ );
13
+ }
14
+ return this.query(conn, 'BEGIN;');
15
+ }
16
+ }
17
+
18
+ module.exports = Transaction_Sqlite;