@@ -10,13 +10,13 @@ import (
10
10
"github.com/sourcegraph/sourcegraph/internal/database/migration/runner"
11
11
)
12
12
13
- // memoryStore implements runner.Store but writes to migration metadata to any
14
- // underlying persistence layer.
13
+ // memoryStore implements runner.Store but writes to migration metadata are
14
+ // not passed to any underlying persistence layer.
15
15
type memoryStore struct {
16
- db * sql.DB
17
- version int
18
- versionSet bool
19
- dirty bool
16
+ db * sql.DB
17
+ appliedVersions [] int
18
+ pendingVersions [] int
19
+ failedVersions [] int
20
20
}
21
21
22
22
func newMemoryStore (db * sql.DB ) runner.Store {
@@ -34,7 +34,15 @@ func (s *memoryStore) Done(err error) error {
34
34
}
35
35
36
36
func (s * memoryStore ) Version (ctx context.Context ) (int , bool , bool , error ) {
37
- return s .version , s .dirty , s .versionSet , nil
37
+ if n := len (s .appliedVersions ); n > 0 {
38
+ return s .appliedVersions [n - 1 ], len (s .pendingVersions )+ len (s .failedVersions ) > 0 , true , nil
39
+ }
40
+
41
+ return 0 , false , false , nil
42
+ }
43
+
44
+ func (s * memoryStore ) Versions (ctx context.Context ) (appliedVersions , pendingVersions , failedVersions []int , _ error ) {
45
+ return s .appliedVersions , s .pendingVersions , s .failedVersions , nil
38
46
}
39
47
40
48
func (s * memoryStore ) Lock (ctx context.Context ) (bool , func (err error ) error , error ) {
@@ -59,6 +67,11 @@ func (s *memoryStore) WithMigrationLog(_ context.Context, _ definition.Definitio
59
67
60
68
func (s * memoryStore ) exec (ctx context.Context , migration definition.Definition , query * sqlf.Query ) error {
61
69
_ , err := s .db .ExecContext (ctx , query .Query (sqlf .PostgresBindVar ), query .Args ()... )
62
- s .version , s .dirty , s .versionSet = migration .ID , s .dirty || err != nil , true
63
- return err
70
+ if err != nil {
71
+ s .failedVersions = append (s .failedVersions , migration .ID )
72
+ return err
73
+ }
74
+
75
+ s .appliedVersions = append (s .appliedVersions , migration .ID )
76
+ return nil
64
77
}
0 commit comments