drizzle-orm
drizzle-orm copied to clipboard
[BUG]: AWS Data API error when getting relation with where clause
What version of drizzle-orm
are you using?
^0.30.9
What version of drizzle-kit
are you using?
^0.21.2
Describe the Bug
Currently, I'm trying to retrieve all the records of a table (trucks) where a relation in another table (truckAvailability) exists.
A simplified schema is as follows:
export const trucks = pgTable("trucks", {
id: serial("id").primaryKey(),
//...
});
export const truckRelations = relations(trucks, ({ one, many }) => ({
//...
availabilities: many(truckAvailability),
}));
export const truckAvailability = pgTable("truck_availability", {
id: serial("id").primaryKey(),
truckId: integer("truck_id")
.references(() => trucks.id)
.notNull(),
available: boolean("available").notNull().default(true),
//...
});
export const truckAvailabilityRelations = relations(truckAvailability, ({ one }) => ({
truck: one(trucks, { fields: [truckAvailability.truckId], references: [trucks.id] }),
//...
}));
Running a query where I findMany trucks with the availabilities relation where available is true, returns the following error:
TypeError: Cannot read properties of undefined (reading 'map')
at mapColumnsInSQLToAlias (/var/task/node_modules/drizzle-orm/alias.cjs:120:48)
at AwsPgDialect.buildRelationalQueryWithoutPK (/var/task/node_modules/drizzle-orm/pg-core/dialect.cjs:906:69)
at AwsPgDialect.buildRelationalQueryWithoutPK (/var/task/node_modules/drizzle-orm/pg-core/dialect.cjs:986:36)
at QueryPromise._getQuery (/var/task/node_modules/drizzle-orm/pg-core/query-builders/query.cjs:106:25)
at QueryPromise._toSQL (/var/task/node_modules/drizzle-orm/pg-core/query-builders/query.cjs:121:24)
at /var/task/node_modules/drizzle-orm/pg-core/query-builders/query.cjs:84:42
at Object.startActiveSpan (/var/task/node_modules/drizzle-orm/tracing.cjs:31:14)
at QueryPromise._prepare (/var/task/node_modules/drizzle-orm/pg-core/query-builders/query.cjs:83:34)
at /var/task/node_modules/drizzle-orm/pg-core/query-builders/query.cjs:130:19
at Object.startActiveSpan (/var/task/node_modules/drizzle-orm/tracing.cjs:31:14)
Expected behavior
The query executed was the following:
const trucks = await db.query.trucks.findMany({ with: { availabilities: { where: (availability) => availability.available } } });
This should return a valid list of trucks and their available availabilities (I know it's not the best naming).
For testing purposes I tried the following query:
const trucks = await db.query.trucks.findMany({ with: { availabilities: true } });
It works correctly, but adding any condition results in the previous error.
const trucks = await db.query.trucks.findMany({ with: { availabilities: { where: () => true } } });
Environment & setup
The code was run on an AWS Lambda using Node18.x using the Serverless Framework.