From 42bfdf8289d7ac49b04b2061f92ea30888850e5e Mon Sep 17 00:00:00 2001 From: EdwardChapman <45250563+EdwardChapman@users.noreply.github.com> Date: Mon, 4 May 2020 12:49:21 -0700 Subject: [PATCH 1/2] Update pgsql/index.js query() Catch Block The catch block within the query method of index.js did not release clients back to the connection pool. This resulted in clients not being released back to the pool after a failed query, and therefore becoming unusable or dead clients. --- packages/drivers/src/driver/pgsql/index.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/drivers/src/driver/pgsql/index.ts b/packages/drivers/src/driver/pgsql/index.ts index d23653bb2..dbcf113e2 100644 --- a/packages/drivers/src/driver/pgsql/index.ts +++ b/packages/drivers/src/driver/pgsql/index.ts @@ -1,4 +1,4 @@ -import { Pool, PoolConfig, types, FieldDef } from 'pg'; +import { Pool, PoolConfig, PoolClient, types, FieldDef } from 'pg'; import Queries from './queries'; import { IConnectionDriver, NSDatabase } from '@sqltools/types'; import AbstractDriver from '../../lib/abstract'; @@ -68,9 +68,10 @@ export default class PostgreSQL extends AbstractDriver impleme public query(query: string): Promise { const messages = []; + var cli : PoolClient; return this.open() .then(async (pool) => { - const cli = await pool.connect(); + cli = await pool.connect(); cli.on('notice', notice => messages.push(`${notice.name.toUpperCase()}: ${notice.message}`)); const results = await cli.query({text: query, rowMode: 'array'}); cli.release(); @@ -94,7 +95,9 @@ export default class PostgreSQL extends AbstractDriver impleme }; }); }) - .catch(err => ([{ + .catch(err => { + cli.release(); + return ([{ connId: this.getId(), cols: [], messages: messages.concat([ @@ -106,7 +109,8 @@ export default class PostgreSQL extends AbstractDriver impleme error: true, query, results: [], - }])) + }]) + }) } private getColumnNames(fields: FieldDef[]): string[] { @@ -186,4 +190,4 @@ export default class PostgreSQL extends AbstractDriver impleme await cli.query('SELECT 1'); cli.release(); } -} \ No newline at end of file +} From ef162c46930255c187b00608e1c0eaa496c31ee8 Mon Sep 17 00:00:00 2001 From: EdwardChapman <45250563+EdwardChapman@users.noreply.github.com> Date: Wed, 6 May 2020 11:25:53 -0700 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Matheus Teixeira --- packages/drivers/src/driver/pgsql/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/drivers/src/driver/pgsql/index.ts b/packages/drivers/src/driver/pgsql/index.ts index dbcf113e2..14ca5147b 100644 --- a/packages/drivers/src/driver/pgsql/index.ts +++ b/packages/drivers/src/driver/pgsql/index.ts @@ -68,7 +68,7 @@ export default class PostgreSQL extends AbstractDriver impleme public query(query: string): Promise { const messages = []; - var cli : PoolClient; + let cli : PoolClient; return this.open() .then(async (pool) => { cli = await pool.connect(); @@ -96,7 +96,7 @@ export default class PostgreSQL extends AbstractDriver impleme }); }) .catch(err => { - cli.release(); + cli && cli.release(); return ([{ connId: this.getId(), cols: [],