Skip to content

Commit 1128d8f

Browse files
authored
feat: start local database from schema files (#4774)
* feat: start local database from schema files * fix: do not fail on missing declarative schema
1 parent a162e0a commit 1128d8f

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

internal/db/diff/diff.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,14 @@ func DiffDatabase(ctx context.Context, schema []string, config pgconn.Config, w
157157
Database: "postgres",
158158
}
159159
if utils.IsLocalDatabase(config) {
160-
if declared, err := loadDeclaredSchemas(fsys); err != nil {
161-
return "", err
162-
} else if len(declared) > 0 {
160+
if declared, err := loadDeclaredSchemas(fsys); len(declared) > 0 {
163161
config = shadowConfig
164162
config.Database = "contrib_regression"
165163
if err := migrateBaseDatabase(ctx, config, declared, fsys, options...); err != nil {
166164
return "", err
167165
}
166+
} else if err != nil {
167+
return "", err
168168
}
169169
}
170170
// Load all user defined schemas

internal/migration/apply/apply.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@ package apply
22

33
import (
44
"context"
5+
"fmt"
6+
"io/fs"
57

68
"github.com/jackc/pgx/v4"
79
"github.com/spf13/afero"
10+
"github.com/spf13/viper"
811
"github.com/supabase/cli/internal/migration/list"
912
"github.com/supabase/cli/internal/utils"
1013
"github.com/supabase/cli/pkg/migration"
1114
)
1215

1316
func MigrateAndSeed(ctx context.Context, version string, conn *pgx.Conn, fsys afero.Fs) error {
14-
if err := applyMigrationFiles(ctx, version, conn, fsys); err != nil {
17+
if viper.GetBool("EXPERIMENTAL") && len(version) == 0 {
18+
if err := applySchemaFiles(ctx, conn, afero.NewIOFS(fsys)); err != nil {
19+
return err
20+
}
21+
} else if err := applyMigrationFiles(ctx, version, conn, fsys); err != nil {
1522
return err
1623
}
1724
return applySeedFiles(ctx, conn, fsys)
@@ -38,3 +45,22 @@ func applySeedFiles(ctx context.Context, conn *pgx.Conn, fsys afero.Fs) error {
3845
}
3946
return migration.SeedData(ctx, seeds, conn, afero.NewIOFS(fsys))
4047
}
48+
49+
func applySchemaFiles(ctx context.Context, conn *pgx.Conn, fsys fs.FS) error {
50+
declared, err := utils.Config.Db.Migrations.SchemaPaths.Files(fsys)
51+
if len(declared) == 0 {
52+
return err
53+
}
54+
for _, fp := range declared {
55+
schema, err := migration.NewMigrationFromFile(fp, fsys)
56+
if err != nil {
57+
return err
58+
}
59+
schema.Version = ""
60+
if err := schema.ExecBatch(ctx, conn); err != nil {
61+
utils.CmdSuggestion = fmt.Sprintf("See schema file: %s", utils.Bold(fp))
62+
return err
63+
}
64+
}
65+
return nil
66+
}

0 commit comments

Comments
 (0)