From 8509f1c73249e74698cc8e2254c754e24f4634ee Mon Sep 17 00:00:00 2001 From: rendongsc Date: Thu, 9 Mar 2017 17:26:54 +0800 Subject: [PATCH 01/11] pg-promise init options --- src/Adapters/Storage/Postgres/PostgresClient.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Adapters/Storage/Postgres/PostgresClient.js b/src/Adapters/Storage/Postgres/PostgresClient.js index 0f4b3c8d52..647fb4db5f 100644 --- a/src/Adapters/Storage/Postgres/PostgresClient.js +++ b/src/Adapters/Storage/Postgres/PostgresClient.js @@ -1,4 +1,4 @@ -const pgp = require('pg-promise')(); + const parser = require('./PostgresConfigParser'); export function createClient(uri, databaseOptions) { @@ -9,9 +9,7 @@ export function createClient(uri, databaseOptions) { dbOptions = parser.getDatabaseOptionsFromURI(uri); } - for (const key in databaseOptions) { - dbOptions[key] = databaseOptions[key]; - } + let pgp = require('pg-promise')(databaseOptions); const client = pgp(dbOptions); From 5f725dc4512e530c954ff9ed275e191ae2cf37fe Mon Sep 17 00:00:00 2001 From: rendongsc Date: Tue, 14 Mar 2017 14:44:12 +0800 Subject: [PATCH 02/11] add database init options --- src/Adapters/Storage/Postgres/PostgresClient.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Adapters/Storage/Postgres/PostgresClient.js b/src/Adapters/Storage/Postgres/PostgresClient.js index 647fb4db5f..a94eb9c29d 100644 --- a/src/Adapters/Storage/Postgres/PostgresClient.js +++ b/src/Adapters/Storage/Postgres/PostgresClient.js @@ -9,13 +9,17 @@ export function createClient(uri, databaseOptions) { dbOptions = parser.getDatabaseOptionsFromURI(uri); } - let pgp = require('pg-promise')(databaseOptions); + for (const key in databaseOptions) { + dbOptions[key] = databaseOptions[key]; + } + const initOptions = dbOptions.initOptions || {}; + const pgp = require('pg-promise')(initOptions); const client = pgp(dbOptions); if (dbOptions.pgOptions) { for (const key in dbOptions.pgOptions) { - client.pg.defaults[key] = dbOptions.pgOptions[key]; + pgp.pg.defaults[key] = dbOptions.pgOptions[key]; } } From 23ca566e73af590e6a17d106a95e3e05ebd7aa35 Mon Sep 17 00:00:00 2001 From: ren dong Date: Fri, 24 Mar 2017 15:21:47 +0800 Subject: [PATCH 03/11] Create PostgresInitOptions.spec.js --- spec/PostgresInitOptions.spec.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 spec/PostgresInitOptions.spec.js diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spec/PostgresInitOptions.spec.js @@ -0,0 +1 @@ + From d8af3f8f2036b5b8be5064570dd5bbcba4a8243c Mon Sep 17 00:00:00 2001 From: ren dong Date: Fri, 24 Mar 2017 15:24:23 +0800 Subject: [PATCH 04/11] Update PostgresInitOptions.spec.js --- spec/PostgresInitOptions.spec.js | 58 ++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js index 8b13789179..e648b72a1e 100644 --- a/spec/PostgresInitOptions.spec.js +++ b/spec/PostgresInitOptions.spec.js @@ -1 +1,59 @@ +const Parse = require('parse/node').Parse; +const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); +const postgresURI = 'postgres://username:password@localhost:5432/db-name'; +//public schema +const databaseOptions1 = { + initOptions: { + connect: function (client, dc, isFresh) { + if (isFresh) { + client.query('SET search_path = public'); + } + } + } +}; + + +//not exists schema +const databaseOptions2 = { + initOptions: { + connect: function (client, dc, isFresh) { + if (isFresh) { + client.query('SET search_path = not_exists_schema'); + } + } + } +}; + + +const GameScore = Parse.Object.extend({ + className: "GameScore" +}); + +describe('Postgres database init options', () => { + it('create server with public schema databaseOptions,shoud be ok', (done) => { + reconfigureServer({ + databaseAdapter: new PostgresStorageAdapter({ + uri: postgresURI, collectionPrefix: 'test_', + databaseOptions: databaseOptions1 + }) + }).then(done, fail); + }); + + it("save new GameScore in public schema", function (done) { + var score = new GameScore({ "score": 1337, "playerName": "Sean Plott", "cheatMode": false }); + score.save().then(done, fail); + }); + + it('create server with not exists schema databaseOptions,shoud be fail', (done) => { + reconfigureServer({ + databaseAdapter: new PostgresStorageAdapter({ + uri: postgresURI, collectionPrefix: 'test_', + databaseOptions: databaseOptions2 + }) + }).catch(error => { + expect(error.code).toEqual('3F000'); + done(); + }); + }); +}); From a2fcadb3dfd86b9adf7918fb96dc82498bd259c4 Mon Sep 17 00:00:00 2001 From: ren dong Date: Fri, 24 Mar 2017 15:25:28 +0800 Subject: [PATCH 05/11] Update PostgresInitOptions.spec.js --- spec/PostgresInitOptions.spec.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js index e648b72a1e..5b198c410e 100644 --- a/spec/PostgresInitOptions.spec.js +++ b/spec/PostgresInitOptions.spec.js @@ -13,7 +13,6 @@ const databaseOptions1 = { } }; - //not exists schema const databaseOptions2 = { initOptions: { @@ -25,7 +24,6 @@ const databaseOptions2 = { } }; - const GameScore = Parse.Object.extend({ className: "GameScore" }); From 82136b330af8e6acda19fcf7f58bd482fadff02c Mon Sep 17 00:00:00 2001 From: rendongsc Date: Fri, 24 Mar 2017 15:32:49 +0800 Subject: [PATCH 06/11] add PostgresInitOptions test --- spec/PostgresInitOptions.spec.js | 59 ++++++++++++++++++++++++++++++++ { | 0 2 files changed, 59 insertions(+) create mode 100644 spec/PostgresInitOptions.spec.js create mode 100644 { diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js new file mode 100644 index 0000000000..e648b72a1e --- /dev/null +++ b/spec/PostgresInitOptions.spec.js @@ -0,0 +1,59 @@ +const Parse = require('parse/node').Parse; +const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); +const postgresURI = 'postgres://username:password@localhost:5432/db-name'; + +//public schema +const databaseOptions1 = { + initOptions: { + connect: function (client, dc, isFresh) { + if (isFresh) { + client.query('SET search_path = public'); + } + } + } +}; + + +//not exists schema +const databaseOptions2 = { + initOptions: { + connect: function (client, dc, isFresh) { + if (isFresh) { + client.query('SET search_path = not_exists_schema'); + } + } + } +}; + + +const GameScore = Parse.Object.extend({ + className: "GameScore" +}); + +describe('Postgres database init options', () => { + it('create server with public schema databaseOptions,shoud be ok', (done) => { + reconfigureServer({ + databaseAdapter: new PostgresStorageAdapter({ + uri: postgresURI, collectionPrefix: 'test_', + databaseOptions: databaseOptions1 + }) + }).then(done, fail); + }); + + it("save new GameScore in public schema", function (done) { + var score = new GameScore({ "score": 1337, "playerName": "Sean Plott", "cheatMode": false }); + score.save().then(done, fail); + }); + + it('create server with not exists schema databaseOptions,shoud be fail', (done) => { + reconfigureServer({ + databaseAdapter: new PostgresStorageAdapter({ + uri: postgresURI, collectionPrefix: 'test_', + databaseOptions: databaseOptions2 + }) + }).catch(error => { + expect(error.code).toEqual('3F000'); + done(); + }); + }); +}); diff --git a/{ b/{ new file mode 100644 index 0000000000..e69de29bb2 From c81bd173261ba92e4ce6b0fda78e5e4c646b9958 Mon Sep 17 00:00:00 2001 From: ren dong Date: Fri, 24 Mar 2017 15:34:24 +0800 Subject: [PATCH 07/11] Add files via upload From 9f46de8d07ca99a1a7661cd79180dce6b7559d8f Mon Sep 17 00:00:00 2001 From: rendongsc Date: Sun, 26 Mar 2017 21:31:22 +0800 Subject: [PATCH 08/11] linebreaks CRLF to LF --- spec/PostgresInitOptions.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js index cbbdc75e52..9352633d4d 100644 --- a/spec/PostgresInitOptions.spec.js +++ b/spec/PostgresInitOptions.spec.js @@ -2,6 +2,10 @@ const Parse = require('parse/node').Parse; const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); const postgresURI = 'postgres://username:password@localhost:5432/db-name'; +const GameScore = Parse.Object.extend({ + className: "GameScore" +}); + //public schema const databaseOptions1 = { initOptions: { @@ -24,10 +28,6 @@ const databaseOptions2 = { } }; -const GameScore = Parse.Object.extend({ - className: "GameScore" -}); - describe('Postgres database init options', () => { it('create server with public schema databaseOptions,shoud be ok', (done) => { reconfigureServer({ From 139dee40c6c0650fc611d5ea79474a65791f032f Mon Sep 17 00:00:00 2001 From: rendongsc Date: Mon, 27 Mar 2017 08:16:11 +0800 Subject: [PATCH 09/11] modify postgresURI to test environment --- spec/PostgresInitOptions.spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js index 9352633d4d..f9936357a5 100644 --- a/spec/PostgresInitOptions.spec.js +++ b/spec/PostgresInitOptions.spec.js @@ -1,10 +1,6 @@ const Parse = require('parse/node').Parse; const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); -const postgresURI = 'postgres://username:password@localhost:5432/db-name'; - -const GameScore = Parse.Object.extend({ - className: "GameScore" -}); +const postgresURI = 'postgres://localhost:5432/parse_server_postgres_adapter_test_database'; //public schema const databaseOptions1 = { @@ -28,6 +24,10 @@ const databaseOptions2 = { } }; +const GameScore = Parse.Object.extend({ + className: "GameScore" +}); + describe('Postgres database init options', () => { it('create server with public schema databaseOptions,shoud be ok', (done) => { reconfigureServer({ From 5509f10371566637702383283bb05da6bb9a5cd5 Mon Sep 17 00:00:00 2001 From: rendongsc Date: Mon, 27 Mar 2017 09:15:37 +0800 Subject: [PATCH 10/11] modify pg error code to 42P01 --- spec/PostgresInitOptions.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js index f9936357a5..98dbbfed97 100644 --- a/spec/PostgresInitOptions.spec.js +++ b/spec/PostgresInitOptions.spec.js @@ -50,7 +50,7 @@ describe('Postgres database init options', () => { databaseOptions: databaseOptions2 }) }).catch(error => { - expect(error.code).toEqual('3F000'); + expect(error.code).toEqual('42P01'); done(); }); }); From 6b68341ccdf2bb85b30a25451021571a2de6eddb Mon Sep 17 00:00:00 2001 From: rendongsc Date: Mon, 27 Mar 2017 15:14:25 +0800 Subject: [PATCH 11/11] fix reconfigureServer callback --- spec/PostgresInitOptions.spec.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js index 98dbbfed97..825eacaf04 100644 --- a/spec/PostgresInitOptions.spec.js +++ b/spec/PostgresInitOptions.spec.js @@ -49,9 +49,12 @@ describe('Postgres database init options', () => { uri: postgresURI, collectionPrefix: 'test_', databaseOptions: databaseOptions2 }) - }).catch(error => { - expect(error.code).toEqual('42P01'); + }).then(() => { done(); - }); + }) + .catch(error => { + expect(error.code).toEqual('42P01'); + done(); + }); }); });