From 87ead07136eb42f7f2967e8094b0ed41e51596cf Mon Sep 17 00:00:00 2001 From: Ariel Mashraki <7413593+a8m@users.noreply.github.com> Date: Tue, 5 Dec 2023 23:20:52 +0200 Subject: [PATCH] sql/internal/sqlx: diff realm adds new schema with all its resources (#2339) --- sql/internal/sqlx/diff.go | 9 +++++++++ sql/postgres/diff_test.go | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/sql/internal/sqlx/diff.go b/sql/internal/sqlx/diff.go index 22efcadeb90..5afb647eefb 100644 --- a/sql/internal/sqlx/diff.go +++ b/sql/internal/sqlx/diff.go @@ -122,6 +122,15 @@ func (d *Diff) RealmDiff(from, to *schema.Realm, options ...schema.DiffOption) ( continue } changes = opts.AddOrSkip(changes, &schema.AddSchema{S: s1}) + for _, o := range s1.Objects { + changes = opts.AddOrSkip(changes, &schema.AddObject{O: o}) + } + for _, f := range s1.Funcs { + changes = opts.AddOrSkip(changes, &schema.AddFunc{F: f}) + } + for _, p := range s1.Procs { + changes = opts.AddOrSkip(changes, &schema.AddProc{P: p}) + } for _, t := range s1.Tables { changes = opts.AddOrSkip(changes, &schema.AddTable{T: t}) } diff --git a/sql/postgres/diff_test.go b/sql/postgres/diff_test.go index 02515d6bebe..e8763f844d5 100644 --- a/sql/postgres/diff_test.go +++ b/sql/postgres/diff_test.go @@ -484,6 +484,27 @@ func TestDiff_TableDiff(t *testing.T) { } } +func TestDiff_RealmDiff(t *testing.T) { + db, m, err := sqlmock.New() + require.NoError(t, err) + mock{m}.version("130000") + drv, err := Open(db) + to := schema.New("public"). + AddTables( + schema.NewTable("users").AddColumns(schema.NewIntColumn("t2_id", "int")), + ). + AddObjects( + &schema.EnumType{T: "e", Values: []string{"b"}}, + ) + changes, err := drv.RealmDiff(schema.NewRealm(), schema.NewRealm(to)) + require.NoError(t, err) + require.EqualValues(t, []schema.Change{ + &schema.AddSchema{S: to}, + &schema.AddObject{O: to.Objects[0]}, + &schema.AddTable{T: to.Tables[0]}, + }, changes) +} + func TestDiff_SchemaDiff(t *testing.T) { db, m, err := sqlmock.New() require.NoError(t, err)