drizzle-orm icon indicating copy to clipboard operation
drizzle-orm copied to clipboard

[BUG]: AWS Data API error when getting relation with where clause

Open edgarssilva opened this issue 9 months ago • 0 comments

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.

edgarssilva avatar May 25 '24 15:05 edgarssilva