drizzle-orm
drizzle-orm copied to clipboard
[FEATURE]: Support multiple onConflictDoUpdate's
Describe what you want
When an insert has multiple onConflictDoUpdate's, it seems that only the last one is picked up when executed. Ask for multiple on conflict clauses per https://www.sqlite.org/syntax/upsert-clause.html
const [subscription] = await db
.insert(schema.subscriptions)
.values({
id: subscriptionData.id,
status: subscriptionData.status,
plan,
cycleStartedAt,
customerId: subscriptionData.customerId,
createdAt,
updatedAt,
})
.onConflictDoUpdate({
target: schema.subscriptions.id,
set: {
status: subscriptionData.status,
plan,
cycleStartedAt,
updatedAt,
},
setWhere: sql`${updatedAt.getTime()} > ${schema.subscriptions.updatedAt}`,
})
.onConflictDoUpdate({
target: schema.subscriptions.customerId,
set: {
id: subscriptionData.id,
status: subscriptionData.status,
plan,
cycleStartedAt,
createdAt,
updatedAt,
},
setWhere: sql`${createdAt.getTime()} > ${schema.subscriptions.createdAt}`,
})
.returning();
insert into "subscriptions" ("id", "status", "plan", "cycle_started_at", "customer_id", "created_at", "updated_at")
values (?, ?, ?, ?, ?, ?, ?)
on conflict ("subscriptions"."customer_id")
do update set "id" = ?, "status" = ?, "plan" = ?, "cycle_started_at" = ?, "created_at" = ?, "updated_at" = ?
where ? > "subscriptions"."created_at" returning "id", "status", "plan", "cycle_started_at", "customer_id", "created_at", "updated_at"