From 71bb89a4337c59fcfe2ab21d40349554429942c2 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Sun, 29 Jul 2018 14:36:52 +0100 Subject: [PATCH] feat: create escapeIdentifier utility See https://github.com/brianc/node-postgres/issues/1699 --- src/utilities/escapeIdentifier.js | 8 ++++++++ src/utilities/index.js | 1 + test/utilities/escapeIdentifier.js | 11 +++++++++++ 3 files changed, 20 insertions(+) create mode 100644 src/utilities/escapeIdentifier.js create mode 100644 test/utilities/escapeIdentifier.js diff --git a/src/utilities/escapeIdentifier.js b/src/utilities/escapeIdentifier.js new file mode 100644 index 00000000..2b122cda --- /dev/null +++ b/src/utilities/escapeIdentifier.js @@ -0,0 +1,8 @@ +// @flow + +/** + * @see https://github.com/brianc/node-postgres/blob/6c840aabb09f8a2d640800953f6b884b6841384c/lib/client.js#L306-L322 + */ +export default (identifier: string) => { + return '"' + identifier.replace(/"/g, '""') + '"'; +}; diff --git a/src/utilities/index.js b/src/utilities/index.js index e69af974..b2394e4a 100644 --- a/src/utilities/index.js +++ b/src/utilities/index.js @@ -1,5 +1,6 @@ // @flow +export {default as escapeIdentifier} from './escapeIdentifier'; export {default as mapTaggedTemplateLiteralInvocation} from './mapTaggedTemplateLiteralInvocation'; export {default as normalizeAnonymousValuePlaceholders} from './normalizeAnonymousValuePlaceholders'; export {default as normalizeNamedValuePlaceholders} from './normalizeNamedValuePlaceholders'; diff --git a/test/utilities/escapeIdentifier.js b/test/utilities/escapeIdentifier.js new file mode 100644 index 00000000..59381503 --- /dev/null +++ b/test/utilities/escapeIdentifier.js @@ -0,0 +1,11 @@ +// @flow + +import test from 'ava'; +import { + escapeIdentifier +} from '../../src/utilities'; + +test('escapes a SQL identifier', (t) => { + t.true(escapeIdentifier('foo') === '"foo"'); + t.true(escapeIdentifier('"foo"') === '"""foo"""'); +});