Drizzle TeamDT
Drizzle Team7mo ago
3 replies
desgroup

Multiple leftJoins always returns never[]

Hey, I found something interesting with drizzle's leftJoin typing. If I stack multiple leftJoins back-to-back, the result is always never[]. Is this intentional or a bug?

import { pgSchema, primaryKey, text, uuid } from 'drizzle-orm/pg-core'
import { drizzle } from 'drizzle-orm/postgres-js'
import { eq } from 'drizzle-orm'

export const schema = pgSchema('neon_app')

export const users = schema.table('users', {
  id: uuid('id').primaryKey(),
})

export const pizzas = schema.table('pizzas', {
  id: uuid('id').primaryKey(),
  flavour: text('flavour').notNull(),
})

export const usersToPizzas = schema.table('users', {
  userId: uuid('user_id').references(() => users.id),
  pizzaId: uuid('pizza_id').references(() => pizzas.id),
}, table => [primaryKey({ columns: [table.userId, table.pizzaId] })])

const db = drizzle(process.env.DATABASE_URL!)

// Not an especially sane example, but SQL will return values for this.
async function getUserAndTheirFlavours() {
  const result = await db
    .select({
      userId: users.id,
      flavours: pizzas.flavour
    })
    .from(users)
    .leftJoin(usersToPizzas, eq(usersToPizzas.userId, users.id))
    .leftJoin(pizzas, eq(pizzas.id, usersToPizzas.pizzaId))
  
  // result is never[]!
}


Is this a bug?
Was this page helpful?