fixed lint issues, fixed mssql transaction

This commit is contained in:
Sky Morey 2015-12-10 13:35:37 -06:00
parent afd6b66624
commit 198aa0db4b
8 changed files with 101 additions and 96 deletions

View File

@ -48,17 +48,13 @@ assign(ColumnCompiler_MSSQL.prototype, {
return 'nvarchar(' + this._num(length, 255) + ')'; return 'nvarchar(' + this._num(length, 255) + ')';
}, },
text: function text(column) { text: 'nvarchar(max)',
return 'nvarchar(max)';
},
mediumtext: 'nvarchar(max)', mediumtext: 'nvarchar(max)',
longtext: 'nvarchar(max)', longtext: 'nvarchar(max)',
enu: function enu(allowed) { enu: 'nvarchar(100)',
return 'nvarchar(100)';
},
uuid: 'uniqueidentifier', uuid: 'uniqueidentifier',

View File

@ -46,7 +46,7 @@ assign(TableCompiler_MSSQL.prototype, {
dropColumnPrefix: 'drop column ', dropColumnPrefix: 'drop column ',
// Compiles the comment on the table. // Compiles the comment on the table.
comment: function comment(_comment) {}, comment: function comment() {},
changeType: function changeType() {}, changeType: function changeType() {},
@ -55,14 +55,22 @@ assign(TableCompiler_MSSQL.prototype, {
this.pushQuery('exec sp_rename ' + this.formatter.parameter(this.tableName() + '.' + from) + ', ' + this.formatter.parameter(to) + ', \'COLUMN\''); this.pushQuery('exec sp_rename ' + this.formatter.parameter(this.tableName() + '.' + from) + ', ' + this.formatter.parameter(to) + ', \'COLUMN\'');
}, },
getFKRefs: function getFKRefs(runner) { // getFKRefs: function (runner) {
var formatter = this.client.formatter(); // var formatter = this.client.formatter();
var sql = 'SELECT KCU.CONSTRAINT_NAME, KCU.TABLE_NAME, KCU.COLUMN_NAME, ' + ' KCU.REFERENCED_TABLE_NAME, KCU.REFERENCED_COLUMN_NAME, ' + ' RC.UPDATE_RULE, RC.DELETE_RULE ' + 'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU ' + 'JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC ' + ' USING(CONSTRAINT_NAME)' + 'WHERE KCU.REFERENCED_TABLE_NAME = ' + formatter.parameter(this.tableNameRaw) + ' ' + ' AND KCU.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database()) + ' ' + ' AND RC.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database()); // var sql = 'SELECT KCU.CONSTRAINT_NAME, KCU.TABLE_NAME, KCU.COLUMN_NAME, '+
return runner.query({ // ' KCU.REFERENCED_TABLE_NAME, KCU.REFERENCED_COLUMN_NAME, '+
sql: sql, // ' RC.UPDATE_RULE, RC.DELETE_RULE '+
bindings: formatter.bindings // 'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU '+
}); // 'JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC '+
}, // ' USING(CONSTRAINT_NAME)' +
// 'WHERE KCU.REFERENCED_TABLE_NAME = ' + formatter.parameter(this.tableNameRaw) + ' '+
// ' AND KCU.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database()) + ' '+
// ' AND RC.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database());
// return runner.query({
// sql: sql,
// bindings: formatter.bindings
// });
// },
dropFKRefs: function dropFKRefs(runner, refs) { dropFKRefs: function dropFKRefs(runner, refs) {
var formatter = this.client.formatter(); var formatter = this.client.formatter();
return Promise.all(refs.map(function (ref) { return Promise.all(refs.map(function (ref) {

View File

@ -3,7 +3,6 @@
var inherits = require('inherits'); var inherits = require('inherits');
var assign = require('lodash/object/assign'); var assign = require('lodash/object/assign');
var Promise = require('../../promise'); var Promise = require('../../promise');
var helpers = require('../../helpers');
var Transaction = require('../../transaction'); var Transaction = require('../../transaction');
var debug = require('debug')('knex:tx'); var debug = require('debug')('knex:tx');
@ -15,42 +14,52 @@ inherits(Transaction_MSSQL, Transaction);
assign(Transaction_MSSQL.prototype, { assign(Transaction_MSSQL.prototype, {
begin: function begin(conn) { begin: function begin(conn) {
// console.log('begin', this.txid) debug('%s: begin', this.txid);
return conn.tx_.begin().then(this._resolver, this._rejecter); return conn.tx_.begin().then(this._resolver, this._rejecter);
//return this.query(conn, 'BEGIN TRANSACTION;')
}, },
savepoint: function savepoint(conn) { savepoint: function savepoint(conn) {
//console.log('savepoint', this.txid) var _this = this;
return Promise.resolve();
//return this.query(conn, 'SAVE TRANSACTION ' + this.txid + ';') debug('%s: savepoint at', this.txid);
return Promise.resolve().then(function () {
return _this.query(conn, 'SAVE TRANSACTION ' + _this.txid);
});
}, },
commit: function commit(conn, value) { commit: function commit(conn, value) {
//console.log('commit', this.txid) var _this2 = this;
this._completed = true; this._completed = true;
return conn.tx_.commit().then(this._resolver(value), this._rejecter); debug('%s: commit', this.txid);
//return this.query(conn, 'COMMIT TRANSACTION;', 1, value) return conn.tx_.commit().then(function () {
return _this2._resolver(value);
}, this._rejecter);
}, },
release: function release(conn, value) { release: function release(conn, value) {
//console.log('release', this.txid)
return this._resolver(value); return this._resolver(value);
//return ''
}, },
rollback: function rollback(conn, error) { rollback: function rollback(conn, error) {
//console.log('rollback', this.txid) var _this3 = this;
this._completed = true; this._completed = true;
debug('%s: rolling back', this.txid); debug('%s: rolling back', this.txid);
return conn.tx_.rollback()['catch'](this._rejecter(error)); return conn.tx_.rollback().then(function () {
//return this.query(conn, 'ROLLBACK TRANSACTION;', 2, error) return _this3._rejecter(error);
});
}, },
rollbackTo: function rollbackTo(conn, error) { rollbackTo: function rollbackTo(conn, error) {
//console.log('rollbackTo', this.txid) var _this4 = this;
return Promise.resolve();
//return this.query(conn, 'ROLLBACK TRANSACTION ' + this.txid, 2, error) debug('%s: rolling backTo', this.txid);
return Promise.resolve().then(function () {
return _this4.query(conn, 'ROLLBACK TRANSACTION ' + _this4.txid, 2, error);
}).then(function () {
return _this4._rejecter(error);
});
}, },
// Acquire a connection and create a disposer - either using the one passed // Acquire a connection and create a disposer - either using the one passed
@ -60,24 +69,25 @@ assign(Transaction_MSSQL.prototype, {
var t = this; var t = this;
var configConnection = config && config.connection; var configConnection = config && config.connection;
return Promise['try'](function () { return Promise['try'](function () {
return configConnection || t.client.acquireConnection(); return (t.outerTx ? t.outerTx.conn : null) || configConnection || t.client.acquireConnection();
}).tap(function (connection) { }).tap(function (conn) {
//console.log('acquireConnection:begin', !!t.outerTx, t.txid);
if (!t.outerTx) { if (!t.outerTx) {
connection.tx_ = connection.transaction(); t.conn = conn;
conn.tx_ = conn.transaction();
} }
}).disposer(function (connection) { }).disposer(function (conn) {
//console.log('acquireConnection:end', !!t.outerTx, t.txid); if (t.outerTx) return;
if (!t.outerTx && connection.tx_) { if (conn.tx_) {
if (!t._completed) { if (!t._completed) {
debug('%s: unreleased transaction', t.txid); debug('%s: unreleased transaction', t.txid);
connection.tx_.rollback(); conn.tx_.rollback();
} }
connection.tx_ = null; conn.tx_ = null;
} }
t.conn = null;
if (!configConnection) { if (!configConnection) {
debug('%s: releasing connection', t.txid); debug('%s: releasing connection', t.txid);
t.client.releaseConnection(connection); t.client.releaseConnection(conn);
} else { } else {
debug('%s: not releasing external connection', t.txid); debug('%s: not releasing external connection', t.txid);
} }

View File

@ -46,17 +46,13 @@ assign(ColumnCompiler_MSSQL.prototype, {
return 'nvarchar(' + this._num(length, 255) + ')'; return 'nvarchar(' + this._num(length, 255) + ')';
}, },
text: function(column) { text: 'nvarchar(max)',
return 'nvarchar(max)';
},
mediumtext: 'nvarchar(max)', mediumtext: 'nvarchar(max)',
longtext: 'nvarchar(max)', longtext: 'nvarchar(max)',
enu: function(allowed) { enu: 'nvarchar(100)',
return 'nvarchar(100)';
},
uuid: 'uniqueidentifier', uuid: 'uniqueidentifier',

View File

@ -43,7 +43,7 @@ assign(TableCompiler_MSSQL.prototype, {
dropColumnPrefix: 'drop column ', dropColumnPrefix: 'drop column ',
// Compiles the comment on the table. // Compiles the comment on the table.
comment: function(comment) { comment: function() {
}, },
changeType: function() { changeType: function() {
@ -54,22 +54,22 @@ assign(TableCompiler_MSSQL.prototype, {
this.pushQuery('exec sp_rename ' + this.formatter.parameter(this.tableName() + '.' + from) + ', ' + this.formatter.parameter(to) + ', \'COLUMN\''); this.pushQuery('exec sp_rename ' + this.formatter.parameter(this.tableName() + '.' + from) + ', ' + this.formatter.parameter(to) + ', \'COLUMN\'');
}, },
getFKRefs: function (runner) { // getFKRefs: function (runner) {
var formatter = this.client.formatter(); // var formatter = this.client.formatter();
var sql = 'SELECT KCU.CONSTRAINT_NAME, KCU.TABLE_NAME, KCU.COLUMN_NAME, '+ // var sql = 'SELECT KCU.CONSTRAINT_NAME, KCU.TABLE_NAME, KCU.COLUMN_NAME, '+
' KCU.REFERENCED_TABLE_NAME, KCU.REFERENCED_COLUMN_NAME, '+ // ' KCU.REFERENCED_TABLE_NAME, KCU.REFERENCED_COLUMN_NAME, '+
' RC.UPDATE_RULE, RC.DELETE_RULE '+ // ' RC.UPDATE_RULE, RC.DELETE_RULE '+
'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU '+ // 'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU '+
'JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC '+ // 'JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC '+
' USING(CONSTRAINT_NAME)' + // ' USING(CONSTRAINT_NAME)' +
'WHERE KCU.REFERENCED_TABLE_NAME = ' + formatter.parameter(this.tableNameRaw) + ' '+ // 'WHERE KCU.REFERENCED_TABLE_NAME = ' + formatter.parameter(this.tableNameRaw) + ' '+
' AND KCU.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database()) + ' '+ // ' AND KCU.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database()) + ' '+
' AND RC.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database()); // ' AND RC.CONSTRAINT_SCHEMA = ' + formatter.parameter(this.client.database());
return runner.query({ // return runner.query({
sql: sql, // sql: sql,
bindings: formatter.bindings // bindings: formatter.bindings
}); // });
}, // },
dropFKRefs: function (runner, refs) { dropFKRefs: function (runner, refs) {
var formatter = this.client.formatter(); var formatter = this.client.formatter();
return Promise.all(refs.map(function (ref) { return Promise.all(refs.map(function (ref) {

View File

@ -2,7 +2,6 @@
var inherits = require('inherits') var inherits = require('inherits')
var assign = require('lodash/object/assign'); var assign = require('lodash/object/assign');
var Promise = require('../../promise') var Promise = require('../../promise')
var helpers = require('../../helpers')
var Transaction = require('../../transaction') var Transaction = require('../../transaction')
var debug = require('debug')('knex:tx') var debug = require('debug')('knex:tx')
@ -14,45 +13,40 @@ inherits(Transaction_MSSQL, Transaction)
assign(Transaction_MSSQL.prototype, { assign(Transaction_MSSQL.prototype, {
begin: function(conn) { begin: function(conn) {
// console.log('begin', this.txid) debug('%s: begin', this.txid)
return conn.tx_.begin() return conn.tx_.begin()
.then(this._resolver, this._rejecter) .then(this._resolver, this._rejecter)
//return this.query(conn, 'BEGIN TRANSACTION;')
}, },
savepoint: function(conn) { savepoint: function(conn) {
//console.log('savepoint', this.txid) debug('%s: savepoint at', this.txid)
return Promise.resolve(); return Promise.resolve()
//return this.query(conn, 'SAVE TRANSACTION ' + this.txid + ';') .then(() => this.query(conn, 'SAVE TRANSACTION ' + this.txid))
}, },
commit: function(conn, value) { commit: function(conn, value) {
//console.log('commit', this.txid)
this._completed = true this._completed = true
debug('%s: commit', this.txid)
return conn.tx_.commit() return conn.tx_.commit()
.then(this._resolver(value), this._rejecter) .then(() => this._resolver(value), this._rejecter)
//return this.query(conn, 'COMMIT TRANSACTION;', 1, value)
}, },
release: function(conn, value) { release: function(conn, value) {
//console.log('release', this.txid)
return this._resolver(value) return this._resolver(value)
//return ''
}, },
rollback: function(conn, error) { rollback: function(conn, error) {
//console.log('rollback', this.txid)
this._completed = true this._completed = true
debug('%s: rolling back', this.txid) debug('%s: rolling back', this.txid)
return conn.tx_.rollback() return conn.tx_.rollback()
.catch(this._rejecter(error)) .then(() => this._rejecter(error))
//return this.query(conn, 'ROLLBACK TRANSACTION;', 2, error)
}, },
rollbackTo: function(conn, error) { rollbackTo: function(conn, error) {
//console.log('rollbackTo', this.txid) debug('%s: rolling backTo', this.txid)
return Promise.resolve(); return Promise.resolve()
//return this.query(conn, 'ROLLBACK TRANSACTION ' + this.txid, 2, error) .then(() => this.query(conn, 'ROLLBACK TRANSACTION ' + this.txid, 2, error))
.then(() => this._rejecter(error))
}, },
// Acquire a connection and create a disposer - either using the one passed // Acquire a connection and create a disposer - either using the one passed
@ -62,24 +56,25 @@ assign(Transaction_MSSQL.prototype, {
var t = this var t = this
var configConnection = config && config.connection var configConnection = config && config.connection
return Promise.try(function() { return Promise.try(function() {
return configConnection || t.client.acquireConnection() return (t.outerTx ? t.outerTx.conn : null) || configConnection || t.client.acquireConnection()
}).tap(function(connection) { }).tap(function(conn) {
//console.log('acquireConnection:begin', !!t.outerTx, t.txid);
if (!t.outerTx) { if (!t.outerTx) {
connection.tx_ = connection.transaction() t.conn = conn
conn.tx_ = conn.transaction()
} }
}).disposer(function(connection) { }).disposer(function(conn) {
//console.log('acquireConnection:end', !!t.outerTx, t.txid); if (t.outerTx) return;
if (!t.outerTx && connection.tx_) { if (conn.tx_) {
if (!t._completed) { if (!t._completed) {
debug('%s: unreleased transaction', t.txid) debug('%s: unreleased transaction', t.txid)
connection.tx_.rollback(); conn.tx_.rollback();
} }
connection.tx_ = null; conn.tx_ = null;
} }
t.conn = null
if (!configConnection) { if (!configConnection) {
debug('%s: releasing connection', t.txid) debug('%s: releasing connection', t.txid)
t.client.releaseConnection(connection) t.client.releaseConnection(conn)
} else { } else {
debug('%s: not releasing external connection', t.txid) debug('%s: not releasing external connection', t.txid)
} }

View File

@ -68,7 +68,7 @@ module.exports = function(knex) {
return Math.abs(10/6 - +(resp[0][key])) < 0.001; return Math.abs(10/6 - +(resp[0][key])) < 0.001;
} }
function checkResRangeMssql(key, resp) { function checkResRangeMssql(key, resp) {
return +(resp[0][key]) == 1; return +(resp[0][key]) === 1;
} }
// mysql: 1.6667 // mysql: 1.6667

View File

@ -141,7 +141,7 @@ module.exports = function(knex) {
t.equal(err.message, 'Rolled back') t.equal(err.message, 'Rolled back')
}) })
.finally(function() { .finally(function() {
t.equal(queryCount, knex.client.dialect === 'oracle' ? 1 : 3) t.equal(queryCount, knex.client.dialect === 'oracle' || knex.client.dialect === 'mssql' ? 1 : 3)
}) })
}) })
@ -169,7 +169,7 @@ module.exports = function(knex) {
}) })
if (knex.client.driverName === 'pg') { if (knex.client.driverName === 'pg') {
tape('allows postgres ? operator in knex.raw() if no bindings given #519 and #888', function (t) { tape('allows postgres ? operator in knex.raw() if no bindings given #519 and #888', 'pg', function (t) {
t.plan(1) t.plan(1)
knex.from('test_table_two') knex.from('test_table_two')
.whereRaw("(json_data->'me')::jsonb \\?& array['keyOne', 'keyTwo']") .whereRaw("(json_data->'me')::jsonb \\?& array['keyOne', 'keyTwo']")