From ebca381e9bfe74ffa1c8eea413348f06ee25644d Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 5 Aug 2024 15:09:33 +0200 Subject: [PATCH] Nested $and's and $or's test --- packages/backend-core/src/sql/sql.ts | 11 +++-- .../src/api/routes/tests/search.spec.ts | 43 +++++++++++++++++++ 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/packages/backend-core/src/sql/sql.ts b/packages/backend-core/src/sql/sql.ts index f58ddbac6a..714d68067d 100644 --- a/packages/backend-core/src/sql/sql.ts +++ b/packages/backend-core/src/sql/sql.ts @@ -370,12 +370,11 @@ class InternalBuilder { } if (filters.$and) { - iterate(filters.$and, (key: string, conditions: any[]) => { - query = query.where(x => { - for (const condition of conditions) { - x = this.addFilters(x, condition, table, opts) - } - }) + const { $and } = filters + query = query.where(x => { + for (const condition of $and.conditions) { + x = this.addFilters(x, condition, table, opts) + } }) } diff --git a/packages/server/src/api/routes/tests/search.spec.ts b/packages/server/src/api/routes/tests/search.spec.ts index bcffc8a868..517664c5ca 100644 --- a/packages/server/src/api/routes/tests/search.spec.ts +++ b/packages/server/src/api/routes/tests/search.spec.ts @@ -2850,5 +2850,48 @@ describe.each([ }, }).toFindNothing() }) + + it("can nest $and under $or filters", async () => { + await expectQuery({ + $or: { + conditions: [ + { + $and: { + conditions: [ + { + range: { age: { low: 1, high: 8 } }, + }, + { equal: { name: "Jan" } }, + ], + }, + equal: { name: "Jane" }, + }, + ], + }, + }).toContainExactly([ + { age: 1, name: "Jane" }, + { age: 8, name: "Jan" }, + ]) + }) + + it("can nest $or under $and filters", async () => { + await expectQuery({ + $and: { + conditions: [ + { + $or: { + conditions: [ + { + range: { age: { low: 1, high: 8 } }, + }, + { equal: { name: "Jan" } }, + ], + }, + equal: { name: "Jane" }, + }, + ], + }, + }).toContainExactly([{ age: 1, name: "Jane" }]) + }) }) })