🐛 Fix ORM query builder with $in option for postgres (#771)
This commit is contained in:
+11
-2
@@ -83,8 +83,17 @@ export class PostgresQueryBuilder {
|
|||||||
|
|
||||||
// === IN ===
|
// === IN ===
|
||||||
options.$in?.forEach(e => {
|
options.$in?.forEach(e => {
|
||||||
whereClause += `${e[0]} IN ($${e[1].map(() => idx++).join(",$")}) AND `;
|
const [column, valuesArray] = e;
|
||||||
values.push(...e[1]);
|
|
||||||
|
// throw an error if the values array is empty
|
||||||
|
if (!valuesArray || valuesArray.length === 0) {
|
||||||
|
throw new Error(
|
||||||
|
`The $in operator for column '${column}' requires a non-empty array of values.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
whereClause += `${column} IN ($${valuesArray.map(() => idx++).join(",$")}) AND `;
|
||||||
|
values.push(...valuesArray);
|
||||||
});
|
});
|
||||||
|
|
||||||
// === LIKE ====
|
// === LIKE ====
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ export class UserServiceImpl {
|
|||||||
pagination,
|
pagination,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (options?.userIds) {
|
if (Array.isArray(options?.userIds) && options.userIds.length > 0) {
|
||||||
findOptions.$in = [["id", options.userIds]];
|
findOptions.$in = [["id", options.userIds]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
@@ -93,6 +93,16 @@ describe('The PostgresQueryBuilder', () => {
|
|||||||
expect(query[1]).toEqual(options.$in[0][1]);
|
expect(query[1]).toEqual(options.$in[0][1]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('buildSelect query "in" options with empty array', async () => {
|
||||||
|
//given
|
||||||
|
const options = { $in: [["added", []] as comparisonType] };
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
expect(() => {
|
||||||
|
subj.buildSelect(TestDbEntity, null, options);
|
||||||
|
}).toThrowError("The $in operator for column 'added' requires a non-empty array of values.");
|
||||||
|
});
|
||||||
|
|
||||||
test('buildSelect query "like" options', async () => {
|
test('buildSelect query "like" options', async () => {
|
||||||
//given
|
//given
|
||||||
const options = { $like: [["id", randomUUID()] as comparisonType, ["company_id", randomUUID()] as comparisonType]};
|
const options = { $like: [["id", randomUUID()] as comparisonType, ["company_id", randomUUID()] as comparisonType]};
|
||||||
|
|||||||
Reference in New Issue
Block a user