Skip to content

Support dropping foreign key #45

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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/go-sql-driver/mysql v1.6.0
github.com/stretchr/testify v1.8.3
)
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ 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-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
Expand Down
12 changes: 11 additions & 1 deletion mysql.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Package mysql wraps mysql driver as an adapter for REL.
//
// Usage:
//
// // open mysql connection.
// // note: `clientFoundRows=true` is required for update and delete to works correctly.
// adapter, err := mysql.Open("root@(127.0.0.1:3306)/rel_test?clientFoundRows=true&charset=utf8&parseTime=True&loc=Local")
Expand All @@ -15,6 +16,7 @@ package mysql

import (
db "database/sql"
"fmt"
"strings"

"github.com/go-rel/rel"
Expand All @@ -36,7 +38,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: dropKeyMapper}
indexBuilder = builder.Index{BufferFactory: ddlBufferFactory, Query: ddlQueryBuilder, Filter: filterBuilder, DropIndexOnTable: true}
)

Expand Down Expand Up @@ -137,6 +139,14 @@ func columnMapper(column *rel.Column) (string, int, int) {
}
}

func dropKeyMapper(typ rel.KeyType) string {
if typ == rel.ForeignKey {
return "FOREIGN KEY"
}

panic(fmt.Sprintf("drop key: unsupported key type `%s`", typ))
}

func check(err error) {
if err != nil {
panic(err)
Expand Down
54 changes: 54 additions & 0 deletions mysql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/go-rel/primaryreplica"
"github.com/go-rel/rel"
"github.com/go-rel/sql"
"github.com/go-rel/sql/specs"
_ "github.com/go-sql-driver/mysql"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -163,3 +164,56 @@ func TestCheck(t *testing.T) {
check(errors.New("error"))
})
}

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 FOREIGN KEY `fk`;",
table: rel.Table{
Op: rel.SchemaAlter,
Name: "table",
Definitions: []rel.TableDefinition{
rel.Key{Op: rel.SchemaDrop, Name: "fk", Type: rel.ForeignKey},
},
},
},
}

for _, test := range tests {
t.Run(test.result, func(t *testing.T) {
assert.Equal(t, test.result, adapter.(*sql.SQL).TableBuilder.Build(test.table))
})
}
}

func TestAdapter_TableBuilder_unsupportedDropKeyType(t *testing.T) {
adapter, err := Open(dsn())
assert.Nil(t, err)
defer adapter.Close()

tests := []rel.KeyType{
rel.PrimaryKey,
rel.UniqueKey,
}

for _, keyType := range tests {
t.Run(string(keyType), func(t *testing.T) {
table := rel.Table{
Op: rel.SchemaAlter,
Name: "table",
Definitions: []rel.TableDefinition{
rel.Key{Op: rel.SchemaDrop, Name: "fk", Type: keyType},
},
}

assert.Panics(t, func() { adapter.(*sql.SQL).TableBuilder.Build(table) })
})
}
}