MCPcopy Index your code
hub / github.com/coder/coder / Stepper

Function Stepper

coderd/database/migrations/migrate.go:240–283  ·  view source on GitHub ↗

Stepper returns a function that runs SQL migrations one step at a time. Stepper cannot be closed pre-emptively, it must be run to completion (or until an error is encountered).

(db *sql.DB)

Source from the content-addressed store, hash-verified

238// Stepper cannot be closed pre-emptively, it must be run to completion
239// (or until an error is encountered).
240func Stepper(db *sql.DB) (next func() (version uint, more bool, err error), err error) {
241 _, m, err := setup(db, migrations)
242 if err != nil {
243 return nil, xerrors.Errorf("migrate setup: %w", err)
244 }
245
246 return func() (version uint, more bool, err error) {
247 defer func() {
248 if !more {
249 srcErr, dbErr := m.Close()
250 if err != nil {
251 return
252 }
253 if dbErr != nil {
254 err = dbErr
255 return
256 }
257 err = srcErr
258 }
259 }()
260
261 err = m.Steps(1)
262 if err != nil {
263 switch {
264 case errors.Is(err, migrate.ErrNoChange):
265 // It's OK if no changes happened!
266 return 0, false, nil
267 case errors.Is(err, fs.ErrNotExist):
268 // This error is encountered at the of Steps when
269 // reading from embed.FS.
270 return 0, false, nil
271 }
272
273 return 0, false, xerrors.Errorf("Step: %w", err)
274 }
275
276 v, _, err := m.Version()
277 if err != nil {
278 return 0, false, err
279 }
280
281 return v, true, nil
282 }, nil
283}

Calls 5

VersionMethod · 0.80
setupFunction · 0.70
CloseMethod · 0.65
ErrorfMethod · 0.45
IsMethod · 0.45