Skip to content

Commit 970ff08

Browse files
committed
use DB uuid type for entity uuids: less straightforward type wrangling
1 parent b93110c commit 970ff08

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

lib/model/query/entities.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
const config = require('config');
1111
const { sql } = require('slonik');
1212
const { Actor, Audit, Entity, Submission, Form } = require('../frames');
13-
const { sqlEquals, extender, unjoiner, page, markDeleted, insertMany, sqlInArray } = require('../../util/db');
13+
const { sqlEquals, extender, unjoiner, page, markDeleted, insertMany } = require('../../util/db');
1414
const { map, mergeRight, pickAll } = require('ramda');
1515
const { blankStringToNull, construct } = require('../../util/util');
1616
const { QueryOptions } = require('../../util/db');
@@ -783,7 +783,7 @@ const _get = (includeSource) => {
783783
) submissions ON submissions.id = submission_defs."submissionId"
784784
LEFT JOIN forms ON submissions."formId" = forms.id
785785
`}
786-
WHERE ${sqlEquals(options.condition)} AND entities."deletedAt" is ${deleted ? sql`not` : sql``} null
786+
WHERE ${sqlEquals(options.condition, { uuid: 'uuid' })} AND entities."deletedAt" is ${deleted ? sql`not` : sql``} null
787787
ORDER BY entities."createdAt" DESC, entities.id DESC
788788
`);
789789
};
@@ -1029,11 +1029,12 @@ const purge = (force = false, projectId = null, datasetName = null, entityUuid =
10291029
// INTEGRITY CHECK
10301030

10311031
const idFilter = (options, idCol = 'uuid') => {
1032-
const query = options.ifArg('id', ids => {
1033-
const idList = ids.split(',').map(id => id.trim());
1034-
return sqlInArray(sql.identifier([idCol]), idList);
1035-
});
1036-
return query.sql ? query : sql`TRUE`;
1032+
if (options.args.id) {
1033+
const idList = options.args.id.split(',').map(id => id.trim());
1034+
return idList.length ? sql`${sql.identifier([idCol])} = ANY (${sql.array(idList, 'uuid')})` : sql`TRUE`;
1035+
} else {
1036+
return sql`TRUE`;
1037+
}
10371038
};
10381039

10391040
const getEntitiesState = (dataset, options = QueryOptions.none) => ({ all }) => all(sql`

lib/util/db.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,16 +213,18 @@ const markUndeleted = (obj) =>
213213
////////////////////////////////////////
214214
// query fragment util
215215

216-
const sqlEquals = (obj) => {
216+
const sqlEquals = (obj, typeMap = {}) => {
217217
const keys = Object.keys(obj);
218218
if (keys.length === 0) return sql`true`;
219219

220220
const parts = new Array(keys.length);
221221
for (let i = 0; i < keys.length; i += 1) {
222222
const k = keys[i];
223223
const v = obj[k];
224+
const maybeType = typeMap[k];
225+
const typeSpec = maybeType ? sql`::${sql.identifier([maybeType])}` : sql``;
224226
parts[i] = (v === null) ? sql`${sql.identifier(k.split('.'))} is null`
225-
: sql`${sql.identifier(k.split('.'))}=${obj[k]}`;
227+
: sql`${sql.identifier(k.split('.'))}=${obj[k]}${typeSpec}`;
226228
}
227229
return sql.join(parts, sql` and `);
228230
};

0 commit comments

Comments
 (0)