File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -15,7 +15,7 @@ const omitQuery = (error: any) => {
1515 }
1616
1717 // MySQL drivers keep the original message
18- if ( typeof sqlMessage === 'string' && message . endsWith ( sqlMessage ) ) {
18+ if ( typeof sqlMessage === 'string' && sqlMessage !== '' && message . endsWith ( sqlMessage ) ) {
1919 const withCode = `${ code } : ${ sqlMessage } `
2020
2121 return message . endsWith ( withCode ) ? withCode : sqlMessage
@@ -27,6 +27,16 @@ const omitQuery = (error: any) => {
2727 return index === - 1 ? message : message . slice ( 0 , index )
2828 }
2929
30+ // Only database driver errors have the query in front of the message
31+ if (
32+ code === undefined &&
33+ error . errno === undefined &&
34+ error . number === undefined &&
35+ error . sqlState === undefined
36+ ) {
37+ return message
38+ }
39+
3040 // SQLite messages start with the error code
3141 const codeIndex = typeof code === 'string' ? message . lastIndexOf ( ` - ${ code } : ` ) : - 1
3242 const index = codeIndex !== - 1 ? codeIndex : message . lastIndexOf ( ' - ' )
Original file line number Diff line number Diff line change @@ -223,6 +223,40 @@ describe('Knex Error handler', () => {
223223 assert . throws ( ( ) => errorHandler ( { code : 'ECONNRESET' } ) , { name : 'GeneralError' , message : 'Error' } )
224224 } )
225225
226+ it ( 'errors that are not from the database keep their message' , ( ) => {
227+ assert . throws ( ( ) => errorHandler ( new Error ( 'Pool - closed' ) ) , {
228+ name : 'GeneralError' ,
229+ message : 'Pool - closed'
230+ } )
231+ } )
232+
233+ it ( 'MySQL errors with an empty sqlMessage use the fallback' , ( ) => {
234+ assert . throws (
235+ ( ) =>
236+ errorHandler ( {
237+ code : 'ER_X' ,
238+ errno : 1 ,
239+ sqlState : '42000' ,
240+ sqlMessage : '' ,
241+ message : 'select 1 - ER_X: oops'
242+ } as any ) ,
243+ { name : 'BadRequest' , message : 'ER_X: oops' }
244+ )
245+ } )
246+
247+ it ( 'MSSQL errors omit query information' , ( ) => {
248+ assert . throws (
249+ ( ) =>
250+ errorHandler ( {
251+ code : 'EREQUEST' ,
252+ number : 2627 ,
253+ message :
254+ "insert into [users] ([email]) values ('a@example.com') - Violation of UNIQUE KEY constraint 'UQ_users'."
255+ } as any ) ,
256+ { name : 'GeneralError' , message : "Violation of UNIQUE KEY constraint 'UQ_users'." }
257+ )
258+ } )
259+
226260 it ( 'does not leak queries or bound values from a real database' , async ( ) => {
227261 const db = knex ( { client : 'sqlite3' , connection : { filename : ':memory:' } , useNullAsDefault : true } )
228262
You can’t perform that action at this time.
0 commit comments