findUnique (findOne) with a joined unique clause doesn't work
DustinJSilk opened this issue · comments
Dustin J Silk commented
Bug description
When using an @unique attribute with a string, date and enum value - a findUnique query returns null while a findFirst with the same query returns a record, and a findMany returns exactly 1 record.
How to reproduce
Create a schema like this:
model Availability {
id String @id @default(cuid())
date DateTime
property Property @relation(fields: [propertyId], references: [id])
propertyId String
status AvailabilityStatus @default(AVAILABLE)
@@unique([propertyId, date, status])
}
enum AvailabilityStatus {
AVAILABLE
}
model Property {
id String @id @default(cuid())
}
Run this in JavaScript
const date = new Date('2020-12-02T00:00:00.000Z');
const findUnique = await this.prisma.availability.findUnique({
where: {
propertyId_date_status: {
propertyId: 'your_id',
status: AvailabilityStatus.AVAILABLE,
date,
}
}
});
const findFirst = await this.prisma.availability.findFirst({
where: {
propertyId: 'your_id',
status: AvailabilityStatus.AVAILABLE,
date,
}
});
console.log(findUnique); // <-- Null
console.log(findFirst); // <-- Not null
Expected behavior
findUnique should return the only unique record.
Prisma information
Environment & setup
- OS: Mac
- Database: PostgreSQL
- Node.js version: v12.18.4
- Prisma version: 2.12.1
@prisma/cli : 2.12.1
@prisma/client : 2.12.1
Current platform : darwin
Query Engine : query-engine cf0680a1bfe8d5e743dc659cc7f08009f9587d58 (at node_modules/@prisma/engines/query-engine-darwin)
Migration Engine : migration-engine-cli cf0680a1bfe8d5e743dc659cc7f08009f9587d58 (at node_modules/@prisma/engines/migration-engine-darwin)
Introspection Engine : introspection-core cf0680a1bfe8d5e743dc659cc7f08009f9587d58 (at node_modules/@prisma/engines/introspection-engine-darwin)
Format Binary : prisma-fmt cf0680a1bfe8d5e743dc659cc7f08009f9587d58 (at node_modules/@prisma/engines/prisma-fmt-darwin)
Studio : 0.322.0
Dustin J Silk commented
Closing in favour of prisma/prisma#4438