mirror of
https://github.com/knex/knex.git
synced 2025-06-26 22:00:25 +00:00

* Fixed float type of mssql to be float * Many tests where postgres test was not actually ran at all * Migrations to be mssql compatible Mssql driver doesn't handle if multiple queries are sent to same transaction concurrently. * Prevented mssql failing when invalid schema builder was executed by accident Instead of trying to generate sql from broken schema calls, just make exception to leak before query compiling is started * Fixed mssql trx rollback to always throw an error Also modified some connection test query to be mssql compatible * Fixed various bugs from MSSQL driver to make tests run * Fixed mssql unique index to be compatible with other dialect implementations * Enable running mssql tests on CI * Test for #2588 * Updated tests to not be dependend on tables left from previous test rans * Trying to make mssql server work on travis
98 lines
3.2 KiB
JavaScript
98 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
const tape = require('tape')
|
|
const _ = require('lodash');
|
|
const makeKnex = require('../../knex')
|
|
const Bluebird = require('bluebird');
|
|
|
|
module.exports = (knexfile) => {
|
|
Object.keys(knexfile).forEach((key) => {
|
|
const dialect = knexfile[key].dialect || knexfile[key].client;
|
|
|
|
// TODO: FIX ORACLE AND MSSQL TO WORK THE SAME WAY WITH OTHER DIALECTS IF POSSIBLE
|
|
if (dialect !== 'sqlite3' && dialect !== 'oracledb' && dialect !== 'mssql') {
|
|
const knexConf = _.cloneDeep(knexfile[key]);
|
|
knexConf.connection.database = knexConf.connection.db = 'i-refuse-to-exist';
|
|
knexConf.acquireConnectionTimeout = 4000;
|
|
const knex = makeKnex(knexConf);
|
|
|
|
tape(dialect + ' - propagate error when DB does not exist', t => {
|
|
t.plan(1);
|
|
t.timeoutAfter(1000);
|
|
knex('accounts').select(1)
|
|
.then(res => {
|
|
t.fail(`Query should have failed, got: ${JSON.stringify(res)}`);
|
|
})
|
|
.catch(Bluebird.TimeoutError, e => {
|
|
t.fail(`Query should have failed with non timeout error`);
|
|
})
|
|
.catch(e => {
|
|
t.ok(e.message.indexOf('i-refuse-to-exist') > 0, `all good, failed as expected with msg: ${e.message}`);
|
|
});
|
|
});
|
|
|
|
tape(dialect + ' - propagate error when DB does not exist for stream', t => {
|
|
t.plan(1);
|
|
t.timeoutAfter(1000);
|
|
|
|
knex.select(1)
|
|
.stream(stream => {})
|
|
.then(res => {
|
|
t.fail(`Stream query should have failed, got: ${JSON.stringify(res)}`);
|
|
})
|
|
.catch(Bluebird.TimeoutError, e => {
|
|
t.fail(`Stream query should have failed with non timeout error`);
|
|
})
|
|
.catch(e => {
|
|
t.ok(e.message.indexOf('i-refuse-to-exist') > 0, `all good, failed as expected with msg: ${e.message}`);
|
|
});
|
|
});
|
|
|
|
tape.onFinish(() => {
|
|
knex.destroy();
|
|
});
|
|
}
|
|
|
|
if (dialect !== 'sqlite3') {
|
|
const knexConf = _.cloneDeep(knexfile[key]);
|
|
knexConf.acquireConnectionTimeout = 100;
|
|
knexConf.pool = { max: 1, min: 1 };
|
|
const knex = makeKnex(knexConf);
|
|
|
|
tape.onFinish(() => {
|
|
knex.destroy();
|
|
});
|
|
|
|
tape(dialect + ' - acquireConnectionTimeout works', t => {
|
|
t.plan(2);
|
|
t.timeoutAfter(1000);
|
|
|
|
// just hog the only connection.
|
|
knex.transaction(trx => {
|
|
// Don't return this promise! Also note that we use `knex` instead of `trx`
|
|
// here on purpose. The only reason this code is here, is that we can be
|
|
// certain `trx` has been created before this.
|
|
knex('accounts').select(1)
|
|
.then(() => {
|
|
t.fail('query should have stalled');
|
|
})
|
|
.catch(Bluebird.TimeoutError, e => {
|
|
t.pass('Got acquireTimeout error');
|
|
})
|
|
.catch(e => {
|
|
t.fail(`should have got acquire timeout error, but got ${e.message} instead.`);
|
|
})
|
|
.finally(() => {
|
|
trx.commit(); // release stuff
|
|
});
|
|
|
|
}).then(() => {
|
|
t.pass('transaction was resolved');
|
|
t.end();
|
|
});
|
|
});
|
|
}
|
|
|
|
});
|
|
};
|