Skip to content

Commit fc7f9f7

Browse files
vitaly-tflovilmart
authored andcommitted
removing inline sql. (#3529)
* removing inline sql. * Update index.js trying to fix indentation. * Update index.js commenting out console output for errors. * Rename json-object-set-key.sql to json-object-set-keys.sql * Update index.js * Update add-unique.sql correcting sql. * Update add.sql correcting sql. * Update contains-all.sql correcting sql. * Update contains.sql correcting sql. * Update remove.sql correcting sql. * Update json-object-set-keys.sql fixing sql reserved words.
1 parent ef8d534 commit fc7f9f7

File tree

8 files changed

+113
-85
lines changed

8 files changed

+113
-85
lines changed

src/Adapters/Storage/Postgres/PostgresStorageAdapter.js

Lines changed: 7 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createClient } from './PostgresClient';
22
import Parse from 'parse/node';
33
import _ from 'lodash';
4+
import sql from './sql';
45

56
const PostgresRelationDoesNotExistError = '42P01';
67
const PostgresDuplicateRelationError = '42P07';
@@ -1171,22 +1172,22 @@ export class PostgresStorageAdapter {
11711172
});
11721173
/* eslint-disable no-console */
11731174
promises = promises.concat([
1174-
this._client.any(json_object_set_key).catch((err) => {
1175+
this._client.none(sql.misc.jsonObjectSetKeys).catch((err) => {
11751176
console.error(err);
11761177
}),
1177-
this._client.any(array_add).catch((err) => {
1178+
this._client.none(sql.array.add).catch((err) => {
11781179
console.error(err);
11791180
}),
1180-
this._client.any(array_add_unique).catch((err) => {
1181+
this._client.none(sql.array.addUnique).catch((err) => {
11811182
console.error(err);
11821183
}),
1183-
this._client.any(array_remove).catch((err) => {
1184+
this._client.none(sql.array.remove).catch((err) => {
11841185
console.error(err);
11851186
}),
1186-
this._client.any(array_contains_all).catch((err) => {
1187+
this._client.none(sql.array.containsAll).catch((err) => {
11871188
console.error(err);
11881189
}),
1189-
this._client.any(array_contains).catch((err) => {
1190+
this._client.none(sql.array.contains).catch((err) => {
11901191
console.error(err);
11911192
})
11921193
]);
@@ -1270,84 +1271,5 @@ function literalizeRegexPart(s) {
12701271
);
12711272
}
12721273

1273-
// Function to set a key on a nested JSON document
1274-
const json_object_set_key = 'CREATE OR REPLACE FUNCTION "json_object_set_key"(\
1275-
"json" jsonb,\
1276-
"key_to_set" TEXT,\
1277-
"value_to_set" anyelement\
1278-
)\
1279-
RETURNS jsonb \
1280-
LANGUAGE sql \
1281-
IMMUTABLE \
1282-
STRICT \
1283-
AS $function$\
1284-
SELECT concat(\'{\', string_agg(to_json("key") || \':\' || "value", \',\'), \'}\')::jsonb\
1285-
FROM (SELECT *\
1286-
FROM jsonb_each("json")\
1287-
WHERE "key" <> "key_to_set"\
1288-
UNION ALL\
1289-
SELECT "key_to_set", to_json("value_to_set")::jsonb) AS "fields"\
1290-
$function$;'
1291-
1292-
const array_add = `CREATE OR REPLACE FUNCTION "array_add"(
1293-
"array" jsonb,
1294-
"values" jsonb
1295-
)
1296-
RETURNS jsonb
1297-
LANGUAGE sql
1298-
IMMUTABLE
1299-
STRICT
1300-
AS $function$
1301-
SELECT array_to_json(ARRAY(SELECT unnest(ARRAY(SELECT DISTINCT jsonb_array_elements("array")) || ARRAY(SELECT jsonb_array_elements("values")))))::jsonb;
1302-
$function$;`;
1303-
1304-
const array_add_unique = `CREATE OR REPLACE FUNCTION "array_add_unique"(
1305-
"array" jsonb,
1306-
"values" jsonb
1307-
)
1308-
RETURNS jsonb
1309-
LANGUAGE sql
1310-
IMMUTABLE
1311-
STRICT
1312-
AS $function$
1313-
SELECT array_to_json(ARRAY(SELECT DISTINCT unnest(ARRAY(SELECT DISTINCT jsonb_array_elements("array")) || ARRAY(SELECT DISTINCT jsonb_array_elements("values")))))::jsonb;
1314-
$function$;`;
1315-
1316-
const array_remove = `CREATE OR REPLACE FUNCTION "array_remove"(
1317-
"array" jsonb,
1318-
"values" jsonb
1319-
)
1320-
RETURNS jsonb
1321-
LANGUAGE sql
1322-
IMMUTABLE
1323-
STRICT
1324-
AS $function$
1325-
SELECT array_to_json(ARRAY(SELECT * FROM jsonb_array_elements("array") as elt WHERE elt NOT IN (SELECT * FROM (SELECT jsonb_array_elements("values")) AS sub)))::jsonb;
1326-
$function$;`;
1327-
1328-
const array_contains_all = `CREATE OR REPLACE FUNCTION "array_contains_all"(
1329-
"array" jsonb,
1330-
"values" jsonb
1331-
)
1332-
RETURNS boolean
1333-
LANGUAGE sql
1334-
IMMUTABLE
1335-
STRICT
1336-
AS $function$
1337-
SELECT RES.CNT = jsonb_array_length("values") FROM (SELECT COUNT(*) as CNT FROM jsonb_array_elements("array") as elt WHERE elt IN (SELECT jsonb_array_elements("values"))) as RES ;
1338-
$function$;`;
1339-
1340-
const array_contains = `CREATE OR REPLACE FUNCTION "array_contains"(
1341-
"array" jsonb,
1342-
"values" jsonb
1343-
)
1344-
RETURNS boolean
1345-
LANGUAGE sql
1346-
IMMUTABLE
1347-
STRICT
1348-
AS $function$
1349-
SELECT RES.CNT >= 1 FROM (SELECT COUNT(*) as CNT FROM jsonb_array_elements("array") as elt WHERE elt IN (SELECT jsonb_array_elements("values"))) as RES ;
1350-
$function$;`;
1351-
13521274
export default PostgresStorageAdapter;
13531275
module.exports = PostgresStorageAdapter; // Required for tests
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE OR REPLACE FUNCTION array_add_unique(
2+
"array" jsonb,
3+
"values" jsonb
4+
)
5+
RETURNS jsonb
6+
LANGUAGE sql
7+
IMMUTABLE
8+
STRICT
9+
AS $function$
10+
SELECT array_to_json(ARRAY(SELECT DISTINCT unnest(ARRAY(SELECT DISTINCT jsonb_array_elements("array")) || ARRAY(SELECT DISTINCT jsonb_array_elements("values")))))::jsonb;
11+
$function$;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE OR REPLACE FUNCTION array_add(
2+
"array" jsonb,
3+
"values" jsonb
4+
)
5+
RETURNS jsonb
6+
LANGUAGE sql
7+
IMMUTABLE
8+
STRICT
9+
AS $function$
10+
SELECT array_to_json(ARRAY(SELECT unnest(ARRAY(SELECT DISTINCT jsonb_array_elements("array")) || ARRAY(SELECT jsonb_array_elements("values")))))::jsonb;
11+
$function$;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE OR REPLACE FUNCTION array_contains_all(
2+
"array" jsonb,
3+
"values" jsonb
4+
)
5+
RETURNS boolean
6+
LANGUAGE sql
7+
IMMUTABLE
8+
STRICT
9+
AS $function$
10+
SELECT RES.CNT = jsonb_array_length("values") FROM (SELECT COUNT(*) as CNT FROM jsonb_array_elements("array") as elt WHERE elt IN (SELECT jsonb_array_elements("values"))) as RES;
11+
$function$;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE OR REPLACE FUNCTION array_contains(
2+
"array" jsonb,
3+
"values" jsonb
4+
)
5+
RETURNS boolean
6+
LANGUAGE sql
7+
IMMUTABLE
8+
STRICT
9+
AS $function$
10+
SELECT RES.CNT >= 1 FROM (SELECT COUNT(*) as CNT FROM jsonb_array_elements("array") as elt WHERE elt IN (SELECT jsonb_array_elements("values"))) as RES;
11+
$function$;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE OR REPLACE FUNCTION array_remove(
2+
"array" jsonb,
3+
"values" jsonb
4+
)
5+
RETURNS jsonb
6+
LANGUAGE sql
7+
IMMUTABLE
8+
STRICT
9+
AS $function$
10+
SELECT array_to_json(ARRAY(SELECT * FROM jsonb_array_elements("array") as elt WHERE elt NOT IN (SELECT * FROM (SELECT jsonb_array_elements("values")) AS sub)))::jsonb;
11+
$function$;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict';
2+
3+
var QueryFile = require('pg-promise').QueryFile;
4+
var path = require('path');
5+
6+
module.exports = {
7+
array: {
8+
add: sql('array/add.sql'),
9+
addUnique: sql('array/add-unique.sql'),
10+
contains: sql('array/contains.sql'),
11+
containsAll: sql('array/contains-all.sql'),
12+
remove: sql('array/remove.sql')
13+
},
14+
misc: {
15+
jsonObjectSetKeys: sql('misc/json-object-set-keys.sql')
16+
}
17+
};
18+
19+
///////////////////////////////////////////////
20+
// Helper for linking to external query files;
21+
function sql(file) {
22+
23+
var fullPath = path.join(__dirname, file); // generating full path;
24+
25+
var qf = new QueryFile(fullPath, {minify: true});
26+
27+
if (qf.error) {
28+
throw qf.error;
29+
}
30+
31+
return qf;
32+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- Function to set a key on a nested JSON document
2+
3+
CREATE OR REPLACE FUNCTION json_object_set_key(
4+
"json" jsonb,
5+
key_to_set TEXT,
6+
value_to_set anyelement
7+
)
8+
RETURNS jsonb
9+
LANGUAGE sql
10+
IMMUTABLE
11+
STRICT
12+
AS $function$
13+
SELECT concat('{', string_agg(to_json("key") || ':' || "value", ','), '}')::jsonb
14+
FROM (SELECT *
15+
FROM jsonb_each("json")
16+
WHERE key <> key_to_set
17+
UNION ALL
18+
SELECT key_to_set, to_json("value_to_set")::jsonb) AS fields
19+
$function$;

0 commit comments

Comments
 (0)