Skip to content

Commit

Permalink
Implement adapter Name and add Name constant (#53)
Browse files Browse the repository at this point in the history
* Implement adapter DBType and add Name constant

* Rename DBType to Name

* Update go-rel dependencies

* Refactor to have similar structure as other adapters

* Add MustOpen method like other adapters
  • Loading branch information
lafriks authored Oct 9, 2023
1 parent 9a585c6 commit 730f4a6
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 27 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ go 1.21
toolchain go1.21.0

require (
github.com/go-rel/rel v0.40.0
github.com/go-rel/sql v0.15.1-0.20230928064323-59ff908dea33
github.com/go-rel/rel v0.40.1-0.20231007112841-2e07fc196025
github.com/go-rel/sql v0.15.1-0.20231007214945-be5e6ac51f86
github.com/mattn/go-sqlite3 v1.14.17
github.com/stretchr/testify v1.8.4
)
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-rel/rel v0.40.0 h1:Av2/Ub6fQn6UbwxTIHStfLb7W+knRhOVX8AWcC+pOBA=
github.com/go-rel/rel v0.40.0/go.mod h1:6opWRxsoHoDq67fIDnsmcmnojpskWpPqCs0AoL/UrEU=
github.com/go-rel/sql v0.15.1-0.20230928064323-59ff908dea33 h1:4IkO1hj/CCgSQ7Q5OAmfxhNIIs8eay/JDadoG4TE/4Q=
github.com/go-rel/sql v0.15.1-0.20230928064323-59ff908dea33/go.mod h1:9Jy+N+nTTjlq9QZquoj19tppYuBXMz2grOtTN6HBD3U=
github.com/go-rel/rel v0.40.1-0.20231007112841-2e07fc196025 h1:Gq1za5TzJT5h7ByoaSYsKpcMJ5QcRvW7aJwBUJZNLcc=
github.com/go-rel/rel v0.40.1-0.20231007112841-2e07fc196025/go.mod h1:6opWRxsoHoDq67fIDnsmcmnojpskWpPqCs0AoL/UrEU=
github.com/go-rel/sql v0.15.1-0.20231007214945-be5e6ac51f86 h1:v4Oq20WfEwOkWiTlEKuqhtNkfTmZ39eK7Vj0U0cmAwI=
github.com/go-rel/sql v0.15.1-0.20231007214945-be5e6ac51f86/go.mod h1:1XD69cctqmI7vmIQikG2iAIL07Ql2Uy/mluOgD6uCZI=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
Expand Down
46 changes: 35 additions & 11 deletions sqlite3.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ import (
"github.com/go-rel/sql/builder"
)

// SQLite3 adapter
type SQLite3 struct {
sql.SQL
}

// Name of database type this adapter implements.
const Name string = "sqlite3"

// New sqlite3 adapter using existing connection.
func New(database *db.DB) rel.Adapter {
var (
Expand All @@ -40,17 +48,19 @@ func New(database *db.DB) rel.Adapter {
indexBuilder = builder.Index{BufferFactory: ddlBufferFactory, Query: ddlQueryBuilder, Filter: filterBuilder, SupportFilter: true}
)

return &sql.SQL{
QueryBuilder: queryBuilder,
InsertBuilder: InsertBuilder,
InsertAllBuilder: insertAllBuilder,
UpdateBuilder: updateBuilder,
DeleteBuilder: deleteBuilder,
TableBuilder: tableBuilder,
IndexBuilder: indexBuilder,
Increment: -1,
ErrorMapper: errorMapper,
DB: database,
return &SQLite3{
SQL: sql.SQL{
QueryBuilder: queryBuilder,
InsertBuilder: InsertBuilder,
InsertAllBuilder: insertAllBuilder,
UpdateBuilder: updateBuilder,
DeleteBuilder: deleteBuilder,
TableBuilder: tableBuilder,
IndexBuilder: indexBuilder,
Increment: -1,
ErrorMapper: errorMapper,
DB: database,
},
}
}

Expand All @@ -60,6 +70,20 @@ func Open(dsn string) (rel.Adapter, error) {
return New(database), err
}

// MustOpen sqlite3 connection using dsn.
func MustOpen(dsn string) rel.Adapter {
database, err := db.Open("sqlite3", dsn)
if err != nil {
panic(err)
}
return New(database)
}

// Name of database adapter.
func (SQLite3) Name() string {
return Name
}

func errorMapper(err error) error {
if err == nil {
return nil
Expand Down
22 changes: 12 additions & 10 deletions sqlite3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"testing"

"github.com/go-rel/rel"
"github.com/go-rel/sql"
"github.com/go-rel/sql/specs"
_ "github.com/mattn/go-sqlite3"
"github.com/stretchr/testify/assert"
Expand All @@ -22,9 +21,15 @@ func dsn() string {
return "./rel_test.db?_foreign_keys=1&_loc=Local"
}

func TestAdapter_Name(t *testing.T) {
adapter := MustOpen(dsn())
defer adapter.Close()

assert.Equal(t, Name, adapter.Name())
}

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

repo := rel.New(adapter)
Expand Down Expand Up @@ -101,16 +106,14 @@ func TestAdapter_specs(t *testing.T) {
}

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

assert.NotNil(t, adapter.Commit(ctx))
}

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

assert.NotNil(t, adapter.Rollback(ctx))
Expand All @@ -126,8 +129,7 @@ func TestAdapter_Exec_error(t *testing.T) {
}

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

tests := []struct {
Expand Down Expand Up @@ -162,7 +164,7 @@ func TestAdapter_TableBuilder(t *testing.T) {

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

0 comments on commit 730f4a6

Please sign in to comment.