Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
connection: DatabaseConnectionType,
tableName: string,
ids: $ReadOnlyArray,
idName: string = 'id',
identifiers: string,
resultIsArray: boolean,
): Promise<$ReadOnlyArray> => {
let rows = [];
if (ids.length > 0) {
const idType = typeof ids[0] === 'number' ? 'int4' : 'text';
// @todo Do not use slonik-sql-tag-raw.
rows = await connection.any(sql`
SELECT ${raw(identifiers)}
FROM ${sql.identifier([tableName])}
WHERE ${sql.identifier([idName])} = ANY(${sql.array(ids, idType)})
`);
}
const results = [];
const targetPropertyName = camelCase(idName);
if (resultIsArray) {
for (const id of ids) {
const result = filter(rows, (row) => {
return row[targetPropertyName] === id;
});
results.push(result);
joiningTableName: string,
targetResourceTableName: string,
joiningKeyName: string,
lookupKeyName: string,
identifiers: string,
ids: $ReadOnlyArray,
): Promise<$ReadOnlyArray> => {
let rows = [];
// @todo Do not use slonik-sql-tag-raw.
if (ids.length > 0) {
rows = await connection.any(sql`
SELECT
${sql.identifier(['r1', lookupKeyName + '_id'])} "POSTLOADER_LOOKUP_KEY",
${raw(identifiers)}
FROM ${sql.identifier([joiningTableName])} r1
INNER JOIN ${sql.identifier([targetResourceTableName])} r2 ON r2.id = ${sql.identifier(['r1', joiningKeyName + '_id'])}
WHERE ${sql.identifier(['r1', lookupKeyName + '_id'])} = ANY(${sql.array(ids, 'int4')})
`);
}
const results = [];
for (const id of ids) {
const result = filter(rows, (row) => {
return row.POSTLOADER_LOOKUP_KEY === id;
});
results.push(result);
}
up: () => slonik.query(sql`${raw(readFileSync(path, 'utf8'))}`),
down: async () => {