File
Blob: src/worker/do/repo/db/schema.ts
| 1 | import { sql, desc } from "drizzle-orm"; |
| 2 | import { sqliteTable, text, primaryKey, index, check, integer } from "drizzle-orm/sqlite-core"; |
| 3 | |
| 4 | export const packCatalog = sqliteTable( |
| 5 | "pack_catalog", |
| 6 | { |
| 7 | packKey: text("pack_key").notNull(), |
| 8 | kind: text("kind").notNull(), |
| 9 | state: text("state").notNull(), |
| 10 | tier: integer("tier").notNull(), |
| 11 | seqLo: integer("seq_lo").notNull(), |
| 12 | seqHi: integer("seq_hi").notNull(), |
| 13 | objectCount: integer("object_count").notNull(), |
| 14 | packBytes: integer("pack_bytes").notNull(), |
| 15 | idxBytes: integer("idx_bytes").notNull(), |
| 16 | createdAt: integer("created_at").notNull(), |
| 17 | supersededBy: text("superseded_by"), |
| 18 | }, |
| 19 | (t) => [ |
| 20 | primaryKey({ columns: [t.packKey], name: "pack_catalog_pk" }), |
| 21 | index("idx_pack_catalog_state_seqhi").on(t.state, desc(t.seqHi)), |
| 22 | index("idx_pack_catalog_state_tier_seqlo").on(t.state, t.tier, t.seqLo), |
| 23 | check("chk_pack_catalog_kind", sql`"kind" IN ('receive','compact','legacy')`), |
| 24 | check("chk_pack_catalog_state", sql`"state" IN ('active','superseded')`), |
| 25 | check("chk_pack_catalog_tier", sql`"tier" >= 0`), |
| 26 | check("chk_pack_catalog_seq", sql`"seq_lo" <= "seq_hi"`), |
| 27 | check("chk_pack_catalog_object_count", sql`"object_count" >= 0`), |
| 28 | check("chk_pack_catalog_pack_bytes", sql`"pack_bytes" >= 0`), |
| 29 | check("chk_pack_catalog_idx_bytes", sql`"idx_bytes" >= 0`), |
| 30 | ] |
| 31 | ); |
| 32 | |
| 33 | export type PackCatalogRow = typeof packCatalog.$inferSelect; |