github.com/status-im/status-go@v1.1.0/protocol/sqlite/migrations.go (about) 1 package sqlite 2 3 import ( 4 "strings" 5 6 "github.com/pkg/errors" 7 8 encryptmigrations "github.com/status-im/status-go/protocol/encryption/migrations" 9 appmigrations "github.com/status-im/status-go/protocol/migrations" 10 push_notification_client_migrations "github.com/status-im/status-go/protocol/pushnotificationclient/migrations" 11 push_notification_server_migrations "github.com/status-im/status-go/protocol/pushnotificationserver/migrations" 12 wakumigrations "github.com/status-im/status-go/protocol/transport/migrations" 13 ) 14 15 type getter func(string) ([]byte, error) 16 17 type migrationsWithGetter struct { 18 Names []string 19 Getter getter 20 } 21 22 var defaultMigrations = []migrationsWithGetter{ 23 { 24 Names: wakumigrations.AssetNames(), 25 Getter: wakumigrations.Asset, 26 }, 27 { 28 Names: encryptmigrations.AssetNames(), 29 Getter: encryptmigrations.Asset, 30 }, 31 { 32 Names: appmigrations.AssetNames(), 33 Getter: appmigrations.Asset, 34 }, 35 { 36 Names: push_notification_server_migrations.AssetNames(), 37 Getter: push_notification_server_migrations.Asset, 38 }, 39 { 40 Names: push_notification_client_migrations.AssetNames(), 41 Getter: push_notification_client_migrations.Asset, 42 }, 43 } 44 45 func prepareMigrations(migrations []migrationsWithGetter) ([]string, getter, error) { 46 var allNames []string 47 nameToGetter := make(map[string]getter) 48 49 for _, m := range migrations { 50 for _, name := range m.Names { 51 if !validateName(name) { 52 continue 53 } 54 55 if _, ok := nameToGetter[name]; ok { 56 return nil, nil, errors.Errorf("migration with name %s already exists", name) 57 } 58 allNames = append(allNames, name) 59 nameToGetter[name] = m.Getter 60 } 61 } 62 63 return allNames, func(name string) ([]byte, error) { 64 getter, ok := nameToGetter[name] 65 if !ok { 66 return nil, errors.Errorf("no migration for name %s", name) 67 } 68 return getter(name) 69 }, nil 70 } 71 72 // validateName verifies that only *.sql files are taken into consideration. 73 func validateName(name string) bool { 74 return strings.HasSuffix(name, ".sql") 75 }