knex 0.12.6 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/CONTRIBUTING.md +7 -1
- package/bin/cli.js +5 -5
- package/lib/client.js +9 -1
- package/lib/dialects/maria/transaction.js +10 -1
- package/lib/dialects/mssql/index.js +15 -9
- package/lib/dialects/mssql/query/compiler.js +18 -1
- package/lib/dialects/mssql/schema/tablecompiler.js +6 -2
- package/lib/dialects/mssql/transaction.js +3 -0
- package/lib/dialects/mysql/index.js +2 -2
- package/lib/dialects/mysql/schema/tablecompiler.js +2 -0
- package/lib/dialects/mysql/transaction.js +10 -1
- package/lib/dialects/mysql2/transaction.js +10 -1
- package/lib/dialects/oracle/index.js +4 -8
- package/lib/dialects/oracle/query/compiler.js +5 -2
- package/lib/dialects/oracle/schema/columncompiler.js +6 -12
- package/lib/dialects/oracle/schema/compiler.js +8 -4
- package/lib/dialects/oracle/schema/tablecompiler.js +11 -6
- package/lib/dialects/oracle/schema/trigger.js +35 -0
- package/lib/dialects/oracle/transaction.js +13 -1
- package/lib/dialects/oracledb/index.js +35 -6
- package/lib/dialects/oracledb/query/compiler.js +3 -0
- package/lib/dialects/oracledb/transaction.js +11 -0
- package/lib/dialects/postgres/index.js +13 -3
- package/lib/dialects/postgres/query/compiler.js +1 -1
- package/lib/dialects/postgres/schema/tablecompiler.js +61 -0
- package/lib/dialects/sqlite3/schema/columncompiler.js +1 -1
- package/lib/dialects/sqlite3/schema/tablecompiler.js +4 -1
- package/lib/dialects/websql/transaction.js +1 -1
- package/lib/formatter.js +1 -1
- package/lib/interface.js +3 -4
- package/lib/migrate/index.js +74 -36
- package/lib/migrate/stub/knexfile-ts.stub +44 -0
- package/lib/migrate/stub/ts.stub +16 -0
- package/lib/query/builder.js +32 -3
- package/lib/query/compiler.js +7 -7
- package/lib/query/methods.js +1 -1
- package/lib/raw.js +20 -16
- package/lib/runner.js +11 -3
- package/lib/schema/columnbuilder.js +11 -1
- package/lib/schema/columncompiler.js +2 -1
- package/lib/schema/tablebuilder.js +6 -2
- package/lib/schema/tablecompiler.js +66 -22
- package/lib/seed/index.js +1 -1
- package/lib/seed/stub/coffee.stub +6 -7
- package/lib/seed/stub/eg.stub +5 -5
- package/lib/seed/stub/js.stub +5 -5
- package/lib/seed/stub/ls.stub +5 -5
- package/lib/seed/stub/ts.stub +14 -0
- package/lib/transaction.js +17 -6
- package/lib/util/batchInsert.js +60 -84
- package/lib/util/make-knex.js +5 -5
- package/package.json +8 -3
- package/src/client.js +9 -1
- package/src/dialects/maria/transaction.js +7 -1
- package/src/dialects/mssql/index.js +11 -5
- package/src/dialects/mssql/query/compiler.js +15 -2
- package/src/dialects/mssql/schema/tablecompiler.js +6 -2
- package/src/dialects/mssql/transaction.js +7 -1
- package/src/dialects/mysql/schema/tablecompiler.js +2 -0
- package/src/dialects/mysql/transaction.js +7 -2
- package/src/dialects/mysql2/transaction.js +7 -2
- package/src/dialects/oracle/index.js +2 -3
- package/src/dialects/oracle/query/compiler.js +11 -2
- package/src/dialects/oracle/schema/columncompiler.js +4 -26
- package/src/dialects/oracle/schema/compiler.js +3 -1
- package/src/dialects/oracle/schema/tablecompiler.js +6 -4
- package/src/dialects/oracle/schema/trigger.js +109 -0
- package/src/dialects/oracle/transaction.js +8 -1
- package/src/dialects/oracledb/index.js +40 -10
- package/src/dialects/oracledb/query/compiler.js +3 -0
- package/src/dialects/oracledb/transaction.js +9 -0
- package/src/dialects/postgres/index.js +13 -5
- package/src/dialects/postgres/query/compiler.js +3 -1
- package/src/dialects/postgres/schema/tablecompiler.js +44 -0
- package/src/dialects/sqlite3/schema/columncompiler.js +1 -1
- package/src/dialects/sqlite3/schema/tablecompiler.js +4 -1
- package/src/dialects/websql/transaction.js +2 -1
- package/src/formatter.js +4 -1
- package/src/interface.js +4 -4
- package/src/migrate/index.js +103 -81
- package/src/migrate/stub/knexfile-ts.stub +44 -0
- package/src/migrate/stub/ts.stub +16 -0
- package/src/query/builder.js +23 -3
- package/src/query/compiler.js +9 -5
- package/src/query/methods.js +2 -0
- package/src/raw.js +16 -11
- package/src/runner.js +5 -1
- package/src/schema/columnbuilder.js +11 -2
- package/src/schema/columncompiler.js +1 -0
- package/src/schema/tablebuilder.js +6 -2
- package/src/schema/tablecompiler.js +35 -14
- package/src/seed/index.js +2 -1
- package/src/seed/stub/coffee.stub +6 -7
- package/src/seed/stub/eg.stub +5 -5
- package/src/seed/stub/js.stub +5 -5
- package/src/seed/stub/ls.stub +5 -5
- package/src/seed/stub/ts.stub +14 -0
- package/src/transaction.js +15 -7
- package/src/util/batchInsert.js +59 -66
- package/src/util/make-knex.js +4 -4
- package/README.md +0 -80
- package/lib/dialects/oracle/stream.js +0 -62
- package/src/dialects/oracle/stream.js +0 -50
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
|
|
2
2
|
# Master (Unreleased)
|
|
3
|
+
|
|
4
|
+
# 0.13 - 29 Apr, 2017
|
|
5
|
+
|
|
6
|
+
### Breaking Changes:
|
|
7
|
+
- Multiple concurrent migration runners blocks instead of throwing error when possible #1962
|
|
8
|
+
- Fixed transaction promise mutation issue #1991
|
|
9
|
+
|
|
10
|
+
### Other Changes:
|
|
11
|
+
- Allow passing version of connected db in configuration file #1993
|
|
12
|
+
- Bugfixes on batchInsert and transactions for mysql/maria #1992
|
|
13
|
+
- Add fetchAsString optional parameter to oracledb dialect #1998
|
|
14
|
+
- fix: escapeObject parameter order for Postgres dialect. #2003
|
|
15
|
+
|
|
16
|
+
# 0.12.9 - 23 Mar, 2017
|
|
17
|
+
- Fixed unhandled exception in batchInsert when the rows to be inserted resulted in duplicate key violation #1880
|
|
18
|
+
|
|
19
|
+
# 0.12.8 - 15 Mar, 2017
|
|
20
|
+
- Added clearSelect and clearWhere to query builder #1912
|
|
21
|
+
- Properly close Postgres query streams on error #1935
|
|
22
|
+
- Transactions should never reject with undefined #1970
|
|
23
|
+
- Clear acquireConnectionTimeout if an error occurs when acquiring a connection #1973
|
|
24
|
+
|
|
25
|
+
# 0.12.7 - 17 Feb, 2017
|
|
26
|
+
|
|
27
|
+
### Accidental Breaking Change:
|
|
28
|
+
- Ensure that 'client' is provided in knex config object #1822
|
|
29
|
+
|
|
30
|
+
### Other Changes:
|
|
31
|
+
- Support custom foreign key names #1311, #1726
|
|
32
|
+
- Fixed named bindings to work with queries containing `:`-chars #1890
|
|
33
|
+
- Exposed more promise functions #1896
|
|
34
|
+
- Pass rollback errors to transaction promise in mssql #1885
|
|
35
|
+
- ONLY keyword support for PostgreSQL (for table inheritance) #1874
|
|
36
|
+
- Fixed Mssql update with join syntax #1777
|
|
37
|
+
- Replace migrations and seed for react-native packager #1813
|
|
38
|
+
- Support knexfile, migration and seeds in TypeScript #1769
|
|
39
|
+
- Fix float to integer conversion of decimal fields in MSSQL #1781
|
|
40
|
+
- External authentication capability when using oracledb driver #1716
|
|
41
|
+
- Fixed MSSQL incorect query build when locks are used #1707
|
|
42
|
+
- Allow to use `first` method as aliased select #1784
|
|
43
|
+
- Alter column for nullability, type and default value #46, #1759
|
|
3
44
|
- Add more having* methods / join clause on* methods #1674
|
|
45
|
+
- Compatibility fixes and cleanups #1788, #1792, #1794, #1814, #1857, #1649
|
|
4
46
|
|
|
5
47
|
# 0.12.6 - 19 Oct, 2016
|
|
6
48
|
- Address warnings mentioned in #1388 (#1740)
|
package/CONTRIBUTING.md
CHANGED
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
|
|
13
13
|
* All pull requests should be made to the `master` branch.
|
|
14
14
|
|
|
15
|
+
## Documentation
|
|
16
|
+
|
|
17
|
+
Documentation is no longer maintained in knex master repository. All the documentation pull requests should be sent to https://github.com/knex/documentation
|
|
18
|
+
|
|
19
|
+
Documentation pull requests should not be merged before knex version which has the new documented feature is released.
|
|
20
|
+
|
|
15
21
|
## Integration Tests
|
|
16
22
|
|
|
17
23
|
### The Easy Way
|
|
@@ -65,7 +71,7 @@ There is always room for more collaborators. Be active on resolving github issue
|
|
|
65
71
|
|
|
66
72
|
### Etiquette (/ˈɛtᵻkɛt/ or /ˈɛtᵻkɪt/, French: [e.ti.kɛt])
|
|
67
73
|
|
|
68
|
-
Make pull requests for your changes, do not commit directly to master (release stuff
|
|
74
|
+
Make pull requests for your changes, do not commit directly to master (release stuff like fixing changelog are ok though).
|
|
69
75
|
|
|
70
76
|
All the pull requests must be peer reviewed by other collaborator, so don't merge your request before that. If there is no response ping others.
|
|
71
77
|
|
package/bin/cli.js
CHANGED
|
@@ -71,7 +71,7 @@ function initKnex(env) {
|
|
|
71
71
|
|
|
72
72
|
function invoke(env) {
|
|
73
73
|
|
|
74
|
-
var filetypes = ['js', 'coffee', 'eg', 'ls'];
|
|
74
|
+
var filetypes = ['js', 'coffee', 'ts', 'eg', 'ls'];
|
|
75
75
|
var pending = null;
|
|
76
76
|
|
|
77
77
|
commander
|
|
@@ -110,7 +110,7 @@ function invoke(env) {
|
|
|
110
110
|
|
|
111
111
|
commander
|
|
112
112
|
.command('migrate:make <name>')
|
|
113
|
-
.description('
|
|
113
|
+
.description(' Create a named migration file.')
|
|
114
114
|
.option(`-x [${filetypes.join('|')}]`, 'Specify the stub extension (default js)')
|
|
115
115
|
.action(function(name) {
|
|
116
116
|
var instance = initKnex(env);
|
|
@@ -152,7 +152,7 @@ function invoke(env) {
|
|
|
152
152
|
|
|
153
153
|
commander
|
|
154
154
|
.command('migrate:currentVersion')
|
|
155
|
-
.description('
|
|
155
|
+
.description(' View the current version for the migration.')
|
|
156
156
|
.action(function () {
|
|
157
157
|
pending = initKnex(env).migrate.currentVersion().then(function(version) {
|
|
158
158
|
success(chalk.green('Current Version: ') + chalk.blue(version));
|
|
@@ -161,7 +161,7 @@ function invoke(env) {
|
|
|
161
161
|
|
|
162
162
|
commander
|
|
163
163
|
.command('seed:make <name>')
|
|
164
|
-
.description('
|
|
164
|
+
.description(' Create a named seed file.')
|
|
165
165
|
.option(`-x [${filetypes.join('|')}]`, 'Specify the stub extension (default js)')
|
|
166
166
|
.action(function(name) {
|
|
167
167
|
var instance = initKnex(env);
|
|
@@ -173,7 +173,7 @@ function invoke(env) {
|
|
|
173
173
|
|
|
174
174
|
commander
|
|
175
175
|
.command('seed:run')
|
|
176
|
-
.description('
|
|
176
|
+
.description(' Run seed files.')
|
|
177
177
|
.action(function() {
|
|
178
178
|
pending = initKnex(env).seed.run().spread(function(log) {
|
|
179
179
|
if (log.length === 0) {
|
package/lib/client.js
CHANGED
|
@@ -100,6 +100,14 @@ function Client() {
|
|
|
100
100
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
101
101
|
|
|
102
102
|
this.config = config;
|
|
103
|
+
|
|
104
|
+
//Client is a required field, so throw error if it's not supplied.
|
|
105
|
+
//If 'this.dialect' is set, then this is a 'super()' call, in which case
|
|
106
|
+
//'client' does not have to be set as it's already assigned on the client prototype.
|
|
107
|
+
if (!this.config.client && !this.dialect) {
|
|
108
|
+
throw new Error('knex: Required configuration option \'client\' is missing.');
|
|
109
|
+
}
|
|
110
|
+
|
|
103
111
|
this.connectionSettings = (0, _cloneDeep3.default)(config.connection || {});
|
|
104
112
|
if (this.driverName && config.connection) {
|
|
105
113
|
this.initializeDriver();
|
|
@@ -279,10 +287,10 @@ function Client() {
|
|
|
279
287
|
rejecter(new _bluebird2.default.TimeoutError('Knex: Timeout acquiring a connection. The pool is probably full. ' + 'Are you missing a .transacting(trx) call?'));
|
|
280
288
|
}, _this4.config.acquireConnectionTimeout || 60000);
|
|
281
289
|
_this4.pool.acquire(function (err, connection) {
|
|
290
|
+
clearTimeout(t);
|
|
282
291
|
if (err) {
|
|
283
292
|
return rejecter(err);
|
|
284
293
|
}
|
|
285
|
-
clearTimeout(t);
|
|
286
294
|
if (wasRejected) {
|
|
287
295
|
_this4.pool.release(connection);
|
|
288
296
|
} else {
|
|
@@ -14,6 +14,10 @@ var _inherits2 = require('babel-runtime/helpers/inherits');
|
|
|
14
14
|
|
|
15
15
|
var _inherits3 = _interopRequireDefault(_inherits2);
|
|
16
16
|
|
|
17
|
+
var _isUndefined2 = require('lodash/isUndefined');
|
|
18
|
+
|
|
19
|
+
var _isUndefined3 = _interopRequireDefault(_isUndefined2);
|
|
20
|
+
|
|
17
21
|
var _debug = require('debug');
|
|
18
22
|
|
|
19
23
|
var _debug2 = _interopRequireDefault(_debug);
|
|
@@ -53,7 +57,12 @@ var Transaction_Maria = function (_Transaction) {
|
|
|
53
57
|
debug('%s error running transaction query', t.txid);
|
|
54
58
|
}).tap(function () {
|
|
55
59
|
if (status === 1) t._resolver(value);
|
|
56
|
-
if (status === 2)
|
|
60
|
+
if (status === 2) {
|
|
61
|
+
if ((0, _isUndefined3.default)(value)) {
|
|
62
|
+
value = new Error('Transaction rejected with non-error: ' + value);
|
|
63
|
+
}
|
|
64
|
+
t._rejecter(value);
|
|
65
|
+
}
|
|
57
66
|
});
|
|
58
67
|
if (status === 1 || status === 2) {
|
|
59
68
|
t._completed = true;
|
|
@@ -180,8 +180,8 @@ function Client_MSSQL(config) {
|
|
|
180
180
|
rejecter(err);
|
|
181
181
|
});
|
|
182
182
|
stream.on('end', resolver);
|
|
183
|
-
var _obj = obj
|
|
184
|
-
|
|
183
|
+
var _obj = obj,
|
|
184
|
+
sql = _obj.sql;
|
|
185
185
|
|
|
186
186
|
if (!sql) return resolver();
|
|
187
187
|
var req = (connection.tx_ || connection).request();
|
|
@@ -207,8 +207,8 @@ function Client_MSSQL(config) {
|
|
|
207
207
|
// convert ? params into positional bindings (@p1)
|
|
208
208
|
obj.sql = this.positionBindings(obj.sql);
|
|
209
209
|
return new _bluebird2.default(function (resolver, rejecter) {
|
|
210
|
-
var _obj2 = obj
|
|
211
|
-
|
|
210
|
+
var _obj2 = obj,
|
|
211
|
+
sql = _obj2.sql;
|
|
212
212
|
|
|
213
213
|
if (!sql) return resolver();
|
|
214
214
|
var req = (connection.tx_ || connection).request();
|
|
@@ -230,13 +230,19 @@ function Client_MSSQL(config) {
|
|
|
230
230
|
},
|
|
231
231
|
|
|
232
232
|
|
|
233
|
-
// sets a request input parameter. Detects bigints and sets type appropriately.
|
|
233
|
+
// sets a request input parameter. Detects bigints and decimals and sets type appropriately.
|
|
234
234
|
_setReqInput: function _setReqInput(req, i, binding) {
|
|
235
|
-
if (typeof binding == 'number'
|
|
236
|
-
if (binding
|
|
237
|
-
|
|
235
|
+
if (typeof binding == 'number') {
|
|
236
|
+
if (binding % 1 !== 0) {
|
|
237
|
+
req.input('p' + i, this.driver.Decimal(38, 10), binding);
|
|
238
|
+
} else if (binding < SQL_INT4.MIN || binding > SQL_INT4.MAX) {
|
|
239
|
+
if (binding < SQL_BIGINT_SAFE.MIN || binding > SQL_BIGINT_SAFE.MAX) {
|
|
240
|
+
throw new Error('Bigint must be safe integer or must be passed as string, saw ' + binding);
|
|
241
|
+
}
|
|
242
|
+
req.input('p' + i, this.driver.BigInt, binding);
|
|
243
|
+
} else {
|
|
244
|
+
req.input('p' + i, this.driver.Int, binding);
|
|
238
245
|
}
|
|
239
|
-
req.input('p' + i, this.driver.BigInt, binding);
|
|
240
246
|
} else {
|
|
241
247
|
req.input('p' + i, binding);
|
|
242
248
|
}
|
|
@@ -6,6 +6,10 @@ var _typeof2 = require('babel-runtime/helpers/typeof');
|
|
|
6
6
|
|
|
7
7
|
var _typeof3 = _interopRequireDefault(_typeof2);
|
|
8
8
|
|
|
9
|
+
var _compact2 = require('lodash/compact');
|
|
10
|
+
|
|
11
|
+
var _compact3 = _interopRequireDefault(_compact2);
|
|
12
|
+
|
|
9
13
|
var _isEmpty2 = require('lodash/isEmpty');
|
|
10
14
|
|
|
11
15
|
var _isEmpty3 = _interopRequireDefault(_isEmpty2);
|
|
@@ -31,10 +35,23 @@ function QueryCompiler_MSSQL(client, builder) {
|
|
|
31
35
|
}
|
|
32
36
|
(0, _inherits2.default)(QueryCompiler_MSSQL, _compiler2.default);
|
|
33
37
|
|
|
38
|
+
var components = ['columns', 'join', 'lock', 'where', 'union', 'group', 'having', 'order', 'limit', 'offset'];
|
|
39
|
+
|
|
34
40
|
(0, _assign3.default)(QueryCompiler_MSSQL.prototype, {
|
|
35
41
|
|
|
36
42
|
_emptyInsertValue: 'default values',
|
|
37
43
|
|
|
44
|
+
select: function select() {
|
|
45
|
+
var _this = this;
|
|
46
|
+
|
|
47
|
+
var sql = this.with();
|
|
48
|
+
var statements = components.map(function (component) {
|
|
49
|
+
return _this[component](_this);
|
|
50
|
+
});
|
|
51
|
+
return sql + (0, _compact3.default)(statements).join(' ');
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
|
|
38
55
|
// Compiles an "insert" query, allowing for multiple
|
|
39
56
|
// inserts using a single query statement.
|
|
40
57
|
insert: function insert() {
|
|
@@ -91,7 +108,7 @@ function QueryCompiler_MSSQL(client, builder) {
|
|
|
91
108
|
var returning = this.single.returning;
|
|
92
109
|
|
|
93
110
|
return {
|
|
94
|
-
sql: this.with() + ('update ' + (top ? top + ' ' : '') + this.tableName) +
|
|
111
|
+
sql: this.with() + ('update ' + (top ? top + ' ' : '') + this.tableName) + ' set ' + updates.join(', ') + (join ? ' from ' + this.tableName + ' ' + join : '') + (returning ? ' ' + this._returning('update', returning) : '') + (where ? ' ' + where : '') + (order ? ' ' + order : '') + (!returning ? this._returning('rowcount', '@@rowcount') : ''),
|
|
95
112
|
returning: returning || '@@rowcount'
|
|
96
113
|
};
|
|
97
114
|
},
|
|
@@ -60,11 +60,15 @@ function TableCompiler_MSSQL() {
|
|
|
60
60
|
|
|
61
61
|
dropColumnPrefix: 'DROP COLUMN ',
|
|
62
62
|
|
|
63
|
+
alterColumnPrefix: 'ALTER COLUMN ',
|
|
64
|
+
|
|
63
65
|
// Compiles column add. Multiple columns need only one ADD clause (not one ADD per column) so core addColumns doesn't work. #1348
|
|
64
|
-
addColumns: function addColumns(columns) {
|
|
66
|
+
addColumns: function addColumns(columns, prefix) {
|
|
67
|
+
prefix = prefix || this.addColumnsPrefix;
|
|
68
|
+
|
|
65
69
|
if (columns.sql.length > 0) {
|
|
66
70
|
this.pushQuery({
|
|
67
|
-
sql: (this.lowerCase ? 'alter table ' : 'ALTER TABLE ') + this.tableName() + ' ' +
|
|
71
|
+
sql: (this.lowerCase ? 'alter table ' : 'ALTER TABLE ') + this.tableName() + ' ' + prefix + columns.sql.join(', '),
|
|
68
72
|
bindings: columns.bindings
|
|
69
73
|
});
|
|
70
74
|
}
|
|
@@ -69,6 +69,9 @@ var Transaction_MSSQL = function (_Transaction) {
|
|
|
69
69
|
debug('%s: rolling back', this.txid);
|
|
70
70
|
return conn.tx_.rollback().then(function () {
|
|
71
71
|
return _this4._rejecter(error);
|
|
72
|
+
}, function (err) {
|
|
73
|
+
if (error) err.originalError = error;
|
|
74
|
+
return _this4._rejecter(err);
|
|
72
75
|
});
|
|
73
76
|
};
|
|
74
77
|
|
|
@@ -144,8 +144,8 @@ function Client_MySQL(config) {
|
|
|
144
144
|
_query: function _query(connection, obj) {
|
|
145
145
|
if (!obj || typeof obj === 'string') obj = { sql: obj };
|
|
146
146
|
return new _bluebird2.default(function (resolver, rejecter) {
|
|
147
|
-
var _obj = obj
|
|
148
|
-
|
|
147
|
+
var _obj = obj,
|
|
148
|
+
sql = _obj.sql;
|
|
149
149
|
|
|
150
150
|
if (!sql) return resolver();
|
|
151
151
|
if (obj.options) sql = (0, _assign3.default)({ sql: sql }, obj.options);
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
|
|
5
|
+
var _isUndefined2 = require('lodash/isUndefined');
|
|
6
|
+
|
|
7
|
+
var _isUndefined3 = _interopRequireDefault(_isUndefined2);
|
|
8
|
+
|
|
5
9
|
var _assign2 = require('lodash/assign');
|
|
6
10
|
|
|
7
11
|
var _assign3 = _interopRequireDefault(_assign2);
|
|
@@ -47,7 +51,12 @@ function Transaction_MySQL() {
|
|
|
47
51
|
debug('%s error running transaction query', t.txid);
|
|
48
52
|
}).tap(function () {
|
|
49
53
|
if (status === 1) t._resolver(value);
|
|
50
|
-
if (status === 2)
|
|
54
|
+
if (status === 2) {
|
|
55
|
+
if ((0, _isUndefined3.default)(value)) {
|
|
56
|
+
value = new Error('Transaction rejected with non-error: ' + value);
|
|
57
|
+
}
|
|
58
|
+
t._rejecter(value);
|
|
59
|
+
}
|
|
51
60
|
});
|
|
52
61
|
if (status === 1 || status === 2) {
|
|
53
62
|
t._completed = true;
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
|
|
5
|
+
var _isUndefined2 = require('lodash/isUndefined');
|
|
6
|
+
|
|
7
|
+
var _isUndefined3 = _interopRequireDefault(_isUndefined2);
|
|
8
|
+
|
|
5
9
|
var _assign2 = require('lodash/assign');
|
|
6
10
|
|
|
7
11
|
var _assign3 = _interopRequireDefault(_assign2);
|
|
@@ -44,7 +48,12 @@ function Transaction_MySQL2() {
|
|
|
44
48
|
debug('%s error running transaction query', t.txid);
|
|
45
49
|
}).tap(function () {
|
|
46
50
|
if (status === 1) t._resolver(value);
|
|
47
|
-
if (status === 2)
|
|
51
|
+
if (status === 2) {
|
|
52
|
+
if ((0, _isUndefined3.default)(value)) {
|
|
53
|
+
value = new Error('Transaction rejected with non-error: ' + value);
|
|
54
|
+
}
|
|
55
|
+
t._rejecter(value);
|
|
56
|
+
}
|
|
48
57
|
});
|
|
49
58
|
if (status === 1 || status === 2) {
|
|
50
59
|
t._completed = true;
|
|
@@ -66,10 +66,6 @@ var _tablecompiler = require('./schema/tablecompiler');
|
|
|
66
66
|
|
|
67
67
|
var _tablecompiler2 = _interopRequireDefault(_tablecompiler);
|
|
68
68
|
|
|
69
|
-
var _stream2 = require('./stream');
|
|
70
|
-
|
|
71
|
-
var _stream3 = _interopRequireDefault(_stream2);
|
|
72
|
-
|
|
73
69
|
var _utils = require('./utils');
|
|
74
70
|
|
|
75
71
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
@@ -79,12 +75,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
79
75
|
// Always initialize with the "QueryBuilder" and "QueryCompiler"
|
|
80
76
|
// objects, which extend the base 'lib/query/builder' and
|
|
81
77
|
// 'lib/query/compiler', respectively.
|
|
82
|
-
|
|
83
|
-
// Oracle Client
|
|
84
|
-
// -------
|
|
85
78
|
function Client_Oracle(config) {
|
|
86
79
|
_client2.default.call(this, config);
|
|
87
80
|
}
|
|
81
|
+
// Oracle Client
|
|
82
|
+
// -------
|
|
83
|
+
|
|
88
84
|
(0, _inherits2.default)(Client_Oracle, _client2.default);
|
|
89
85
|
|
|
90
86
|
(0, _assign3.default)(Client_Oracle.prototype, {
|
|
@@ -183,7 +179,7 @@ function Client_Oracle(config) {
|
|
|
183
179
|
rejecter(err);
|
|
184
180
|
});
|
|
185
181
|
stream.on('end', resolver);
|
|
186
|
-
var queryStream =
|
|
182
|
+
var queryStream = connection.queryStream(obj.sql, obj.bindings, options);
|
|
187
183
|
queryStream.pipe(stream);
|
|
188
184
|
});
|
|
189
185
|
},
|
|
@@ -188,13 +188,16 @@ function QueryCompiler_Oracle(client, builder) {
|
|
|
188
188
|
// Compiles a `columnInfo` query.
|
|
189
189
|
columnInfo: function columnInfo() {
|
|
190
190
|
var column = this.single.columnInfo;
|
|
191
|
+
// Node oracle drivers doesn't support LONG type (which is data_default type)
|
|
192
|
+
var sql = 'select * from xmltable( \'/ROWSET/ROW\'\n passing dbms_xmlgen.getXMLType(\'\n select char_col_decl_length, column_name, data_type, data_default, nullable\n from user_tab_columns where table_name = \'\'' + this.single.table + '\'\' \')\n columns\n CHAR_COL_DECL_LENGTH number, COLUMN_NAME varchar2(200), DATA_TYPE varchar2(106),\n DATA_DEFAULT clob, NULLABLE varchar2(1))';
|
|
193
|
+
|
|
191
194
|
return {
|
|
192
|
-
sql:
|
|
193
|
-
bindings: [this.single.table],
|
|
195
|
+
sql: sql,
|
|
194
196
|
output: function output(resp) {
|
|
195
197
|
var out = (0, _reduce3.default)(resp, function (columns, val) {
|
|
196
198
|
columns[val.COLUMN_NAME] = {
|
|
197
199
|
type: val.DATA_TYPE,
|
|
200
|
+
defaultValue: val.DATA_DEFAULT,
|
|
198
201
|
maxLength: val.CHAR_COL_DECL_LENGTH,
|
|
199
202
|
nullable: val.NULLABLE === 'Y'
|
|
200
203
|
};
|
|
@@ -18,10 +18,6 @@ var _inherits = require('inherits');
|
|
|
18
18
|
|
|
19
19
|
var _inherits2 = _interopRequireDefault(_inherits);
|
|
20
20
|
|
|
21
|
-
var _utils = require('../utils');
|
|
22
|
-
|
|
23
|
-
var utils = _interopRequireWildcard(_utils);
|
|
24
|
-
|
|
25
21
|
var _raw = require('../../../raw');
|
|
26
22
|
|
|
27
23
|
var _raw2 = _interopRequireDefault(_raw);
|
|
@@ -30,7 +26,9 @@ var _columncompiler = require('../../../schema/columncompiler');
|
|
|
30
26
|
|
|
31
27
|
var _columncompiler2 = _interopRequireDefault(_columncompiler);
|
|
32
28
|
|
|
33
|
-
|
|
29
|
+
var _trigger = require('./trigger');
|
|
30
|
+
|
|
31
|
+
var _trigger2 = _interopRequireDefault(_trigger);
|
|
34
32
|
|
|
35
33
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
36
34
|
|
|
@@ -38,8 +36,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
38
36
|
// -------
|
|
39
37
|
|
|
40
38
|
function ColumnCompiler_Oracle() {
|
|
41
|
-
this.modifiers = ['defaultTo', 'checkIn', 'nullable', 'comment'];
|
|
42
39
|
_columncompiler2.default.apply(this, arguments);
|
|
40
|
+
this.modifiers = ['defaultTo', 'checkIn', 'nullable', 'comment'];
|
|
43
41
|
}
|
|
44
42
|
(0, _inherits2.default)(ColumnCompiler_Oracle, _columncompiler2.default);
|
|
45
43
|
|
|
@@ -49,12 +47,8 @@ function ColumnCompiler_Oracle() {
|
|
|
49
47
|
_createAutoIncrementTriggerAndSequence: function _createAutoIncrementTriggerAndSequence() {
|
|
50
48
|
// TODO Add warning that sequence etc is created
|
|
51
49
|
this.pushAdditional(function () {
|
|
52
|
-
var
|
|
53
|
-
var
|
|
54
|
-
var tableName = this.tableCompiler.tableName();
|
|
55
|
-
var columnName = this.formatter.wrap(this.getColumnName());
|
|
56
|
-
var createTriggerSQL = 'create or replace trigger ' + triggerName + ' before insert on ' + tableName + ' for each row' + ' declare' + ' checking number := 1;' + ' begin' + (' if (:new.' + columnName + ' is null) then') + ' while checking >= 1' + ' loop' + (' select ' + sequenceName + '.nextval into :new.' + columnName + ' from dual;') + (' select count(' + columnName + ') into checking from ' + tableName) + (' where ' + columnName + ' = :new.' + columnName + ';') + ' end loop;' + ' end if;' + ' end;';
|
|
57
|
-
this.pushQuery(utils.wrapSqlWithCatch('create sequence ' + sequenceName, -955));
|
|
50
|
+
var tableName = this.tableCompiler.tableNameRaw;
|
|
51
|
+
var createTriggerSQL = _trigger2.default.createAutoIncrementTrigger(tableName);
|
|
58
52
|
this.pushQuery(createTriggerSQL);
|
|
59
53
|
});
|
|
60
54
|
},
|
|
@@ -14,21 +14,25 @@ var _utils = require('../utils');
|
|
|
14
14
|
|
|
15
15
|
var utils = _interopRequireWildcard(_utils);
|
|
16
16
|
|
|
17
|
+
var _trigger = require('./trigger');
|
|
18
|
+
|
|
19
|
+
var _trigger2 = _interopRequireDefault(_trigger);
|
|
20
|
+
|
|
17
21
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
18
22
|
|
|
19
23
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
24
|
|
|
25
|
+
// Oracle Schema Compiler
|
|
26
|
+
// -------
|
|
21
27
|
function SchemaCompiler_Oracle() {
|
|
22
28
|
_compiler2.default.apply(this, arguments);
|
|
23
29
|
}
|
|
24
|
-
// Oracle Schema Compiler
|
|
25
|
-
// -------
|
|
26
|
-
|
|
27
30
|
(0, _inherits2.default)(SchemaCompiler_Oracle, _compiler2.default);
|
|
28
31
|
|
|
29
32
|
// Rename a table on the schema.
|
|
30
33
|
SchemaCompiler_Oracle.prototype.renameTable = function (tableName, to) {
|
|
31
|
-
|
|
34
|
+
var renameTable = _trigger2.default.renameTableAndAutoIncrementTrigger(tableName, to);
|
|
35
|
+
this.pushQuery(renameTable);
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
// Check whether a table exists on the query.
|
|
@@ -22,6 +22,10 @@ var _helpers = require('../../../helpers');
|
|
|
22
22
|
|
|
23
23
|
var helpers = _interopRequireWildcard(_helpers);
|
|
24
24
|
|
|
25
|
+
var _trigger = require('./trigger');
|
|
26
|
+
|
|
27
|
+
var _trigger2 = _interopRequireDefault(_trigger);
|
|
28
|
+
|
|
25
29
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
26
30
|
|
|
27
31
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -29,20 +33,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
29
33
|
// Table Compiler
|
|
30
34
|
// ------
|
|
31
35
|
|
|
32
|
-
/* eslint max-len:0 */
|
|
33
|
-
|
|
34
36
|
function TableCompiler_Oracle() {
|
|
35
37
|
_tablecompiler2.default.apply(this, arguments);
|
|
36
|
-
}
|
|
38
|
+
} /* eslint max-len:0 */
|
|
39
|
+
|
|
37
40
|
(0, _inherits2.default)(TableCompiler_Oracle, _tablecompiler2.default);
|
|
38
41
|
|
|
39
42
|
(0, _assign3.default)(TableCompiler_Oracle.prototype, {
|
|
40
43
|
|
|
41
44
|
// Compile a rename column command.
|
|
42
45
|
renameColumn: function renameColumn(from, to) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
// Remove quotes around tableName
|
|
47
|
+
var tableName = this.tableName().slice(1, -1);
|
|
48
|
+
return this.pushQuery(_trigger2.default.renameColumnTrigger(tableName, from, to));
|
|
46
49
|
},
|
|
47
50
|
compileAdd: function compileAdd(builder) {
|
|
48
51
|
var table = this.formatter.wrap(builder);
|
|
@@ -73,6 +76,8 @@ function TableCompiler_Oracle() {
|
|
|
73
76
|
|
|
74
77
|
addColumnsPrefix: 'add ',
|
|
75
78
|
|
|
79
|
+
alterColumnsPrefix: 'modify ',
|
|
80
|
+
|
|
76
81
|
dropColumn: function dropColumn() {
|
|
77
82
|
var columns = helpers.normalizeArr.apply(null, arguments);
|
|
78
83
|
this.pushQuery('alter table ' + this.tableName() + ' drop (' + this.formatter.columnize(columns) + ')');
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
|
|
5
|
+
var _utils = require('../utils');
|
|
6
|
+
|
|
7
|
+
var utils = _interopRequireWildcard(_utils);
|
|
8
|
+
|
|
9
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
10
|
+
|
|
11
|
+
var trigger = {
|
|
12
|
+
|
|
13
|
+
renameColumnTrigger: function renameColumnTrigger(tableName, columnName, to) {
|
|
14
|
+
var triggerName = utils.generateCombinedName('autoinc_trg', tableName);
|
|
15
|
+
var sequenceName = utils.generateCombinedName('seq', tableName);
|
|
16
|
+
return 'DECLARE ' + 'PK_NAME VARCHAR(200); ' + 'IS_AUTOINC NUMBER := 0; ' + 'BEGIN' + (' EXECUTE IMMEDIATE (\'ALTER TABLE "' + tableName + '" RENAME COLUMN "' + columnName + '" TO "' + to + '"\');') + (' SELECT COUNT(*) INTO IS_AUTOINC from "USER_TRIGGERS" where trigger_name = \'' + triggerName + '\';') + ' IF (IS_AUTOINC > 0) THEN' + ' SELECT cols.column_name INTO PK_NAME' + ' FROM all_constraints cons, all_cons_columns cols' + ' WHERE cons.constraint_type = \'P\'' + ' AND cons.constraint_name = cols.constraint_name' + ' AND cons.owner = cols.owner' + (' AND cols.table_name = \'' + tableName + '\';') + (' IF (\'' + to + '\' = PK_NAME) THEN') + (' EXECUTE IMMEDIATE (\'DROP TRIGGER "' + triggerName + '"\');') + (' EXECUTE IMMEDIATE (\'create or replace trigger "' + triggerName + '"') + (' BEFORE INSERT on "' + tableName + '" for each row') + ' declare' + ' checking number := 1;' + ' begin' + (' if (:new."' + to + '" is null) then') + ' while checking >= 1 loop' + (' select "' + sequenceName + '".nextval into :new."' + to + '" from dual;') + (' select count("' + to + '") into checking from "' + tableName + '"') + (' where "' + to + '" = :new."' + to + '";') + ' end loop;' + ' end if;' + ' end;\');' + ' end if;' + ' end if;' + 'END;';
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
createAutoIncrementTrigger: function createAutoIncrementTrigger(tableName) {
|
|
20
|
+
var triggerName = utils.generateCombinedName('autoinc_trg', tableName);
|
|
21
|
+
var sequenceName = utils.generateCombinedName('seq', tableName);
|
|
22
|
+
return 'DECLARE ' + 'PK_NAME VARCHAR(200); ' + 'BEGIN' + (' EXECUTE IMMEDIATE (\'CREATE SEQUENCE "' + sequenceName + '"\');') + ' SELECT cols.column_name INTO PK_NAME' + ' FROM all_constraints cons, all_cons_columns cols' + ' WHERE cons.constraint_type = \'P\'' + ' AND cons.constraint_name = cols.constraint_name' + ' AND cons.owner = cols.owner' + (' AND cols.table_name = \'' + tableName + '\';') + (' execute immediate (\'create or replace trigger "' + triggerName + '"') + (' BEFORE INSERT on "' + tableName + '"') + ' for each row' + ' declare' + ' checking number := 1;' + ' begin' + ' if (:new."\' || PK_NAME || \'" is null) then' + ' while checking >= 1 loop' + (' select "' + sequenceName + '".nextval into :new."\' || PK_NAME || \'" from dual;') + (' select count("\' || PK_NAME || \'") into checking from "' + tableName + '"') + ' where "\' || PK_NAME || \'" = :new."\' || PK_NAME || \'";' + ' end loop;' + ' end if;' + ' end;\'); ' + 'END;';
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
renameTableAndAutoIncrementTrigger: function renameTableAndAutoIncrementTrigger(tableName, to) {
|
|
26
|
+
var triggerName = utils.generateCombinedName('autoinc_trg', tableName);
|
|
27
|
+
var sequenceName = utils.generateCombinedName('seq', tableName);
|
|
28
|
+
var toTriggerName = utils.generateCombinedName('autoinc_trg', to);
|
|
29
|
+
var toSequenceName = utils.generateCombinedName('seq', to);
|
|
30
|
+
return 'DECLARE ' + 'PK_NAME VARCHAR(200); ' + 'IS_AUTOINC NUMBER := 0; ' + 'BEGIN' + (' EXECUTE IMMEDIATE (\'RENAME "' + tableName + '" TO "' + to + '"\');') + (' SELECT COUNT(*) INTO IS_AUTOINC from "USER_TRIGGERS" where trigger_name = \'' + triggerName + '\';') + ' IF (IS_AUTOINC > 0) THEN' + (' EXECUTE IMMEDIATE (\'DROP TRIGGER "' + triggerName + '"\');') + (' EXECUTE IMMEDIATE (\'RENAME "' + sequenceName + '" TO "' + toSequenceName + '"\');') + ' SELECT cols.column_name INTO PK_NAME' + ' FROM all_constraints cons, all_cons_columns cols' + ' WHERE cons.constraint_type = \'P\'' + ' AND cons.constraint_name = cols.constraint_name' + ' AND cons.owner = cols.owner' + (' AND cols.table_name = \'' + to + '\';') + (' EXECUTE IMMEDIATE (\'create or replace trigger "' + toTriggerName + '"') + (' BEFORE INSERT on "' + to + '" for each row') + ' declare' + ' checking number := 1;' + ' begin' + ' if (:new."\' || PK_NAME || \'" is null) then' + ' while checking >= 1 loop' + (' select "' + toSequenceName + '".nextval into :new."\' || PK_NAME || \'" from dual;') + (' select count("\' || PK_NAME || \'") into checking from "' + to + '"') + ' where "\' || PK_NAME || \'" = :new."\' || PK_NAME || \'";' + ' end loop;' + ' end if;' + ' end;\');' + ' end if;' + 'END;';
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.default = trigger;
|
|
35
|
+
module.exports = exports['default'];
|
|
@@ -14,6 +14,10 @@ var _inherits2 = require('babel-runtime/helpers/inherits');
|
|
|
14
14
|
|
|
15
15
|
var _inherits3 = _interopRequireDefault(_inherits2);
|
|
16
16
|
|
|
17
|
+
var _isUndefined2 = require('lodash/isUndefined');
|
|
18
|
+
|
|
19
|
+
var _isUndefined3 = _interopRequireDefault(_isUndefined2);
|
|
20
|
+
|
|
17
21
|
var _bluebird = require('bluebird');
|
|
18
22
|
|
|
19
23
|
var _bluebird2 = _interopRequireDefault(_bluebird);
|
|
@@ -49,9 +53,17 @@ var Oracle_Transaction = function (_Transaction) {
|
|
|
49
53
|
};
|
|
50
54
|
|
|
51
55
|
Oracle_Transaction.prototype.rollback = function rollback(conn, err) {
|
|
56
|
+
var _this2 = this;
|
|
57
|
+
|
|
52
58
|
this._completed = true;
|
|
53
59
|
debugTx('%s: rolling back', this.txid);
|
|
54
|
-
return conn.rollbackAsync().throw(err).catch(
|
|
60
|
+
return conn.rollbackAsync().throw(err).catch(function (error) {
|
|
61
|
+
if ((0, _isUndefined3.default)(error)) {
|
|
62
|
+
error = new Error('Transaction rejected with non-error: ' + error);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return _this2._rejecter(error);
|
|
66
|
+
});
|
|
55
67
|
};
|
|
56
68
|
|
|
57
69
|
Oracle_Transaction.prototype.acquireConnection = function acquireConnection(config) {
|