Fix catalog_items_bc dedup/health: use its actual schema (no cost columns)

This commit is contained in:
openhands committed 2026-08-23 15:39:07 +02:00
1 parent 34475e9bc2
commit 2b7b445b73
1 file changed
+42 -22
+42 -22
View File
@@ -130,17 +130,34 @@ export async function getFurniHealth(): Promise<FurniHealth> {
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<DedupResult> {
*/
async function dedupCatalogTable(table: string): Promise<number> {
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(