From 2b7b445b733ff3c6f6098ffbbc70e34b6a7b2056 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 23 Aug 2026 15:39:07 +0200 Subject: [PATCH] Fix catalog_items_bc dedup/health: use its actual schema (no cost columns) --- src/lib/services/furni-maintenance.ts | 64 ++++++++++++++++++--------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/src/lib/services/furni-maintenance.ts b/src/lib/services/furni-maintenance.ts index b7041a1a8c..18aeb04418 100644 --- a/src/lib/services/furni-maintenance.ts +++ b/src/lib/services/furni-maintenance.ts @@ -130,17 +130,34 @@ export async function getFurniHealth(): Promise { SELECT item_name FROM items_base GROUP BY item_name HAVING COUNT(*) > 1 ) g`); - const DUP_GRP = - "page_id,item_ids,catalog_name,cost_credits,cost_points,points_type,amount,limited_sells,limited_stack,club_only,song_id,have_offer,extradata,badge"; + const CAT_DUP_COLS = [ + "page_id", + "item_ids", + "catalog_name", + "cost_credits", + "cost_points", + "points_type", + "amount", + "limited_sells", + "limited_stack", + "club_only", + "song_id", + "have_offer", + "extradata", + "badge", + ]; + const BC_DUP_COLS = ["page_id", "item_ids", "catalog_name", "extradata"]; + const catCols = CAT_DUP_COLS.join(","); + const bcCols = BC_DUP_COLS.join(","); const [cd] = await query<{ c: number }>(sql` SELECT COUNT(*) c FROM ( - SELECT ${sql.raw(DUP_GRP)} FROM catalog_items - GROUP BY ${sql.raw(DUP_GRP)} HAVING COUNT(*) > 1 + SELECT ${sql.raw(catCols)} FROM catalog_items + GROUP BY ${sql.raw(catCols)} HAVING COUNT(*) > 1 ) g`); const [cdb] = await query<{ c: number }>(sql` SELECT COUNT(*) c FROM ( - SELECT ${sql.raw(DUP_GRP)} FROM catalog_items_bc - GROUP BY ${sql.raw(DUP_GRP)} HAVING COUNT(*) > 1 + SELECT ${sql.raw(bcCols)} FROM catalog_items_bc + GROUP BY ${sql.raw(bcCols)} HAVING COUNT(*) > 1 ) g`); const furniData = (await readFurniData()) as Record< @@ -296,22 +313,25 @@ export async function removeDuplicateItemsBase(): Promise { */ async function dedupCatalogTable(table: string): Promise { if (!(await exists(table))) return 0; - const grp = [ - "page_id", - "item_ids", - "catalog_name", - "cost_credits", - "cost_points", - "points_type", - "amount", - "limited_sells", - "limited_stack", - "club_only", - "song_id", - "have_offer", - "extradata", - "badge", - ]; + const grp = + table === "catalog_items_bc" + ? ["page_id", "item_ids", "catalog_name", "extradata"] + : [ + "page_id", + "item_ids", + "catalog_name", + "cost_credits", + "cost_points", + "points_type", + "amount", + "limited_sells", + "limited_stack", + "club_only", + "song_id", + "have_offer", + "extradata", + "badge", + ]; const on = grp.map((c) => `t.${c} <=> d.${c}`).join(" AND "); const r = (await db.execute( sql.raw(