drizzle-team / drizzle-team/drizzle-orm

[BUG]: Nested partial select fails to construct object if id is not selected

Open
#4,886 2 comments 0 reactions 0 assignees View on GitHub
bug bug/cant-reproduce
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.