package operator import ( "context" "database/sql" "amadan.net/rastrillo/rastrillo/migrate" ) func VerifyLedger(ctx context.Context, c *sql.Conn, set *migrate.Set) error { if c == nil || set == nil { return ErrRefused } expected := map[string]string{} for _, m := range set.All() { if m.Fn != nil { return ErrRefused } expected[m.ID] = migrate.Checksum(m.SQL) } rows, e := c.QueryContext(ctx, "SELECT id,checksum FROM rastrillo_migrations LIMIT 1001") if e != nil { return ErrRefused } for rows.Next() { var id, sum string if rows.Scan(&id, &sum) != nil || expected[id] == "" || expected[id] != sum { rows.Close() return ErrRefused } delete(expected, id) } if rows.Err() != nil || rows.Close() != nil || len(expected) != 0 { return ErrRefused } return nil }