From 71d8b4a189d05538d8d70e912fc6cee07ca11a03 Mon Sep 17 00:00:00 2001 From: youpy <9128+youpy@users.noreply.github.com> Date: Sun, 9 Jul 2023 09:59:34 +0900 Subject: [PATCH] Support for drop Keys in the ALTER table (#59) --- go.mod | 2 +- go.sum | 4 ++-- postgres.go | 3 ++- postgres_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 63e68cb..76f4cf6 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/go-rel/primaryreplica v0.4.0 github.com/go-rel/rel v0.39.0 - github.com/go-rel/sql v0.13.1 + github.com/go-rel/sql v0.13.2-0.20230704013859-dd905c4be623 github.com/jackc/pgx/v4 v4.18.1 github.com/lib/pq v1.10.9 github.com/stretchr/testify v1.8.3 diff --git a/go.sum b/go.sum index f5b80c0..befeae9 100644 --- a/go.sum +++ b/go.sum @@ -20,8 +20,8 @@ github.com/go-rel/primaryreplica v0.4.0/go.mod h1:HUBz+BUvUcg9JpRRk9PstV9J/qlEOq github.com/go-rel/rel v0.33.1/go.mod h1:DhB9Xmt/ymaumJAB6Z3Kq+IybLwQhhrzr6ZLeXMygPo= github.com/go-rel/rel v0.39.0 h1:2zmK8kazM82iRRfWX7+mm1MxDkGKDj2W+xJLjguli5U= github.com/go-rel/rel v0.39.0/go.mod h1:yN6+aimHyRIzbuWFe5DaxiZPuVuPfd7GlLpy/YTqTUg= -github.com/go-rel/sql v0.13.1 h1:Q3G9/QyK4p7AIDNviW0x3JrfdG5LyoLrGH9uoaUtA+o= -github.com/go-rel/sql v0.13.1/go.mod h1:3t/E+2E/Y9rXURDD7ZMgpFdXLji10gP7gb57HeoaRNY= +github.com/go-rel/sql v0.13.2-0.20230704013859-dd905c4be623 h1:Qv+LecXM6dyy4B7r9icdF8OJA+kD8nPFX4s6W8mUMLk= +github.com/go-rel/sql v0.13.2-0.20230704013859-dd905c4be623/go.mod h1:KQJuW3s+GDnwdgA3+Ic5awz9t259bVehS4nd5A+Vgic= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= diff --git a/postgres.go b/postgres.go index 11ae81f..566b133 100644 --- a/postgres.go +++ b/postgres.go @@ -1,6 +1,7 @@ // Package postgres wraps postgres (pq) driver as an adapter for REL. // // Usage: +// // // open postgres connection. // adapter, err := postgres.Open("postgres://postgres@localhost/rel_test?sslmode=disable") // if err != nil { @@ -40,7 +41,7 @@ func New(database *db.DB) rel.Adapter { deleteBuilder = builder.Delete{BufferFactory: bufferFactory, Query: queryBuilder, Filter: filterBuilder} ddlBufferFactory = builder.BufferFactory{InlineValues: true, BoolTrueValue: "true", BoolFalseValue: "false", Quoter: Quote{}, ValueConverter: ValueConvert{}} ddlQueryBuilder = builder.Query{BufferFactory: ddlBufferFactory, Filter: filterBuilder} - tableBuilder = builder.Table{BufferFactory: ddlBufferFactory, ColumnMapper: columnMapper} + tableBuilder = builder.Table{BufferFactory: ddlBufferFactory, ColumnMapper: columnMapper, DropKeyMapper: sql.DropKeyMapper} indexBuilder = builder.Index{BufferFactory: ddlBufferFactory, Query: ddlQueryBuilder, Filter: filterBuilder, SupportFilter: true} ) diff --git a/postgres_test.go b/postgres_test.go index 4e69094..4f59ff1 100644 --- a/postgres_test.go +++ b/postgres_test.go @@ -157,6 +157,54 @@ func TestAdapter_Exec_error(t *testing.T) { assert.NotNil(t, err) } +func TestAdapter_TableBuilder(t *testing.T) { + adapter, err := Open(dsn()) + assert.Nil(t, err) + defer adapter.Close() + + tests := []struct { + result string + table rel.Table + }{ + { + result: `ALTER TABLE "table" DROP CONSTRAINT "key";`, + table: rel.Table{ + Op: rel.SchemaAlter, + Name: "table", + Definitions: []rel.TableDefinition{ + rel.Key{Op: rel.SchemaDrop, Name: "key", Type: rel.ForeignKey}, + }, + }, + }, + { + result: `ALTER TABLE "table" DROP CONSTRAINT "key";`, + table: rel.Table{ + Op: rel.SchemaAlter, + Name: "table", + Definitions: []rel.TableDefinition{ + rel.Key{Op: rel.SchemaDrop, Name: "key", Type: rel.UniqueKey}, + }, + }, + }, + { + result: `ALTER TABLE "table" DROP CONSTRAINT "key";`, + table: rel.Table{ + Op: rel.SchemaAlter, + Name: "table", + Definitions: []rel.TableDefinition{ + rel.Key{Op: rel.SchemaDrop, Name: "key", Type: rel.PrimaryKey}, + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.result, func(t *testing.T) { + assert.Equal(t, test.result, adapter.(*Postgres).TableBuilder.Build(test.table)) + }) + } +} + func TestCheck(t *testing.T) { assert.Panics(t, func() { check(errors.New("error"))