knex 3.2.2 → 3.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2447 -2441
- package/CONTRIBUTING.md +190 -190
- package/LICENSE +22 -22
- package/README.md +156 -156
- package/UPGRADING.md +245 -245
- package/bin/cli.js +516 -516
- package/bin/knexfile-runtime-error.js +27 -27
- package/bin/utils/cli-config-utils.js +217 -217
- package/bin/utils/constants.js +7 -7
- package/bin/utils/migrationsLister.js +37 -37
- package/knex.js +23 -23
- package/knex.mjs +11 -11
- package/lib/builder-interface-augmenter.js +120 -120
- package/lib/client.js +585 -585
- package/lib/constants.js +61 -61
- package/lib/dialects/better-sqlite3/index.js +101 -101
- package/lib/dialects/cockroachdb/crdb-columncompiler.js +14 -14
- package/lib/dialects/cockroachdb/crdb-querybuilder.js +11 -11
- package/lib/dialects/cockroachdb/crdb-querycompiler.js +122 -122
- package/lib/dialects/cockroachdb/crdb-tablecompiler.js +46 -46
- package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
- package/lib/dialects/cockroachdb/index.js +86 -86
- package/lib/dialects/index.js +34 -34
- package/lib/dialects/mssql/index.js +498 -498
- package/lib/dialects/mssql/mssql-formatter.js +34 -34
- package/lib/dialects/mssql/query/mssql-querycompiler.js +601 -601
- package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
- package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
- package/lib/dialects/mssql/schema/mssql-tablecompiler.js +393 -393
- package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
- package/lib/dialects/mssql/transaction.js +176 -176
- package/lib/dialects/mysql/index.js +317 -317
- package/lib/dialects/mysql/query/mysql-querybuilder.js +14 -14
- package/lib/dialects/mysql/query/mysql-querycompiler.js +292 -292
- package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
- package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
- package/lib/dialects/mysql/schema/mysql-tablecompiler.js +426 -426
- package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
- package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
- package/lib/dialects/mysql/transaction.js +46 -46
- package/lib/dialects/mysql2/index.js +53 -53
- package/lib/dialects/mysql2/transaction.js +44 -44
- package/lib/dialects/oracle/DEAD_CODE.md +5 -5
- package/lib/dialects/oracle/index.js +92 -92
- package/lib/dialects/oracle/query/oracle-querycompiler.js +343 -343
- package/lib/dialects/oracle/schema/internal/incrementUtils.js +22 -22
- package/lib/dialects/oracle/schema/internal/trigger.js +155 -155
- package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
- package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
- package/lib/dialects/oracle/schema/oracle-compiler.js +124 -124
- package/lib/dialects/oracle/schema/oracle-tablecompiler.js +210 -210
- package/lib/dialects/oracle/utils.js +107 -107
- package/lib/dialects/oracledb/index.js +381 -381
- package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
- package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +61 -61
- package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
- package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
- package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
- package/lib/dialects/oracledb/transaction.js +98 -98
- package/lib/dialects/oracledb/utils.js +208 -208
- package/lib/dialects/pgnative/index.js +60 -60
- package/lib/dialects/postgres/execution/pg-transaction.js +19 -19
- package/lib/dialects/postgres/index.js +373 -373
- package/lib/dialects/postgres/query/pg-querybuilder.js +43 -43
- package/lib/dialects/postgres/query/pg-querycompiler.js +400 -400
- package/lib/dialects/postgres/schema/pg-columncompiler.js +162 -162
- package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
- package/lib/dialects/postgres/schema/pg-tablecompiler.js +331 -331
- package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
- package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
- package/lib/dialects/redshift/index.js +86 -86
- package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
- package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
- package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
- package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
- package/lib/dialects/redshift/schema/redshift-tablecompiler.js +134 -134
- package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
- package/lib/dialects/redshift/transaction.js +32 -32
- package/lib/dialects/sqlite3/execution/sqlite-transaction.js +172 -172
- package/lib/dialects/sqlite3/index.js +263 -263
- package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
- package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +341 -341
- package/lib/dialects/sqlite3/schema/ddl.js +380 -380
- package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
- package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
- package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
- package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
- package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
- package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
- package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
- package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
- package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +364 -364
- package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
- package/lib/execution/batch-insert.js +51 -51
- package/lib/execution/internal/delay.js +6 -6
- package/lib/execution/internal/ensure-connection-callback.js +41 -41
- package/lib/execution/internal/query-executioner.js +62 -62
- package/lib/execution/runner.js +325 -325
- package/lib/execution/transaction.js +417 -417
- package/lib/formatter/formatterUtils.js +42 -42
- package/lib/formatter/rawFormatter.js +84 -84
- package/lib/formatter/wrappingFormatter.js +253 -253
- package/lib/formatter.js +25 -25
- package/lib/index.js +3 -3
- package/lib/knex-builder/FunctionHelper.js +80 -80
- package/lib/knex-builder/Knex.js +59 -59
- package/lib/knex-builder/internal/config-resolver.js +57 -57
- package/lib/knex-builder/internal/parse-connection.js +87 -87
- package/lib/knex-builder/make-knex.js +345 -345
- package/lib/logger.js +76 -76
- package/lib/migrations/common/MigrationsLoader.js +36 -36
- package/lib/migrations/migrate/MigrationGenerator.js +84 -84
- package/lib/migrations/migrate/Migrator.js +632 -632
- package/lib/migrations/migrate/migrate-stub.js +17 -17
- package/lib/migrations/migrate/migration-list-resolver.js +33 -33
- package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
- package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
- package/lib/migrations/migrate/stub/cjs.stub +15 -15
- package/lib/migrations/migrate/stub/coffee.stub +13 -13
- package/lib/migrations/migrate/stub/eg.stub +14 -14
- package/lib/migrations/migrate/stub/js-schema.stub +22 -22
- package/lib/migrations/migrate/stub/js.stub +22 -22
- package/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
- package/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
- package/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
- package/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
- package/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
- package/lib/migrations/migrate/stub/ls.stub +14 -14
- package/lib/migrations/migrate/stub/mjs.stub +23 -23
- package/lib/migrations/migrate/stub/ts-schema.stub +21 -21
- package/lib/migrations/migrate/stub/ts.stub +21 -21
- package/lib/migrations/migrate/table-creator.js +77 -77
- package/lib/migrations/migrate/table-resolver.js +27 -27
- package/lib/migrations/seed/Seeder.js +137 -137
- package/lib/migrations/seed/seed-stub.js +13 -13
- package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
- package/lib/migrations/seed/sources/fs-seeds.js +65 -65
- package/lib/migrations/seed/stub/coffee.stub +9 -9
- package/lib/migrations/seed/stub/eg.stub +11 -11
- package/lib/migrations/seed/stub/js.stub +13 -13
- package/lib/migrations/seed/stub/ls.stub +11 -11
- package/lib/migrations/seed/stub/mjs.stub +12 -12
- package/lib/migrations/seed/stub/ts.stub +13 -13
- package/lib/migrations/util/fs.js +86 -86
- package/lib/migrations/util/import-file.js +12 -12
- package/lib/migrations/util/is-module-type.js +9 -9
- package/lib/migrations/util/template.js +52 -52
- package/lib/migrations/util/timestamp.js +14 -14
- package/lib/query/analytic.js +52 -52
- package/lib/query/constants.js +15 -15
- package/lib/query/joinclause.js +270 -270
- package/lib/query/method-constants.js +136 -136
- package/lib/query/querybuilder.js +1793 -1793
- package/lib/query/querycompiler.js +1634 -1634
- package/lib/raw.js +139 -139
- package/lib/ref.js +39 -39
- package/lib/schema/builder.js +115 -115
- package/lib/schema/columnbuilder.js +146 -146
- package/lib/schema/columncompiler.js +307 -307
- package/lib/schema/compiler.js +187 -187
- package/lib/schema/internal/helpers.js +55 -55
- package/lib/schema/tablebuilder.js +379 -379
- package/lib/schema/tablecompiler.js +450 -450
- package/lib/schema/viewbuilder.js +92 -92
- package/lib/schema/viewcompiler.js +138 -138
- package/lib/util/finally-mixin.js +13 -13
- package/lib/util/helpers.js +95 -95
- package/lib/util/is.js +32 -32
- package/lib/util/nanoid.js +40 -40
- package/lib/util/noop.js +1 -1
- package/lib/util/save-async-stack.js +14 -14
- package/lib/util/security.js +32 -32
- package/lib/util/string.js +190 -190
- package/lib/util/timeout.js +29 -29
- package/package.json +294 -296
- package/scripts/act-testing/act.sh +19 -19
- package/scripts/act-testing/merged-no-label.json +11 -11
- package/scripts/act-testing/merged-patch-labeled.json +12 -12
- package/scripts/act-testing/merged-skip-labeled.json +12 -12
- package/scripts/act-testing/not-merged-patch-labeled.json +12 -12
- package/scripts/build-for-release.sh +121 -121
- package/scripts/build.js +125 -125
- package/scripts/clean.js +31 -31
- package/scripts/docker-compose.yml +150 -150
- package/scripts/format-changelog.js +55 -55
- package/scripts/next-release-howto.md +24 -24
- package/scripts/oracledb-install-driver-libs.sh +82 -82
- package/scripts/release.sh +36 -36
- package/scripts/runkit-example.js +35 -35
- package/scripts/stress-test/README.txt +18 -18
- package/scripts/stress-test/docker-compose.yml +55 -55
- package/scripts/stress-test/knex-stress-test.js +212 -212
- package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +149 -149
- package/scripts/stress-test/mysql2-sudden-exit-without-error.js +101 -101
- package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +188 -188
- package/types/index.d.mts +11 -0
- package/types/index.d.ts +3321 -3321
- package/types/result.d.ts +27 -27
- package/types/tables.d.ts +4 -4
|
@@ -1,124 +1,124 @@
|
|
|
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 trigger = new Trigger(this.client.version);
|
|
15
|
-
const renameTable = trigger.renameTableAndAutoIncrementTrigger(
|
|
16
|
-
this.client.logger,
|
|
17
|
-
tableName,
|
|
18
|
-
to
|
|
19
|
-
);
|
|
20
|
-
this.pushQuery(renameTable);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Check whether a table exists on the query.
|
|
24
|
-
hasTable(tableName) {
|
|
25
|
-
this.pushQuery({
|
|
26
|
-
sql:
|
|
27
|
-
'select TABLE_NAME from USER_TABLES where TABLE_NAME = ' +
|
|
28
|
-
this.client.parameter(tableName, this.builder, this.bindingsHolder),
|
|
29
|
-
output(resp) {
|
|
30
|
-
return resp.length > 0;
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Check whether a column exists on the schema.
|
|
36
|
-
hasColumn(tableName, column) {
|
|
37
|
-
const sql =
|
|
38
|
-
`select COLUMN_NAME from ALL_TAB_COLUMNS ` +
|
|
39
|
-
`where TABLE_NAME = ${this.client.parameter(
|
|
40
|
-
tableName,
|
|
41
|
-
this.builder,
|
|
42
|
-
this.bindingsHolder
|
|
43
|
-
)} ` +
|
|
44
|
-
`and COLUMN_NAME = ${this.client.parameter(
|
|
45
|
-
column,
|
|
46
|
-
this.builder,
|
|
47
|
-
this.bindingsHolder
|
|
48
|
-
)}`;
|
|
49
|
-
this.pushQuery({ sql, output: (resp) => resp.length > 0 });
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
dropSequenceIfExists(sequenceName) {
|
|
53
|
-
const prefix = this.schema ? `"${this.schema}".` : '';
|
|
54
|
-
this.pushQuery(
|
|
55
|
-
utils.wrapSqlWithCatch(
|
|
56
|
-
`drop sequence ${prefix}${this.formatter.wrap(sequenceName)}`,
|
|
57
|
-
-2289
|
|
58
|
-
)
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
_dropRelatedSequenceIfExists(tableName) {
|
|
63
|
-
// removing the sequence that was possibly generated by increments() column
|
|
64
|
-
const nameHelper = new utils.NameHelper(this.client.version);
|
|
65
|
-
const sequenceName = nameHelper.generateCombinedName(
|
|
66
|
-
this.client.logger,
|
|
67
|
-
'seq',
|
|
68
|
-
tableName
|
|
69
|
-
);
|
|
70
|
-
this.dropSequenceIfExists(sequenceName);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
dropTable(tableName) {
|
|
74
|
-
const prefix = this.schema ? `"${this.schema}".` : '';
|
|
75
|
-
this.pushQuery(`drop table ${prefix}${this.formatter.wrap(tableName)}`);
|
|
76
|
-
|
|
77
|
-
// removing the sequence that was possibly generated by increments() column
|
|
78
|
-
this._dropRelatedSequenceIfExists(tableName);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
dropTableIfExists(tableName) {
|
|
82
|
-
this.dropObject(tableName, 'table');
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
dropViewIfExists(viewName) {
|
|
86
|
-
this.dropObject(viewName, 'view');
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
dropObject(objectName, type) {
|
|
90
|
-
const prefix = this.schema ? `"${this.schema}".` : '';
|
|
91
|
-
let errorCode = -942;
|
|
92
|
-
if (type === 'materialized view') {
|
|
93
|
-
// https://stackoverflow.com/a/1801453
|
|
94
|
-
errorCode = -12003;
|
|
95
|
-
}
|
|
96
|
-
this.pushQuery(
|
|
97
|
-
utils.wrapSqlWithCatch(
|
|
98
|
-
`drop ${type} ${prefix}${this.formatter.wrap(objectName)}`,
|
|
99
|
-
errorCode
|
|
100
|
-
)
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
// removing the sequence that was possibly generated by increments() column
|
|
104
|
-
this._dropRelatedSequenceIfExists(objectName);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
refreshMaterializedView(viewName) {
|
|
108
|
-
return this.pushQuery({
|
|
109
|
-
sql: `BEGIN DBMS_MVIEW.REFRESH('${
|
|
110
|
-
this.schemaNameRaw ? this.schemaNameRaw + '.' : ''
|
|
111
|
-
}${viewName}'); END;`,
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
dropMaterializedView(viewName) {
|
|
116
|
-
this._dropView(viewName, false, true);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
dropMaterializedViewIfExists(viewName) {
|
|
120
|
-
this.dropObject(viewName, 'materialized view');
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
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 trigger = new Trigger(this.client.version);
|
|
15
|
+
const renameTable = trigger.renameTableAndAutoIncrementTrigger(
|
|
16
|
+
this.client.logger,
|
|
17
|
+
tableName,
|
|
18
|
+
to
|
|
19
|
+
);
|
|
20
|
+
this.pushQuery(renameTable);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Check whether a table exists on the query.
|
|
24
|
+
hasTable(tableName) {
|
|
25
|
+
this.pushQuery({
|
|
26
|
+
sql:
|
|
27
|
+
'select TABLE_NAME from USER_TABLES where TABLE_NAME = ' +
|
|
28
|
+
this.client.parameter(tableName, this.builder, this.bindingsHolder),
|
|
29
|
+
output(resp) {
|
|
30
|
+
return resp.length > 0;
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Check whether a column exists on the schema.
|
|
36
|
+
hasColumn(tableName, column) {
|
|
37
|
+
const sql =
|
|
38
|
+
`select COLUMN_NAME from ALL_TAB_COLUMNS ` +
|
|
39
|
+
`where TABLE_NAME = ${this.client.parameter(
|
|
40
|
+
tableName,
|
|
41
|
+
this.builder,
|
|
42
|
+
this.bindingsHolder
|
|
43
|
+
)} ` +
|
|
44
|
+
`and COLUMN_NAME = ${this.client.parameter(
|
|
45
|
+
column,
|
|
46
|
+
this.builder,
|
|
47
|
+
this.bindingsHolder
|
|
48
|
+
)}`;
|
|
49
|
+
this.pushQuery({ sql, output: (resp) => resp.length > 0 });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
dropSequenceIfExists(sequenceName) {
|
|
53
|
+
const prefix = this.schema ? `"${this.schema}".` : '';
|
|
54
|
+
this.pushQuery(
|
|
55
|
+
utils.wrapSqlWithCatch(
|
|
56
|
+
`drop sequence ${prefix}${this.formatter.wrap(sequenceName)}`,
|
|
57
|
+
-2289
|
|
58
|
+
)
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
_dropRelatedSequenceIfExists(tableName) {
|
|
63
|
+
// removing the sequence that was possibly generated by increments() column
|
|
64
|
+
const nameHelper = new utils.NameHelper(this.client.version);
|
|
65
|
+
const sequenceName = nameHelper.generateCombinedName(
|
|
66
|
+
this.client.logger,
|
|
67
|
+
'seq',
|
|
68
|
+
tableName
|
|
69
|
+
);
|
|
70
|
+
this.dropSequenceIfExists(sequenceName);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
dropTable(tableName) {
|
|
74
|
+
const prefix = this.schema ? `"${this.schema}".` : '';
|
|
75
|
+
this.pushQuery(`drop table ${prefix}${this.formatter.wrap(tableName)}`);
|
|
76
|
+
|
|
77
|
+
// removing the sequence that was possibly generated by increments() column
|
|
78
|
+
this._dropRelatedSequenceIfExists(tableName);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
dropTableIfExists(tableName) {
|
|
82
|
+
this.dropObject(tableName, 'table');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
dropViewIfExists(viewName) {
|
|
86
|
+
this.dropObject(viewName, 'view');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
dropObject(objectName, type) {
|
|
90
|
+
const prefix = this.schema ? `"${this.schema}".` : '';
|
|
91
|
+
let errorCode = -942;
|
|
92
|
+
if (type === 'materialized view') {
|
|
93
|
+
// https://stackoverflow.com/a/1801453
|
|
94
|
+
errorCode = -12003;
|
|
95
|
+
}
|
|
96
|
+
this.pushQuery(
|
|
97
|
+
utils.wrapSqlWithCatch(
|
|
98
|
+
`drop ${type} ${prefix}${this.formatter.wrap(objectName)}`,
|
|
99
|
+
errorCode
|
|
100
|
+
)
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
// removing the sequence that was possibly generated by increments() column
|
|
104
|
+
this._dropRelatedSequenceIfExists(objectName);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
refreshMaterializedView(viewName) {
|
|
108
|
+
return this.pushQuery({
|
|
109
|
+
sql: `BEGIN DBMS_MVIEW.REFRESH('${
|
|
110
|
+
this.schemaNameRaw ? this.schemaNameRaw + '.' : ''
|
|
111
|
+
}${viewName}'); END;`,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
dropMaterializedView(viewName) {
|
|
116
|
+
this._dropView(viewName, false, true);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
dropMaterializedViewIfExists(viewName) {
|
|
120
|
+
this.dropObject(viewName, 'materialized view');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
module.exports = SchemaCompiler_Oracle;
|
|
@@ -1,210 +1,210 @@
|
|
|
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
|
-
const trigger = new Trigger(this.client.version);
|
|
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, like) {
|
|
58
|
-
const columnsSql =
|
|
59
|
-
like && this.tableNameLike()
|
|
60
|
-
? ' as (select * from ' + this.tableNameLike() + ' where 0=1)'
|
|
61
|
-
: ' (' + columns.sql.join(', ') + this._addChecks() + ')';
|
|
62
|
-
const sql = `create table ${this.tableName()}${columnsSql}`;
|
|
63
|
-
|
|
64
|
-
this.pushQuery({
|
|
65
|
-
// catch "name is already used by an existing object" for workaround for "if not exists"
|
|
66
|
-
sql: ifNot ? utils.wrapSqlWithCatch(sql, -955) : sql,
|
|
67
|
-
bindings: columns.bindings,
|
|
68
|
-
});
|
|
69
|
-
if (this.single.comment) this.comment(this.single.comment);
|
|
70
|
-
if (like) {
|
|
71
|
-
this.addColumns(columns, this.addColumnsPrefix);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Compiles the comment on the table.
|
|
76
|
-
comment(comment) {
|
|
77
|
-
this.pushQuery(`comment on table ${this.tableName()} is '${comment}'`);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
dropColumn() {
|
|
81
|
-
const columns = helpers.normalizeArr.apply(null, arguments);
|
|
82
|
-
this.pushQuery(
|
|
83
|
-
`alter table ${this.tableName()} drop (${this.formatter.columnize(
|
|
84
|
-
columns
|
|
85
|
-
)})`
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
_indexCommand(type, tableName, columns) {
|
|
90
|
-
const nameHelper = new utils.NameHelper(this.client.version);
|
|
91
|
-
return this.formatter.wrap(
|
|
92
|
-
nameHelper.generateCombinedName(
|
|
93
|
-
this.client.logger,
|
|
94
|
-
type,
|
|
95
|
-
tableName,
|
|
96
|
-
columns
|
|
97
|
-
)
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
primary(columns, constraintName) {
|
|
102
|
-
let deferrable;
|
|
103
|
-
if (isObject(constraintName)) {
|
|
104
|
-
({ constraintName, deferrable } = constraintName);
|
|
105
|
-
}
|
|
106
|
-
deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
|
|
107
|
-
constraintName = constraintName
|
|
108
|
-
? this.formatter.wrap(constraintName)
|
|
109
|
-
: this.formatter.wrap(`${this.tableNameRaw}_pkey`);
|
|
110
|
-
const primaryCols = columns;
|
|
111
|
-
let incrementsCols = [];
|
|
112
|
-
if (this.grouped.columns) {
|
|
113
|
-
incrementsCols = this._getIncrementsColumnNames();
|
|
114
|
-
if (incrementsCols) {
|
|
115
|
-
incrementsCols.forEach((c) => {
|
|
116
|
-
if (!primaryCols.includes(c)) {
|
|
117
|
-
primaryCols.unshift(c);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
this.pushQuery(
|
|
123
|
-
`alter table ${this.tableName()} add constraint ${constraintName} primary key (${this.formatter.columnize(
|
|
124
|
-
primaryCols
|
|
125
|
-
)})${deferrable}`
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
dropPrimary(constraintName) {
|
|
130
|
-
constraintName = constraintName
|
|
131
|
-
? this.formatter.wrap(constraintName)
|
|
132
|
-
: this.formatter.wrap(this.tableNameRaw + '_pkey');
|
|
133
|
-
this.pushQuery(
|
|
134
|
-
`alter table ${this.tableName()} drop constraint ${constraintName}`
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
index(columns, indexName) {
|
|
139
|
-
indexName = indexName
|
|
140
|
-
? this.formatter.wrap(indexName)
|
|
141
|
-
: this._indexCommand('index', this.tableNameRaw, columns);
|
|
142
|
-
this.pushQuery(
|
|
143
|
-
`create index ${indexName} on ${this.tableName()}` +
|
|
144
|
-
' (' +
|
|
145
|
-
this.formatter.columnize(columns) +
|
|
146
|
-
')'
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
dropIndex(columns, indexName) {
|
|
151
|
-
indexName = indexName
|
|
152
|
-
? this.formatter.wrap(indexName)
|
|
153
|
-
: this._indexCommand('index', this.tableNameRaw, columns);
|
|
154
|
-
this.pushQuery(`drop index ${indexName}`);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
unique(columns, indexName) {
|
|
158
|
-
let deferrable;
|
|
159
|
-
if (isObject(indexName)) {
|
|
160
|
-
({ indexName, deferrable } = indexName);
|
|
161
|
-
}
|
|
162
|
-
deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
|
|
163
|
-
indexName = indexName
|
|
164
|
-
? this.formatter.wrap(indexName)
|
|
165
|
-
: this._indexCommand('unique', this.tableNameRaw, columns);
|
|
166
|
-
this.pushQuery(
|
|
167
|
-
`alter table ${this.tableName()} add constraint ${indexName}` +
|
|
168
|
-
' unique (' +
|
|
169
|
-
this.formatter.columnize(columns) +
|
|
170
|
-
')' +
|
|
171
|
-
deferrable
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
dropUnique(columns, indexName) {
|
|
176
|
-
indexName = indexName
|
|
177
|
-
? this.formatter.wrap(indexName)
|
|
178
|
-
: this._indexCommand('unique', this.tableNameRaw, columns);
|
|
179
|
-
this.pushQuery(
|
|
180
|
-
`alter table ${this.tableName()} drop constraint ${indexName}`
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
dropUniqueIfExists(columns, indexName) {
|
|
185
|
-
// maybe exists? couldn't find it
|
|
186
|
-
throw new Error('.dropUniqueIfExists() is not supported by oracle');
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
dropForeign(columns, indexName) {
|
|
190
|
-
indexName = indexName
|
|
191
|
-
? this.formatter.wrap(indexName)
|
|
192
|
-
: this._indexCommand('foreign', this.tableNameRaw, columns);
|
|
193
|
-
this.pushQuery(
|
|
194
|
-
`alter table ${this.tableName()} drop constraint ${indexName}`
|
|
195
|
-
);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
dropForeignIfExists() {
|
|
199
|
-
throw new Error('.dropForeignIfExists() is not supported by oracle');
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
dropPrimaryIfExists() {
|
|
203
|
-
throw new Error('.dropPrimaryIfExists() is not supported by oracle');
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
TableCompiler_Oracle.prototype.addColumnsPrefix = 'add ';
|
|
208
|
-
TableCompiler_Oracle.prototype.alterColumnsPrefix = 'modify ';
|
|
209
|
-
|
|
210
|
-
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
|
+
const trigger = new Trigger(this.client.version);
|
|
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, like) {
|
|
58
|
+
const columnsSql =
|
|
59
|
+
like && this.tableNameLike()
|
|
60
|
+
? ' as (select * from ' + this.tableNameLike() + ' where 0=1)'
|
|
61
|
+
: ' (' + columns.sql.join(', ') + this._addChecks() + ')';
|
|
62
|
+
const sql = `create table ${this.tableName()}${columnsSql}`;
|
|
63
|
+
|
|
64
|
+
this.pushQuery({
|
|
65
|
+
// catch "name is already used by an existing object" for workaround for "if not exists"
|
|
66
|
+
sql: ifNot ? utils.wrapSqlWithCatch(sql, -955) : sql,
|
|
67
|
+
bindings: columns.bindings,
|
|
68
|
+
});
|
|
69
|
+
if (this.single.comment) this.comment(this.single.comment);
|
|
70
|
+
if (like) {
|
|
71
|
+
this.addColumns(columns, this.addColumnsPrefix);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Compiles the comment on the table.
|
|
76
|
+
comment(comment) {
|
|
77
|
+
this.pushQuery(`comment on table ${this.tableName()} is '${comment}'`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
dropColumn() {
|
|
81
|
+
const columns = helpers.normalizeArr.apply(null, arguments);
|
|
82
|
+
this.pushQuery(
|
|
83
|
+
`alter table ${this.tableName()} drop (${this.formatter.columnize(
|
|
84
|
+
columns
|
|
85
|
+
)})`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
_indexCommand(type, tableName, columns) {
|
|
90
|
+
const nameHelper = new utils.NameHelper(this.client.version);
|
|
91
|
+
return this.formatter.wrap(
|
|
92
|
+
nameHelper.generateCombinedName(
|
|
93
|
+
this.client.logger,
|
|
94
|
+
type,
|
|
95
|
+
tableName,
|
|
96
|
+
columns
|
|
97
|
+
)
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
primary(columns, constraintName) {
|
|
102
|
+
let deferrable;
|
|
103
|
+
if (isObject(constraintName)) {
|
|
104
|
+
({ constraintName, deferrable } = constraintName);
|
|
105
|
+
}
|
|
106
|
+
deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
|
|
107
|
+
constraintName = constraintName
|
|
108
|
+
? this.formatter.wrap(constraintName)
|
|
109
|
+
: this.formatter.wrap(`${this.tableNameRaw}_pkey`);
|
|
110
|
+
const primaryCols = columns;
|
|
111
|
+
let incrementsCols = [];
|
|
112
|
+
if (this.grouped.columns) {
|
|
113
|
+
incrementsCols = this._getIncrementsColumnNames();
|
|
114
|
+
if (incrementsCols) {
|
|
115
|
+
incrementsCols.forEach((c) => {
|
|
116
|
+
if (!primaryCols.includes(c)) {
|
|
117
|
+
primaryCols.unshift(c);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
this.pushQuery(
|
|
123
|
+
`alter table ${this.tableName()} add constraint ${constraintName} primary key (${this.formatter.columnize(
|
|
124
|
+
primaryCols
|
|
125
|
+
)})${deferrable}`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
dropPrimary(constraintName) {
|
|
130
|
+
constraintName = constraintName
|
|
131
|
+
? this.formatter.wrap(constraintName)
|
|
132
|
+
: this.formatter.wrap(this.tableNameRaw + '_pkey');
|
|
133
|
+
this.pushQuery(
|
|
134
|
+
`alter table ${this.tableName()} drop constraint ${constraintName}`
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
index(columns, indexName) {
|
|
139
|
+
indexName = indexName
|
|
140
|
+
? this.formatter.wrap(indexName)
|
|
141
|
+
: this._indexCommand('index', this.tableNameRaw, columns);
|
|
142
|
+
this.pushQuery(
|
|
143
|
+
`create index ${indexName} on ${this.tableName()}` +
|
|
144
|
+
' (' +
|
|
145
|
+
this.formatter.columnize(columns) +
|
|
146
|
+
')'
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
dropIndex(columns, indexName) {
|
|
151
|
+
indexName = indexName
|
|
152
|
+
? this.formatter.wrap(indexName)
|
|
153
|
+
: this._indexCommand('index', this.tableNameRaw, columns);
|
|
154
|
+
this.pushQuery(`drop index ${indexName}`);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
unique(columns, indexName) {
|
|
158
|
+
let deferrable;
|
|
159
|
+
if (isObject(indexName)) {
|
|
160
|
+
({ indexName, deferrable } = indexName);
|
|
161
|
+
}
|
|
162
|
+
deferrable = deferrable ? ` deferrable initially ${deferrable}` : '';
|
|
163
|
+
indexName = indexName
|
|
164
|
+
? this.formatter.wrap(indexName)
|
|
165
|
+
: this._indexCommand('unique', this.tableNameRaw, columns);
|
|
166
|
+
this.pushQuery(
|
|
167
|
+
`alter table ${this.tableName()} add constraint ${indexName}` +
|
|
168
|
+
' unique (' +
|
|
169
|
+
this.formatter.columnize(columns) +
|
|
170
|
+
')' +
|
|
171
|
+
deferrable
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
dropUnique(columns, indexName) {
|
|
176
|
+
indexName = indexName
|
|
177
|
+
? this.formatter.wrap(indexName)
|
|
178
|
+
: this._indexCommand('unique', this.tableNameRaw, columns);
|
|
179
|
+
this.pushQuery(
|
|
180
|
+
`alter table ${this.tableName()} drop constraint ${indexName}`
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
dropUniqueIfExists(columns, indexName) {
|
|
185
|
+
// maybe exists? couldn't find it
|
|
186
|
+
throw new Error('.dropUniqueIfExists() is not supported by oracle');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
dropForeign(columns, indexName) {
|
|
190
|
+
indexName = indexName
|
|
191
|
+
? this.formatter.wrap(indexName)
|
|
192
|
+
: this._indexCommand('foreign', this.tableNameRaw, columns);
|
|
193
|
+
this.pushQuery(
|
|
194
|
+
`alter table ${this.tableName()} drop constraint ${indexName}`
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
dropForeignIfExists() {
|
|
199
|
+
throw new Error('.dropForeignIfExists() is not supported by oracle');
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
dropPrimaryIfExists() {
|
|
203
|
+
throw new Error('.dropPrimaryIfExists() is not supported by oracle');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
TableCompiler_Oracle.prototype.addColumnsPrefix = 'add ';
|
|
208
|
+
TableCompiler_Oracle.prototype.alterColumnsPrefix = 'modify ';
|
|
209
|
+
|
|
210
|
+
module.exports = TableCompiler_Oracle;
|