-- name: InsertLibraryChange :exec INSERT INTO library_changes (entity_type, entity_id, op) VALUES ($1, $2, $3); -- name: InsertLibraryChanges :exec -- Batch form, for a mutation that touches many rows at once (#2704: the scan's -- reconcile pass can mark up to a quarter of a library missing in one go). -- Every caller before this one changed a single entity, so per-row inserts -- were the right shape; a loop here would be thousands of round-trips inside -- a scan that is already the slow path. INSERT INTO library_changes (entity_type, entity_id, op) SELECT sqlc.arg(entity_type)::text, unnest(sqlc.arg(entity_ids)::text[]), sqlc.arg(op)::text; -- name: GetLibraryChangesSince :many SELECT id, entity_type, entity_id, op, changed_at FROM library_changes WHERE id > $1 ORDER BY id ASC LIMIT $2; -- name: GetMaxLibraryChangeCursor :one SELECT COALESCE(MAX(id), 0)::BIGINT FROM library_changes; -- name: GetMinLibraryChangeCursor :one SELECT COALESCE(MIN(id), 0)::BIGINT FROM library_changes; -- name: DeleteOldLibraryChanges :execrows -- Removes library_changes rows older than the given cutoff. Run from -- the sync compactor goroutine on a daily tick. Returns the number of -- rows deleted so the worker can log meaningful progress. DELETE FROM library_changes WHERE changed_at < $1;