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) + ')';
},
text: function text(column) {
return 'nvarchar(max)';
},
text: 'nvarchar(max)',
mediumtext: 'nvarchar(max)',
longtext: 'nvarchar(max)',
enu: function enu(allowed) {
return 'nvarchar(100)';
},
enu: 'nvarchar(100)',
uuid: 'uniqueidentifier',

View File

@ -46,7 +46,7 @@ assign(TableCompiler_MSSQL.prototype, {
dropColumnPrefix: 'drop column ',
// Compiles the comment on the table.
comment: function comment(_comment) {},
comment: function comment() {},
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\'');
},
getFKRefs: function getFKRefs(runner) {
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());
return runner.query({
sql: sql,
bindings: formatter.bindings
});
},
// getFKRefs: function (runner) {
// 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());
// return runner.query({
// sql: sql,
// bindings: formatter.bindings
// });
// },
dropFKRefs: function dropFKRefs(runner, refs) {
var formatter = this.client.formatter();
return Promise.all(refs.map(function (ref) {

View File

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

View File

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

View File

@ -43,7 +43,7 @@ assign(TableCompiler_MSSQL.prototype, {
dropColumnPrefix: 'drop column ',
// Compiles the comment on the table.
comment: function(comment) {
comment: 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\'');
},
getFKRefs: function (runner) {
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());
return runner.query({
sql: sql,
bindings: formatter.bindings
});
},
// getFKRefs: function (runner) {
// 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());
// return runner.query({
// sql: sql,
// bindings: formatter.bindings
// });
// },
dropFKRefs: function (runner, refs) {
var formatter = this.client.formatter();
return Promise.all(refs.map(function (ref) {

View File

@ -1,8 +1,7 @@
var inherits = require('inherits')
var assign = require('lodash/object/assign');
var Promise = require('../../promise')
var helpers = require('../../helpers')
var Promise = require('../../promise')
var Transaction = require('../../transaction')
var debug = require('debug')('knex:tx')
@ -14,45 +13,40 @@ inherits(Transaction_MSSQL, Transaction)
assign(Transaction_MSSQL.prototype, {
begin: function(conn) {
// console.log('begin', this.txid)
debug('%s: begin', this.txid)
return conn.tx_.begin()
.then(this._resolver, this._rejecter)
//return this.query(conn, 'BEGIN TRANSACTION;')
},
savepoint: function(conn) {
//console.log('savepoint', this.txid)
return Promise.resolve();
//return this.query(conn, 'SAVE TRANSACTION ' + this.txid + ';')
debug('%s: savepoint at', this.txid)
return Promise.resolve()
.then(() => this.query(conn, 'SAVE TRANSACTION ' + this.txid))
},
commit: function(conn, value) {
//console.log('commit', this.txid)
this._completed = true
debug('%s: commit', this.txid)
return conn.tx_.commit()
.then(this._resolver(value), this._rejecter)
//return this.query(conn, 'COMMIT TRANSACTION;', 1, value)
.then(() => this._resolver(value), this._rejecter)
},
release: function(conn, value) {
//console.log('release', this.txid)
return this._resolver(value)
//return ''
},
rollback: function(conn, error) {
//console.log('rollback', this.txid)
this._completed = true
debug('%s: rolling back', this.txid)
return conn.tx_.rollback()
.catch(this._rejecter(error))
//return this.query(conn, 'ROLLBACK TRANSACTION;', 2, error)
.then(() => this._rejecter(error))
},
rollbackTo: function(conn, error) {
//console.log('rollbackTo', this.txid)
return Promise.resolve();
//return this.query(conn, 'ROLLBACK TRANSACTION ' + this.txid, 2, error)
debug('%s: rolling backTo', this.txid)
return Promise.resolve()
.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
@ -62,24 +56,25 @@ assign(Transaction_MSSQL.prototype, {
var t = this
var configConnection = config && config.connection
return Promise.try(function() {
return configConnection || t.client.acquireConnection()
}).tap(function(connection) {
//console.log('acquireConnection:begin', !!t.outerTx, t.txid);
return (t.outerTx ? t.outerTx.conn : null) || configConnection || t.client.acquireConnection()
}).tap(function(conn) {
if (!t.outerTx) {
connection.tx_ = connection.transaction()
t.conn = conn
conn.tx_ = conn.transaction()
}
}).disposer(function(connection) {
//console.log('acquireConnection:end', !!t.outerTx, t.txid);
if (!t.outerTx && connection.tx_) {
}).disposer(function(conn) {
if (t.outerTx) return;
if (conn.tx_) {
if (!t._completed) {
debug('%s: unreleased transaction', t.txid)
connection.tx_.rollback();
conn.tx_.rollback();
}
connection.tx_ = null;
conn.tx_ = null;
}
t.conn = null
if (!configConnection) {
debug('%s: releasing connection', t.txid)
t.client.releaseConnection(connection)
t.client.releaseConnection(conn)
} else {
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;
}
function checkResRangeMssql(key, resp) {
return +(resp[0][key]) == 1;
return +(resp[0][key]) === 1;
}
// mysql: 1.6667

View File

@ -141,7 +141,7 @@ module.exports = function(knex) {
t.equal(err.message, 'Rolled back')
})
.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') {
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)
knex.from('test_table_two')
.whereRaw("(json_data->'me')::jsonb \\?& array['keyOne', 'keyTwo']")