Skip to content

Commit f7ccde8

Browse files
authored
Make compiling SQL in error message optional (knex#5282)
1 parent 82610ca commit f7ccde8

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

lib/execution/internal/query-executioner.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,14 @@ function enrichQueryObject(connection, queryParam, client) {
3535

3636
function executeQuery(connection, queryObject, client) {
3737
return client._query(connection, queryObject).catch((err) => {
38-
err.message =
39-
formatQuery(queryObject.sql, queryObject.bindings, undefined, client) +
40-
' - ' +
41-
err.message;
38+
if (client.config && client.config.compileSqlOnError === false) {
39+
err.message = queryObject.sql + ' - ' + err.message;
40+
} else {
41+
err.message =
42+
formatQuery(queryObject.sql, queryObject.bindings, undefined, client) +
43+
' - ' +
44+
err.message;
45+
}
4246
client.emit(
4347
'query-error',
4448
err,

test/unit/knex.js

+38
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,44 @@ describe('knex', () => {
753753
expect(errorArgs.queryContext).to.equal(context);
754754
});
755755

756+
it('should show compiled sql on error message when compileSqlOnError is true', async function () {
757+
const spy = sinon.spy();
758+
const knex = Knex({ ...sqliteConfig, compileSqlOnError: true })
759+
.from('test')
760+
.on('query-error', spy);
761+
762+
try {
763+
await knex.insert({ foo: 'bar' });
764+
// eslint-disable-next-line no-empty
765+
} catch (_e) {}
766+
767+
expect(spy).to.be.calledOnce;
768+
const [[error]] = spy.args;
769+
expect(error).to.be.instanceOf(Error);
770+
expect(error.message).to.equal(
771+
"insert into `test` (`foo`) values ('bar') - SQLITE_ERROR: no such table: test"
772+
);
773+
});
774+
775+
it('should show parameterized sql on error message when compileSqlOnError is false', async function () {
776+
const spy = sinon.spy();
777+
const knex = Knex({ ...sqliteConfig, compileSqlOnError: false })
778+
.from('test')
779+
.on('query-error', spy);
780+
781+
try {
782+
await knex.insert({ foo: 'bar' });
783+
// eslint-disable-next-line no-empty
784+
} catch (_e) {}
785+
786+
expect(spy).to.be.calledOnce;
787+
const [[error]] = spy.args;
788+
expect(error).to.be.instanceOf(Error);
789+
expect(error.message).to.equal(
790+
'insert into `test` (`foo`) values (?) - SQLITE_ERROR: no such table: test'
791+
);
792+
});
793+
756794
// TODO: Consider moving these somewhere that tests the
757795
// QueryBuilder interface more directly.
758796
context('qb = knex.select(1)', function () {

types/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2717,6 +2717,7 @@ export declare namespace Knex {
27172717
searchPath?: string | readonly string[];
27182718
asyncStackTraces?: boolean;
27192719
log?: Logger;
2720+
compileSqlOnError?: boolean;
27202721
}
27212722

27222723
type StaticConnectionConfig =

0 commit comments

Comments
 (0)