Skip to content
File

Blob: src/worker/do/repo/db/schema.ts

typescript34 lines
1import { sql, desc } from "drizzle-orm";
2import { sqliteTable, text, primaryKey, index, check, integer } from "drizzle-orm/sqlite-core";
3 
4export 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 
33export type PackCatalogRow = typeof packCatalog.$inferSelect;