github.com/supabase/cli@v1.168.1/internal/migration/apply/apply.go (about) 1 package apply 2 3 import ( 4 "context" 5 "fmt" 6 "io" 7 "os" 8 "path/filepath" 9 10 "github.com/go-errors/errors" 11 "github.com/jackc/pgx/v4" 12 "github.com/spf13/afero" 13 "github.com/supabase/cli/internal/migration/history" 14 "github.com/supabase/cli/internal/migration/list" 15 "github.com/supabase/cli/internal/migration/repair" 16 "github.com/supabase/cli/internal/utils" 17 ) 18 19 func MigrateAndSeed(ctx context.Context, version string, conn *pgx.Conn, fsys afero.Fs) error { 20 migrations, err := list.LoadPartialMigrations(version, fsys) 21 if err != nil { 22 return err 23 } 24 if err := MigrateUp(ctx, conn, migrations, fsys); err != nil { 25 return err 26 } 27 return SeedDatabase(ctx, conn, fsys) 28 } 29 30 func SeedDatabase(ctx context.Context, conn *pgx.Conn, fsys afero.Fs) error { 31 seed, err := repair.NewMigrationFromFile(utils.SeedDataPath, fsys) 32 if errors.Is(err, os.ErrNotExist) { 33 return nil 34 } else if err != nil { 35 return err 36 } 37 fmt.Fprintln(os.Stderr, "Seeding data "+utils.Bold(utils.SeedDataPath)+"...") 38 // Batch seed commands, safe to use statement cache 39 return seed.ExecBatchWithCache(ctx, conn) 40 } 41 42 func MigrateUp(ctx context.Context, conn *pgx.Conn, pending []string, fsys afero.Fs) error { 43 if len(pending) > 0 { 44 if err := history.CreateMigrationTable(ctx, conn); err != nil { 45 return err 46 } 47 } 48 for _, filename := range pending { 49 if err := applyMigration(ctx, conn, filename, fsys); err != nil { 50 return err 51 } 52 } 53 return nil 54 } 55 56 func applyMigration(ctx context.Context, conn *pgx.Conn, filename string, fsys afero.Fs) error { 57 fmt.Fprintln(os.Stderr, "Applying migration "+utils.Bold(filename)+"...") 58 path := filepath.Join(utils.MigrationsDir, filename) 59 migration, err := repair.NewMigrationFromFile(path, fsys) 60 if err != nil { 61 return err 62 } 63 return migration.ExecBatch(ctx, conn) 64 } 65 66 func BatchExecDDL(ctx context.Context, conn *pgx.Conn, sql io.Reader) error { 67 migration, err := repair.NewMigrationFromReader(sql) 68 if err != nil { 69 return err 70 } 71 return migration.ExecBatch(ctx, conn) 72 }