interface Database {
orders: { id: number; customer_id: number; status: string }
customers: { id: number; name: string }
order_items: { id: number; order_id: number; product_id: number }
products: { id: number; name: string; category_id: number }
categories: { id: number; name: string }
}
const db = new Kysely<Database>({
dialect,
plugins: [new DeduplicateJoinsPlugin()]
})
// Building a complex query with potential duplicate joins
const query = db
.selectFrom('orders')
.innerJoin('customers', 'customers.id', 'orders.customer_id')
.innerJoin('order_items', 'order_items.order_id', 'orders.id')
.innerJoin('products', 'products.id', 'order_items.product_id')
.innerJoin('categories', 'categories.id', 'products.category_id')
// Later conditions might add the same joins again
let finalQuery = query
.innerJoin('customers', 'customers.id', 'orders.customer_id') // Duplicate
.where('customers.name', 'like', '%John%')
// Deduplicated automatically by the plugin