Skip to content

Commit

Permalink
fix(delegate): orderBy with base field doesn't work when the clause i…
Browse files Browse the repository at this point in the history
…s an array (#1824)
  • Loading branch information
ymc9 authored Nov 1, 2024
1 parent d985a73 commit f16225c
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 3 deletions.
8 changes: 5 additions & 3 deletions packages/runtime/src/enhancements/node/delegate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler {

if (args.orderBy) {
// `orderBy` may contain fields from base types
this.injectWhereHierarchy(this.model, args.orderBy);
enumerate(args.orderBy).forEach((item) => this.injectWhereHierarchy(model, item));
}

if (this.options.logPrismaQuery) {
Expand Down Expand Up @@ -206,7 +206,9 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler {
if (fieldValue !== undefined) {
if (fieldValue.orderBy) {
// `orderBy` may contain fields from base types
this.injectWhereHierarchy(fieldInfo.type, fieldValue.orderBy);
enumerate(fieldValue.orderBy).forEach((item) =>
this.injectWhereHierarchy(fieldInfo.type, item)
);
}

if (this.injectBaseFieldSelect(model, field, fieldValue, args, kind)) {
Expand Down Expand Up @@ -1037,7 +1039,7 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler {
}

if (args.orderBy) {
this.injectWhereHierarchy(this.model, args.orderBy);
enumerate(args.orderBy).forEach((item) => this.injectWhereHierarchy(this.model, item));
}

if (args.where) {
Expand Down
61 changes: 61 additions & 0 deletions tests/regression/tests/issue-1755.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { loadSchema } from '@zenstackhq/testtools';

describe('issue 1755', () => {
it('regression', async () => {
const { enhance } = await loadSchema(
`
model User {
id Int @id @default(autoincrement())
contents Content[]
}
model Content {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
userId Int
contentType String
@@delegate(contentType)
}
model Post extends Content {
title String
}
model Video extends Content {
name String
duration Int
}
`,
{ enhancements: ['delegate'] }
);

const db = enhance();
const user = await db.user.create({ data: {} });
const now = Date.now();
await db.post.create({
data: { title: 'post1', createdAt: new Date(now - 1000), user: { connect: { id: user.id } } },
});
await db.post.create({
data: { title: 'post2', createdAt: new Date(now), user: { connect: { id: user.id } } },
});

// scalar orderBy
await expect(db.post.findFirst({ orderBy: { createdAt: 'desc' } })).resolves.toMatchObject({
title: 'post2',
});

// array orderBy
await expect(db.post.findFirst({ orderBy: [{ createdAt: 'desc' }] })).resolves.toMatchObject({
title: 'post2',
});

// nested orderBy
await expect(
db.user.findFirst({ include: { contents: { orderBy: [{ createdAt: 'desc' }] } } })
).resolves.toMatchObject({
id: user.id,
contents: [{ title: 'post2' }, { title: 'post1' }],
});
});
});

0 comments on commit f16225c

Please sign in to comment.