From 3f6526231e308c27bdbd57f2d4a2ce8612ff5438 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:51:07 -0700 Subject: [PATCH 1/2] fix(delegate): issue with filtering concrete relations with fields from base fixes #2246 --- .../runtime/src/enhancements/node/delegate.ts | 3 + tests/regression/tests/issue-2246.test.ts | 83 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 tests/regression/tests/issue-2246.test.ts diff --git a/packages/runtime/src/enhancements/node/delegate.ts b/packages/runtime/src/enhancements/node/delegate.ts index 56f918f40..977e1c199 100644 --- a/packages/runtime/src/enhancements/node/delegate.ts +++ b/packages/runtime/src/enhancements/node/delegate.ts @@ -228,6 +228,9 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { data[field] = {}; } await this.injectSelectIncludeHierarchy(fieldInfo.type, data[field]); + if (data[field].where) { + this.injectWhereHierarchy(fieldInfo.type, data[field].where); + } } } diff --git a/tests/regression/tests/issue-2246.test.ts b/tests/regression/tests/issue-2246.test.ts new file mode 100644 index 000000000..426f67cfc --- /dev/null +++ b/tests/regression/tests/issue-2246.test.ts @@ -0,0 +1,83 @@ +import { loadSchema } from '@zenstackhq/testtools'; +import { title } from 'process'; + +describe('issue 2246', () => { + it('regression', async () => { + const { enhance } = await loadSchema( + ` +model Media { + id Int @id @default(autoincrement()) + title String + mediaType String + + @@delegate(mediaType) + @@allow('all', true) +} + +model Movie extends Media { + director Director @relation(fields: [directorId], references: [id]) + directorId Int + duration Int + rating String +} + +model Director { + id Int @id @default(autoincrement()) + name String + email String + movies Movie[] + + @@allow('all', true) +} + ` + ); + + const db = enhance(); + + await db.director.create({ + data: { + name: 'Christopher Nolan', + email: 'christopher.nolan@example.com', + movies: { + create: { + title: 'Inception', + duration: 148, + rating: 'PG-13', + }, + }, + }, + }); + + await expect( + db.director.findMany({ + include: { + movies: { + where: { title: 'Inception' }, + }, + }, + }) + ).resolves.toHaveLength(1); + + await expect( + db.director.findFirst({ + include: { + _count: { select: { movies: { where: { title: 'Inception' } } } }, + }, + }) + ).resolves.toMatchObject({ _count: { movies: 1 } }); + + await expect( + db.movie.findMany({ + where: { title: 'Interstellar' }, + }) + ).resolves.toHaveLength(0); + + await expect( + db.director.findFirst({ + include: { + _count: { select: { movies: { where: { title: 'Interstellar' } } } }, + }, + }) + ).resolves.toMatchObject({ _count: { movies: 0 } }); + }); +}); From afd8a4b11679f4ec5f41587967adcbaf9e1ab8f5 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:57:21 -0700 Subject: [PATCH 2/2] update --- tests/regression/tests/issue-2246.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/regression/tests/issue-2246.test.ts b/tests/regression/tests/issue-2246.test.ts index 426f67cfc..ab487e6d9 100644 --- a/tests/regression/tests/issue-2246.test.ts +++ b/tests/regression/tests/issue-2246.test.ts @@ -1,5 +1,4 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { title } from 'process'; describe('issue 2246', () => { it('regression', async () => {