Skip to content

Commit 2b6259d

Browse files
committed
chore: reduce try/catch to minimal level
1 parent 023675d commit 2b6259d

File tree

1 file changed

+79
-80
lines changed

1 file changed

+79
-80
lines changed

src/lib/db.ts

Lines changed: 79 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -99,114 +99,113 @@ export const init: (config: PoolConfig) => {
9999
return {
100100
async query(sql) {
101101
try {
102-
try {
103-
if (!pool) {
104-
const pool = new pg.Pool(config)
105-
let res = await poolerQueryHandleError(pool, sql)
106-
if (Array.isArray(res)) {
107-
res = res.reverse().find((x) => x.rows.length !== 0) ?? { rows: [] }
108-
}
109-
await pool.end()
110-
return { data: res.rows, error: null }
111-
}
112-
102+
if (!pool) {
103+
const pool = new pg.Pool(config)
113104
let res = await poolerQueryHandleError(pool, sql)
114105
if (Array.isArray(res)) {
115106
res = res.reverse().find((x) => x.rows.length !== 0) ?? { rows: [] }
116107
}
108+
await pool.end()
117109
return { data: res.rows, error: null }
118-
} catch (error: any) {
119-
if (error.constructor.name === 'DatabaseError') {
120-
// Roughly based on:
121-
// - https://github.com/postgres/postgres/blob/fc4089f3c65a5f1b413a3299ba02b66a8e5e37d0/src/interfaces/libpq/fe-protocol3.c#L1018
122-
// - https://github.com/brianc/node-postgres/blob/b1a8947738ce0af004cb926f79829bb2abc64aa6/packages/pg/lib/native/query.js#L33
123-
let formattedError = ''
124-
{
125-
if (error.severity) {
126-
formattedError += `${error.severity}: `
127-
}
128-
if (error.code) {
129-
formattedError += `${error.code}: `
130-
}
131-
if (error.message) {
132-
formattedError += error.message
133-
}
134-
formattedError += '\n'
135-
if (error.position) {
136-
// error.position is 1-based
137-
const position = Number(error.position) - 1
110+
}
138111

139-
let line = ''
140-
let lineNumber = 0
141-
let lineOffset = 0
112+
let res = await poolerQueryHandleError(pool, sql)
113+
if (Array.isArray(res)) {
114+
res = res.reverse().find((x) => x.rows.length !== 0) ?? { rows: [] }
115+
}
116+
return { data: res.rows, error: null }
117+
} catch (error: any) {
118+
if (error.constructor.name === 'DatabaseError') {
119+
// Roughly based on:
120+
// - https://github.com/postgres/postgres/blob/fc4089f3c65a5f1b413a3299ba02b66a8e5e37d0/src/interfaces/libpq/fe-protocol3.c#L1018
121+
// - https://github.com/brianc/node-postgres/blob/b1a8947738ce0af004cb926f79829bb2abc64aa6/packages/pg/lib/native/query.js#L33
122+
let formattedError = ''
123+
{
124+
if (error.severity) {
125+
formattedError += `${error.severity}: `
126+
}
127+
if (error.code) {
128+
formattedError += `${error.code}: `
129+
}
130+
if (error.message) {
131+
formattedError += error.message
132+
}
133+
formattedError += '\n'
134+
if (error.position) {
135+
// error.position is 1-based
136+
const position = Number(error.position) - 1
142137

143-
const lines = sql.split('\n')
144-
let currentOffset = 0
145-
for (let i = 0; i < lines.length; i++) {
146-
if (currentOffset + lines[i].length > position) {
147-
line = lines[i]
148-
lineNumber = i + 1 // 1-based
149-
lineOffset = position - currentOffset
150-
break
151-
}
152-
currentOffset += lines[i].length + 1 // 1 extra offset for newline
138+
let line = ''
139+
let lineNumber = 0
140+
let lineOffset = 0
141+
142+
const lines = sql.split('\n')
143+
let currentOffset = 0
144+
for (let i = 0; i < lines.length; i++) {
145+
if (currentOffset + lines[i].length > position) {
146+
line = lines[i]
147+
lineNumber = i + 1 // 1-based
148+
lineOffset = position - currentOffset
149+
break
153150
}
154-
formattedError += `LINE ${lineNumber}: ${line}
151+
currentOffset += lines[i].length + 1 // 1 extra offset for newline
152+
}
153+
formattedError += `LINE ${lineNumber}: ${line}
155154
${' '.repeat(5 + lineNumber.toString().length + 2 + lineOffset)}^
156155
`
157-
}
158-
if (error.detail) {
159-
formattedError += `DETAIL: ${error.detail}
156+
}
157+
if (error.detail) {
158+
formattedError += `DETAIL: ${error.detail}
160159
`
161-
}
162-
if (error.hint) {
163-
formattedError += `HINT: ${error.hint}
160+
}
161+
if (error.hint) {
162+
formattedError += `HINT: ${error.hint}
164163
`
165-
}
166-
if (error.internalQuery) {
167-
formattedError += `QUERY: ${error.internalQuery}
164+
}
165+
if (error.internalQuery) {
166+
formattedError += `QUERY: ${error.internalQuery}
168167
`
169-
}
170-
if (error.where) {
171-
formattedError += `CONTEXT: ${error.where}
168+
}
169+
if (error.where) {
170+
formattedError += `CONTEXT: ${error.where}
172171
`
173-
}
174172
}
173+
}
175174

175+
return {
176+
data: null,
177+
error: {
178+
...error,
179+
// error.message is non-enumerable
180+
message: error.message,
181+
formattedError,
182+
},
183+
}
184+
}
185+
try {
186+
// Handle stream errors and result size exceeded errors
187+
if (error.code === 'RESULT_SIZE_EXCEEDED') {
188+
// Force kill the connection without waiting for graceful shutdown
176189
return {
177190
data: null,
178191
error: {
179-
...error,
180-
// error.message is non-enumerable
181-
message: error.message,
182-
formattedError,
192+
message: `Query result size (${error.resultSize} bytes) exceeded the configured limit (${error.maxResultSize} bytes)`,
193+
code: error.code,
194+
resultSize: error.resultSize,
195+
maxResultSize: error.maxResultSize,
183196
},
184197
}
185198
}
199+
return { data: null, error: { code: error.code, message: error.message } }
200+
} finally {
186201
try {
187-
// Handle stream errors and result size exceeded errors
188-
if (error.code === 'RESULT_SIZE_EXCEEDED') {
189-
// Force kill the connection without waiting for graceful shutdown
190-
return {
191-
data: null,
192-
error: {
193-
message: `Query result size (${error.resultSize} bytes) exceeded the configured limit (${error.maxResultSize} bytes)`,
194-
code: error.code,
195-
resultSize: error.resultSize,
196-
maxResultSize: error.maxResultSize,
197-
},
198-
}
199-
}
200-
return { data: null, error: { code: error.code, message: error.message } }
201-
} finally {
202202
// If the error isn't a "DatabaseError" assume it's a connection related we kill the connection
203203
// To attempt a clean reconnect on next try
204204
await this.end.bind(this)
205+
} catch (error) {
206+
console.error('Failed to end the connection on error: ', { this: this, end: this.end })
205207
}
206208
}
207-
} catch (error) {
208-
// In case the connection cannot be gracefully ended log the error
209-
console.error('Failed to end the connection on error: ', { this: this, end: this.end })
210209
}
211210
},
212211

0 commit comments

Comments
 (0)