import { BaseSchema } from '@adonisjs/lucid/schema' /** * Indexes for the GC's deletes of finished binaries, without the ones * waiting for inspection (LOG.md 2026-10-06 (11)): those can be millions * when inspection is behind, and the deletes must not read past them every * sweep. Built CONCURRENTLY: binaries takes writes all the time. */ export default class extends BaseSchema { static disableTransactions = true async up() { await this.db.rawQuery( `CREATE INDEX CONCURRENTLY IF NOT EXISTS binaries_done_last_seen_idx ON binaries (last_seen_at) WHERE file_id IS NOT NULL AND awaiting_inspection IS NOT TRUE` ) await this.db.rawQuery( `CREATE INDEX CONCURRENTLY IF NOT EXISTS binaries_awaiting_inspection_idx ON binaries (last_seen_at) WHERE awaiting_inspection IS TRUE` ) await this.db.rawQuery( `CREATE INDEX CONCURRENTLY IF NOT EXISTS binaries_open_last_seen_idx ON binaries (last_seen_at) WHERE completed_at IS NULL OR conflicted_at IS NOT NULL` ) } async down() { await this.db.rawQuery(`DROP INDEX CONCURRENTLY IF EXISTS binaries_open_last_seen_idx`) await this.db.rawQuery(`DROP INDEX CONCURRENTLY IF EXISTS binaries_awaiting_inspection_idx`) await this.db.rawQuery(`DROP INDEX CONCURRENTLY IF EXISTS binaries_done_last_seen_idx`) } }