diff --git a/go.mod b/go.mod index 94b2581..e960ece 100644 --- a/go.mod +++ b/go.mod @@ -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 ) diff --git a/go.sum b/go.sum index 29d7803..700835e 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/sqlite3.go b/sqlite3.go index f15a120..4322419 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -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 ( @@ -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, + }, } } @@ -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 diff --git a/sqlite3_test.go b/sqlite3_test.go index d1c7ea0..08d51a2 100644 --- a/sqlite3_test.go +++ b/sqlite3_test.go @@ -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" @@ -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) @@ -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)) @@ -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 { @@ -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)) }) } }