From 28ca0b10e217e4b3f4c464a894b60e7979169bd0 Mon Sep 17 00:00:00 2001 From: "Brian M. Carlson" Date: Fri, 10 Jan 2020 09:39:15 -0600 Subject: [PATCH 1/4] Drop support for EOL versions of node --- .travis.yml | 11 -- packages/pg-pool/package.json | 2 +- .../pg-query-stream/test/async-iterator.es6 | 112 ----------------- .../pg-query-stream/test/async-iterator.js | 116 +++++++++++++++++- packages/pg/Makefile | 4 +- packages/pg/package.json | 2 +- 6 files changed, 115 insertions(+), 132 deletions(-) delete mode 100644 packages/pg-query-stream/test/async-iterator.es6 diff --git a/.travis.yml b/.travis.yml index 03849285a..422016a26 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,11 +17,6 @@ addons: matrix: include: - - node_js: lts/carbon - addons: - postgresql: "9.5" - dist: precise - # different PostgreSQL versions on Node LTS - node_js: lts/erbium addons: @@ -35,9 +30,3 @@ matrix: - node_js: lts/erbium addons: postgresql: "9.6" - - # PostgreSQL 9.2 only works on precise - - node_js: lts/carbon - addons: - postgresql: "9.2" - dist: precise diff --git a/packages/pg-pool/package.json b/packages/pg-pool/package.json index dc0275699..177dcc1ae 100644 --- a/packages/pg-pool/package.json +++ b/packages/pg-pool/package.json @@ -34,6 +34,6 @@ "pg-cursor": "^1.3.0" }, "peerDependencies": { - "pg": ">5.0" + "pg": ">8.0" } } diff --git a/packages/pg-query-stream/test/async-iterator.es6 b/packages/pg-query-stream/test/async-iterator.es6 deleted file mode 100644 index 47bda86d2..000000000 --- a/packages/pg-query-stream/test/async-iterator.es6 +++ /dev/null @@ -1,112 +0,0 @@ -const QueryStream = require('../') -const pg = require('pg') -const assert = require('assert') - -const queryText = 'SELECT * FROM generate_series(0, 200) num' -describe('Async iterator', () => { - it('works', async () => { - const stream = new QueryStream(queryText, []) - const client = new pg.Client() - await client.connect() - const query = client.query(stream) - const rows = [] - for await (const row of query) { - rows.push(row) - } - assert.equal(rows.length, 201) - await client.end() - }) - - it('can async iterate and then do a query afterwards', async () => { - const stream = new QueryStream(queryText, []) - const client = new pg.Client() - await client.connect() - const query = client.query(stream) - const iteratorRows = [] - for await (const row of query) { - iteratorRows.push(row) - } - assert.equal(iteratorRows.length, 201) - const { rows } = await client.query('SELECT NOW()') - assert.equal(rows.length, 1) - await client.end() - }) - - it('can async iterate multiple times with a pool', async () => { - const pool = new pg.Pool({ max: 1 }) - - const allRows = [] - const run = async () => { - // get the client - const client = await pool.connect() - // stream some rows - const stream = new QueryStream(queryText, []) - const iteratorRows = [] - client.query(stream) - for await (const row of stream) { - iteratorRows.push(row) - allRows.push(row) - } - assert.equal(iteratorRows.length, 201) - client.release() - } - await Promise.all([run(), run(), run()]) - assert.equal(allRows.length, 603) - await pool.end() - }) - - it('can break out of iteration early', async () => { - const pool = new pg.Pool({ max: 1 }) - const client = await pool.connect() - const rows = [] - for await (const row of client.query(new QueryStream(queryText, [], { batchSize: 1 }))) { - rows.push(row) - break; - } - for await (const row of client.query(new QueryStream(queryText, []))) { - rows.push(row) - break; - } - for await (const row of client.query(new QueryStream(queryText, []))) { - rows.push(row) - break; - } - assert.strictEqual(rows.length, 3) - client.release() - await pool.end() - }) - - it('only returns rows on first iteration', async () => { - const pool = new pg.Pool({ max: 1 }) - const client = await pool.connect() - const rows = [] - const stream = client.query(new QueryStream(queryText, [])) - for await (const row of stream) { - rows.push(row) - break; - } - for await (const row of stream) { - rows.push(row) - } - for await (const row of stream) { - rows.push(row) - } - assert.strictEqual(rows.length, 1) - client.release() - await pool.end() - }) - - it('can read with delays', async () => { - const pool = new pg.Pool({ max: 1 }) - const client = await pool.connect() - const rows = [] - const stream = client.query(new QueryStream(queryText, [], { batchSize: 1 })) - for await (const row of stream) { - rows.push(row) - await new Promise((resolve) => setTimeout(resolve, 1)) - } - assert.strictEqual(rows.length, 201) - client.release() - await pool.end() - }) -}) diff --git a/packages/pg-query-stream/test/async-iterator.js b/packages/pg-query-stream/test/async-iterator.js index 19718fe3b..47bda86d2 100644 --- a/packages/pg-query-stream/test/async-iterator.js +++ b/packages/pg-query-stream/test/async-iterator.js @@ -1,4 +1,112 @@ -// only newer versions of node support async iterator -if (!process.version.startsWith('v8')) { - require('./async-iterator.es6') -} +const QueryStream = require('../') +const pg = require('pg') +const assert = require('assert') + +const queryText = 'SELECT * FROM generate_series(0, 200) num' +describe('Async iterator', () => { + it('works', async () => { + const stream = new QueryStream(queryText, []) + const client = new pg.Client() + await client.connect() + const query = client.query(stream) + const rows = [] + for await (const row of query) { + rows.push(row) + } + assert.equal(rows.length, 201) + await client.end() + }) + + it('can async iterate and then do a query afterwards', async () => { + const stream = new QueryStream(queryText, []) + const client = new pg.Client() + await client.connect() + const query = client.query(stream) + const iteratorRows = [] + for await (const row of query) { + iteratorRows.push(row) + } + assert.equal(iteratorRows.length, 201) + const { rows } = await client.query('SELECT NOW()') + assert.equal(rows.length, 1) + await client.end() + }) + + it('can async iterate multiple times with a pool', async () => { + const pool = new pg.Pool({ max: 1 }) + + const allRows = [] + const run = async () => { + // get the client + const client = await pool.connect() + // stream some rows + const stream = new QueryStream(queryText, []) + const iteratorRows = [] + client.query(stream) + for await (const row of stream) { + iteratorRows.push(row) + allRows.push(row) + } + assert.equal(iteratorRows.length, 201) + client.release() + } + await Promise.all([run(), run(), run()]) + assert.equal(allRows.length, 603) + await pool.end() + }) + + it('can break out of iteration early', async () => { + const pool = new pg.Pool({ max: 1 }) + const client = await pool.connect() + const rows = [] + for await (const row of client.query(new QueryStream(queryText, [], { batchSize: 1 }))) { + rows.push(row) + break; + } + for await (const row of client.query(new QueryStream(queryText, []))) { + rows.push(row) + break; + } + for await (const row of client.query(new QueryStream(queryText, []))) { + rows.push(row) + break; + } + assert.strictEqual(rows.length, 3) + client.release() + await pool.end() + }) + + it('only returns rows on first iteration', async () => { + const pool = new pg.Pool({ max: 1 }) + const client = await pool.connect() + const rows = [] + const stream = client.query(new QueryStream(queryText, [])) + for await (const row of stream) { + rows.push(row) + break; + } + for await (const row of stream) { + rows.push(row) + } + for await (const row of stream) { + rows.push(row) + } + assert.strictEqual(rows.length, 1) + client.release() + await pool.end() + }) + + it('can read with delays', async () => { + const pool = new pg.Pool({ max: 1 }) + const client = await pool.connect() + const rows = [] + const stream = client.query(new QueryStream(queryText, [], { batchSize: 1 })) + for await (const row of stream) { + rows.push(row) + await new Promise((resolve) => setTimeout(resolve, 1)) + } + assert.strictEqual(rows.length, 201) + client.release() + await pool.end() + }) +}) diff --git a/packages/pg/Makefile b/packages/pg/Makefile index 52d0545d3..a5b0bc1da 100644 --- a/packages/pg/Makefile +++ b/packages/pg/Makefile @@ -62,6 +62,4 @@ test-pool: lint: @echo "***Starting lint***" - node -e "process.exit(Number(process.versions.node.split('.')[0]) < 8 ? 0 : 1)" \ - && echo "***Skipping lint (node version too old)***" \ - || node_modules/.bin/eslint lib + node_modules/.bin/eslint lib diff --git a/packages/pg/package.json b/packages/pg/package.json index 91e27a887..01f566822 100644 --- a/packages/pg/package.json +++ b/packages/pg/package.json @@ -51,6 +51,6 @@ ], "license": "MIT", "engines": { - "node": ">= 4.5.0" + "node": ">= 10.0.0" } } From 1a4955eb46f530ede859c87ba764b286c11abd9e Mon Sep 17 00:00:00 2001 From: "Brian M. Carlson" Date: Mon, 13 Jan 2020 10:56:30 -0600 Subject: [PATCH 2/4] Re-add testing for node@8.x --- .travis.yml | 5 + .../pg-query-stream/test/async-iterator.es6 | 112 +++++++++++++++++ .../pg-query-stream/test/async-iterator.js | 116 +----------------- packages/pg/package.json | 2 +- 4 files changed, 122 insertions(+), 113 deletions(-) create mode 100644 packages/pg-query-stream/test/async-iterator.es6 diff --git a/.travis.yml b/.travis.yml index 422016a26..91b98350e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,3 +30,8 @@ matrix: - node_js: lts/erbium addons: postgresql: "9.6" + # PostgreSQL 9.2 only works on precise + - node_js: lts/carbon + addons: + postgresql: "9.2" + dist: precise diff --git a/packages/pg-query-stream/test/async-iterator.es6 b/packages/pg-query-stream/test/async-iterator.es6 new file mode 100644 index 000000000..47bda86d2 --- /dev/null +++ b/packages/pg-query-stream/test/async-iterator.es6 @@ -0,0 +1,112 @@ +const QueryStream = require('../') +const pg = require('pg') +const assert = require('assert') + +const queryText = 'SELECT * FROM generate_series(0, 200) num' +describe('Async iterator', () => { + it('works', async () => { + const stream = new QueryStream(queryText, []) + const client = new pg.Client() + await client.connect() + const query = client.query(stream) + const rows = [] + for await (const row of query) { + rows.push(row) + } + assert.equal(rows.length, 201) + await client.end() + }) + + it('can async iterate and then do a query afterwards', async () => { + const stream = new QueryStream(queryText, []) + const client = new pg.Client() + await client.connect() + const query = client.query(stream) + const iteratorRows = [] + for await (const row of query) { + iteratorRows.push(row) + } + assert.equal(iteratorRows.length, 201) + const { rows } = await client.query('SELECT NOW()') + assert.equal(rows.length, 1) + await client.end() + }) + + it('can async iterate multiple times with a pool', async () => { + const pool = new pg.Pool({ max: 1 }) + + const allRows = [] + const run = async () => { + // get the client + const client = await pool.connect() + // stream some rows + const stream = new QueryStream(queryText, []) + const iteratorRows = [] + client.query(stream) + for await (const row of stream) { + iteratorRows.push(row) + allRows.push(row) + } + assert.equal(iteratorRows.length, 201) + client.release() + } + await Promise.all([run(), run(), run()]) + assert.equal(allRows.length, 603) + await pool.end() + }) + + it('can break out of iteration early', async () => { + const pool = new pg.Pool({ max: 1 }) + const client = await pool.connect() + const rows = [] + for await (const row of client.query(new QueryStream(queryText, [], { batchSize: 1 }))) { + rows.push(row) + break; + } + for await (const row of client.query(new QueryStream(queryText, []))) { + rows.push(row) + break; + } + for await (const row of client.query(new QueryStream(queryText, []))) { + rows.push(row) + break; + } + assert.strictEqual(rows.length, 3) + client.release() + await pool.end() + }) + + it('only returns rows on first iteration', async () => { + const pool = new pg.Pool({ max: 1 }) + const client = await pool.connect() + const rows = [] + const stream = client.query(new QueryStream(queryText, [])) + for await (const row of stream) { + rows.push(row) + break; + } + for await (const row of stream) { + rows.push(row) + } + for await (const row of stream) { + rows.push(row) + } + assert.strictEqual(rows.length, 1) + client.release() + await pool.end() + }) + + it('can read with delays', async () => { + const pool = new pg.Pool({ max: 1 }) + const client = await pool.connect() + const rows = [] + const stream = client.query(new QueryStream(queryText, [], { batchSize: 1 })) + for await (const row of stream) { + rows.push(row) + await new Promise((resolve) => setTimeout(resolve, 1)) + } + assert.strictEqual(rows.length, 201) + client.release() + await pool.end() + }) +}) diff --git a/packages/pg-query-stream/test/async-iterator.js b/packages/pg-query-stream/test/async-iterator.js index 47bda86d2..19718fe3b 100644 --- a/packages/pg-query-stream/test/async-iterator.js +++ b/packages/pg-query-stream/test/async-iterator.js @@ -1,112 +1,4 @@ -const QueryStream = require('../') -const pg = require('pg') -const assert = require('assert') - -const queryText = 'SELECT * FROM generate_series(0, 200) num' -describe('Async iterator', () => { - it('works', async () => { - const stream = new QueryStream(queryText, []) - const client = new pg.Client() - await client.connect() - const query = client.query(stream) - const rows = [] - for await (const row of query) { - rows.push(row) - } - assert.equal(rows.length, 201) - await client.end() - }) - - it('can async iterate and then do a query afterwards', async () => { - const stream = new QueryStream(queryText, []) - const client = new pg.Client() - await client.connect() - const query = client.query(stream) - const iteratorRows = [] - for await (const row of query) { - iteratorRows.push(row) - } - assert.equal(iteratorRows.length, 201) - const { rows } = await client.query('SELECT NOW()') - assert.equal(rows.length, 1) - await client.end() - }) - - it('can async iterate multiple times with a pool', async () => { - const pool = new pg.Pool({ max: 1 }) - - const allRows = [] - const run = async () => { - // get the client - const client = await pool.connect() - // stream some rows - const stream = new QueryStream(queryText, []) - const iteratorRows = [] - client.query(stream) - for await (const row of stream) { - iteratorRows.push(row) - allRows.push(row) - } - assert.equal(iteratorRows.length, 201) - client.release() - } - await Promise.all([run(), run(), run()]) - assert.equal(allRows.length, 603) - await pool.end() - }) - - it('can break out of iteration early', async () => { - const pool = new pg.Pool({ max: 1 }) - const client = await pool.connect() - const rows = [] - for await (const row of client.query(new QueryStream(queryText, [], { batchSize: 1 }))) { - rows.push(row) - break; - } - for await (const row of client.query(new QueryStream(queryText, []))) { - rows.push(row) - break; - } - for await (const row of client.query(new QueryStream(queryText, []))) { - rows.push(row) - break; - } - assert.strictEqual(rows.length, 3) - client.release() - await pool.end() - }) - - it('only returns rows on first iteration', async () => { - const pool = new pg.Pool({ max: 1 }) - const client = await pool.connect() - const rows = [] - const stream = client.query(new QueryStream(queryText, [])) - for await (const row of stream) { - rows.push(row) - break; - } - for await (const row of stream) { - rows.push(row) - } - for await (const row of stream) { - rows.push(row) - } - assert.strictEqual(rows.length, 1) - client.release() - await pool.end() - }) - - it('can read with delays', async () => { - const pool = new pg.Pool({ max: 1 }) - const client = await pool.connect() - const rows = [] - const stream = client.query(new QueryStream(queryText, [], { batchSize: 1 })) - for await (const row of stream) { - rows.push(row) - await new Promise((resolve) => setTimeout(resolve, 1)) - } - assert.strictEqual(rows.length, 201) - client.release() - await pool.end() - }) -}) +// only newer versions of node support async iterator +if (!process.version.startsWith('v8')) { + require('./async-iterator.es6') +} diff --git a/packages/pg/package.json b/packages/pg/package.json index 01f566822..5ca6f262f 100644 --- a/packages/pg/package.json +++ b/packages/pg/package.json @@ -51,6 +51,6 @@ ], "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 8.0.0" } } From fd6dc8b0a1d85d1ba380531b394c8dfffecfd510 Mon Sep 17 00:00:00 2001 From: "Brian M. Carlson" Date: Mon, 13 Jan 2020 11:09:48 -0600 Subject: [PATCH 3/4] Revert changes to .travis.yml --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index 91b98350e..03849285a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,11 @@ addons: matrix: include: + - node_js: lts/carbon + addons: + postgresql: "9.5" + dist: precise + # different PostgreSQL versions on Node LTS - node_js: lts/erbium addons: @@ -30,6 +35,7 @@ matrix: - node_js: lts/erbium addons: postgresql: "9.6" + # PostgreSQL 9.2 only works on precise - node_js: lts/carbon addons: From 770cab32d67cbe972edab5d5952d964cdf259404 Mon Sep 17 00:00:00 2001 From: Brian C Date: Mon, 13 Jan 2020 12:39:26 -0600 Subject: [PATCH 4/4] Update packages/pg-pool/package.json Co-Authored-By: Charmander <~@charmander.me> --- packages/pg-pool/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pg-pool/package.json b/packages/pg-pool/package.json index 177dcc1ae..a1fa1465e 100644 --- a/packages/pg-pool/package.json +++ b/packages/pg-pool/package.json @@ -34,6 +34,6 @@ "pg-cursor": "^1.3.0" }, "peerDependencies": { - "pg": ">8.0" + "pg": ">=8.0" } }