drizzle-team / drizzle-team/drizzle-orm
[BUG]: Nested partial select fails to construct object if id is not selected
- Dominant language
- TypeScript
- Stars
- 35.8k
- Forks
- 1.6k
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 4
Description
### Report hasn't been filed before.
- [x] I have verified that the bug I'm about to report hasn't been filed before.
### What version of `drizzle-orm` are you using?
0.44.4
### What version of `drizzle-kit` are you using?
0.31.4
### Other packages
_No response_
### Describe the Bug
Trying to nest-select fields from a left-joined table will produce a `null` property value if the id field is not included.
```typescript
const vehiclesList = await db
.select({
driver: {
firstName: drivers.firstName,
},
})
.from(vehicles)
.leftJoin(drivers, eq(vehicles.driverId, drivers.id))
.where(and(...filters))
.orderBy(direction(vehicles[orderBy]))
.limit(pagination.perPage)
.offset(pagination.skip);
// Will result in: { driver: null }
```
```typescript
const vehiclesList = await db
.select({
driver: {
id: drivers.id,
firstName: drivers.firstName,
},
})
.from(vehicles)
.leftJoin(drivers, eq(vehicles.driverId, drivers.id))
.where(and(...filters))
.orderBy(direction(vehicles[orderBy]))
.limit(pagination.perPage)
.offset(pagination.skip);
// Will result in: { driver: { id: "ABC", firstName: "John Doe" } }
```
The doc on nested partial select makes no mention of this caveat:
> To avoid plethora of nullable fields when joining tables with lots of columns we can utilise our nested select object syntax, our smart type inference will make whole object nullable instead of making all table fields nullable!
Contributor guide
Assessment
This issue has not been assessed yet.