diff --git a/adapter/sqlite3/sqlite3.go b/adapter/sqlite3/sqlite3.go deleted file mode 100644 index 73d3232b..00000000 --- a/adapter/sqlite3/sqlite3.go +++ /dev/null @@ -1,127 +0,0 @@ -// Package sqlite3 wraps go-sqlite3 driver as an adapter for rel. -// -// Deprecated: Please use github.com/go-rel/sqlite3 instead. -// -// Usage: -// // open sqlite3 connection. -// adapter, err := sqlite3.Open("dev.db") -// if err != nil { -// panic(err) -// } -// defer adapter.Close() -// -// // initialize rel's repo. -// repo := rel.New(adapter) -package sqlite3 - -import ( - db "database/sql" - "strings" - - "github.com/go-rel/rel" - "github.com/go-rel/rel/adapter/sql" -) - -// Adapter definition for mysql database. -type Adapter struct { - *sql.Adapter -} - -var ( - _ rel.Adapter = (*Adapter)(nil) - - // Config for mysql adapter. - Config = sql.Config{ - Placeholder: "?", - EscapeChar: "`", - InsertDefaultValues: true, - IncrementFunc: incrementFunc, - ErrorFunc: errorFunc, - MapColumnFunc: mapColumnFunc, - } -) - -// New sqlite adapter using existing connection. -// -// Deprecated: Please use github.com/go-rel/sqlite3 instead. -func New(database *db.DB) *Adapter { - return &Adapter{ - Adapter: &sql.Adapter{ - Config: Config, - DB: database, - }, - } -} - -// Open sqlite connection using dsn. -func Open(dsn string) (*Adapter, error) { - var database, err = db.Open("sqlite3", dsn) - return New(database), err -} - -func incrementFunc(adapter sql.Adapter) int { - // decrement - return -1 -} - -func errorFunc(err error) error { - if err == nil { - return nil - } - - var ( - msg = err.Error() - failedSep = " failed: " - failedIndex = strings.Index(msg, failedSep) - failedLen = 9 // len(failedSep) - ) - - if failedIndex < 0 { - failedIndex = 0 - } - - switch msg[:failedIndex] { - case "UNIQUE constraint": - return rel.ConstraintError{ - Key: msg[failedIndex+failedLen:], - Type: rel.UniqueConstraint, - Err: err, - } - case "CHECK constraint": - return rel.ConstraintError{ - Key: msg[failedIndex+failedLen:], - Type: rel.CheckConstraint, - Err: err, - } - default: - return err - } -} - -func mapColumnFunc(column *rel.Column) (string, int, int) { - var ( - typ string - m, n int - unsigned = column.Unsigned - ) - - column.Unsigned = false - - switch column.Type { - case rel.ID: - typ = "INTEGER PRIMARY KEY" - case rel.BigID: - typ = "BIGINT PRIMARY KEY" - case rel.Int: - typ = "INTEGER" - m = column.Limit - default: - typ, m, n = sql.MapColumn(column) - } - - if unsigned { - typ = "UNSIGNED " + typ - } - - return typ, m, n -} diff --git a/adapter/sqlite3/sqlite3_test.go b/adapter/sqlite3/sqlite3_test.go deleted file mode 100644 index e3f0793e..00000000 --- a/adapter/sqlite3/sqlite3_test.go +++ /dev/null @@ -1,120 +0,0 @@ -package sqlite3 - -import ( - "context" - "os" - "testing" - - "github.com/go-rel/rel" - "github.com/go-rel/rel/adapter/specs" - _ "github.com/mattn/go-sqlite3" - "github.com/stretchr/testify/assert" -) - -var ctx = context.TODO() - -func dsn() string { - if os.Getenv("SQLITE3_DATABASE") != "" { - return os.Getenv("SQLITE3_DATABASE") + "?_foreign_keys=1&_loc=Local" - } - - return "./rel_test.db?_foreign_keys=1&_loc=Local" -} - -func TestAdapter_specs(t *testing.T) { - adapter, err := Open(dsn()) - assert.Nil(t, err) - defer adapter.Close() - - repo := rel.New(adapter) - - // Prepare tables - teardown := specs.Setup(t, repo) - defer teardown() - - // Migration Specs - specs.Migrate(t, repo, specs.SkipDropColumn) - - // Query Specs - specs.Query(t, repo) - specs.QueryJoin(t, repo) - specs.QueryWhereSubQuery(t, repo, specs.SkipAllAndAnyKeyword) - specs.QueryNotFound(t, repo) - - // Preload specs - specs.PreloadHasMany(t, repo) - specs.PreloadHasManyWithQuery(t, repo) - specs.PreloadHasManySlice(t, repo) - specs.PreloadHasOne(t, repo) - specs.PreloadHasOneWithQuery(t, repo) - specs.PreloadHasOneSlice(t, repo) - specs.PreloadBelongsTo(t, repo) - specs.PreloadBelongsToWithQuery(t, repo) - specs.PreloadBelongsToSlice(t, repo) - - // Aggregate Specs - specs.Aggregate(t, repo) - - // Insert Specs - specs.Insert(t, repo) - specs.InsertHasMany(t, repo) - specs.InsertHasOne(t, repo) - specs.InsertBelongsTo(t, repo) - specs.Inserts(t, repo) - specs.InsertAll(t, repo) - // specs.InsertAllPartialCustomPrimary(t, repo) - not supported - - // Update Specs - specs.Update(t, repo) - specs.UpdateNotFound(t, repo) - specs.UpdateHasManyInsert(t, repo) - specs.UpdateHasManyUpdate(t, repo) - specs.UpdateHasManyReplace(t, repo) - specs.UpdateHasOneInsert(t, repo) - specs.UpdateHasOneUpdate(t, repo) - specs.UpdateBelongsToInsert(t, repo) - specs.UpdateBelongsToUpdate(t, repo) - specs.UpdateAtomic(t, repo) - specs.Updates(t, repo) - specs.UpdateAny(t, repo) - - // Delete specs - specs.Delete(t, repo) - specs.DeleteBelongsTo(t, repo) - specs.DeleteHasOne(t, repo) - specs.DeleteHasMany(t, repo) - specs.DeleteAll(t, repo) - specs.DeleteAny(t, repo) - - // Constraint specs - // - foreign key constraint is not supported because of lack of information in the error message. - specs.UniqueConstraintOnInsert(t, repo) - specs.UniqueConstraintOnUpdate(t, repo) - specs.CheckConstraintOnInsert(t, repo) - specs.CheckConstraintOnUpdate(t, repo) -} - -func TestAdapter_Transaction_commitError(t *testing.T) { - adapter, err := Open(dsn()) - assert.Nil(t, err) - defer adapter.Close() - - assert.NotNil(t, adapter.Commit(ctx)) -} - -func TestAdapter_Transaction_rollbackError(t *testing.T) { - adapter, err := Open(dsn()) - assert.Nil(t, err) - defer adapter.Close() - - assert.NotNil(t, adapter.Rollback(ctx)) -} - -func TestAdapter_Exec_error(t *testing.T) { - adapter, err := Open(dsn()) - assert.Nil(t, err) - defer adapter.Close() - - _, _, err = adapter.Exec(ctx, "error", nil) - assert.NotNil(t, err) -} diff --git a/cmd/rel/internal/migrate_test.go b/cmd/rel/internal/migrate_test.go index 353404b0..3136ea84 100644 --- a/cmd/rel/internal/migrate_test.go +++ b/cmd/rel/internal/migrate_test.go @@ -29,7 +29,7 @@ func TestExecMigrate(t *testing.T) { args = []string{ "rel", "migrate", - "-adapter=github.com/go-rel/rel/adapter/sqlite3", + "-adapter=github.com/go-rel/sqlite3", "-driver=github.com/mattn/go-sqlite3", "-dsn=:memory:", "-dir=db", @@ -47,7 +47,7 @@ func TestExecMigrate(t *testing.T) { "migrate", "-dir=testdata/migrations", "-module=github.com/go-rel/rel/cmd/rel/internal", - "-adapter=github.com/go-rel/rel/adapter/sqlite3", + "-adapter=github.com/go-rel/sqlite3", "-driver=github.com/mattn/go-sqlite3", "-dsn=:memory:", "-verbose=false", diff --git a/cmd/rel/internal/util.go b/cmd/rel/internal/util.go index 83abb183..609c8cdd 100644 --- a/cmd/rel/internal/util.go +++ b/cmd/rel/internal/util.go @@ -22,11 +22,11 @@ func getDatabaseInfo() (string, string, string) { driver = os.Getenv("DATABASE_DRIVER") dsn = os.Getenv("DATABASE_URL") case os.Getenv("SQLITE3_DATABASE") != "": - adapter = "github.com/go-rel/rel/adapter/sqlite3" + adapter = "github.com/go-rel/sqlite3" driver = "github.com/mattn/go-sqlite3" dsn = os.Getenv("SQLITE3_DATABASE") case os.Getenv("MYSQL_HOST") != "": - adapter = "github.com/go-rel/rel/adapter/mysql" + adapter = "github.com/go-rel/mysql" driver = "github.com/go-sql-driver/mysql" dsn = fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", os.Getenv("MYSQL_USERNAME"), @@ -35,7 +35,7 @@ func getDatabaseInfo() (string, string, string) { os.Getenv("MYSQL_PORT"), os.Getenv("MYSQL_DATABASE")) case os.Getenv("POSTGRES_HOST") != "": - adapter = "github.com/go-rel/rel/adapter/postgres" + adapter = "github.com/go-rel/postgres" driver = "github.com/lib/pq" dsn = fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", os.Getenv("POSTGRES_USERNAME"), @@ -44,7 +44,7 @@ func getDatabaseInfo() (string, string, string) { os.Getenv("POSTGRES_PORT"), os.Getenv("POSTGRES_DATABASE")) case os.Getenv("POSTGRESQL_HOST") != "": - adapter = "github.com/go-rel/rel/adapter/postgres" + adapter = "github.com/go-rel/postgres" driver = "github.com/lib/pq" dsn = fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", os.Getenv("POSTGRESQL_USERNAME"), diff --git a/cmd/rel/internal/util_test.go b/cmd/rel/internal/util_test.go index b8b2313c..150123c7 100644 --- a/cmd/rel/internal/util_test.go +++ b/cmd/rel/internal/util_test.go @@ -11,7 +11,7 @@ import ( func TestGetDatabaseInfo(t *testing.T) { t.Run("database", func(t *testing.T) { - os.Setenv("DATABASE_ADAPTER", "github.com/go-rel/rel/adapter/mysql") + os.Setenv("DATABASE_ADAPTER", "github.com/go-rel/mysql") os.Setenv("DATABASE_DRIVER", "github.com/go-sql-driver/mysql") os.Setenv("DATABASE_URL", "user:password@(localhost:3306)/db?charset=utf8&parseTime=True&loc=Local") @@ -20,7 +20,7 @@ func TestGetDatabaseInfo(t *testing.T) { defer os.Setenv("DATABASE_URL", "") adapter, driver, url := getDatabaseInfo() - assert.Equal(t, "github.com/go-rel/rel/adapter/mysql", adapter) + assert.Equal(t, "github.com/go-rel/mysql", adapter) assert.Equal(t, "github.com/go-sql-driver/mysql", driver) assert.Equal(t, "user:password@(localhost:3306)/db?charset=utf8&parseTime=True&loc=Local", url) }) @@ -39,7 +39,7 @@ func TestGetDatabaseInfo(t *testing.T) { defer os.Setenv("MYSQL_PASSWORD", "") adapter, driver, url := getDatabaseInfo() - assert.Equal(t, "github.com/go-rel/rel/adapter/mysql", adapter) + assert.Equal(t, "github.com/go-rel/mysql", adapter) assert.Equal(t, "github.com/go-sql-driver/mysql", driver) assert.Equal(t, "user:password@(localhost:3306)/db?charset=utf8&parseTime=True&loc=Local", url) }) @@ -58,7 +58,7 @@ func TestGetDatabaseInfo(t *testing.T) { defer os.Setenv("POSTGRES_PASSWORD", "") adapter, driver, url := getDatabaseInfo() - assert.Equal(t, "github.com/go-rel/rel/adapter/postgres", adapter) + assert.Equal(t, "github.com/go-rel/postgres", adapter) assert.Equal(t, "github.com/lib/pq", driver) assert.Equal(t, "postgres://user:password@localhost:5432/db?sslmode=disable", url) }) @@ -77,7 +77,7 @@ func TestGetDatabaseInfo(t *testing.T) { defer os.Setenv("POSTGRESQL_PASSWORD", "") adapter, driver, url := getDatabaseInfo() - assert.Equal(t, "github.com/go-rel/rel/adapter/postgres", adapter) + assert.Equal(t, "github.com/go-rel/postgres", adapter) assert.Equal(t, "github.com/lib/pq", driver) assert.Equal(t, "postgres://user:password@localhost:5432/db?sslmode=disable", url) }) @@ -87,7 +87,7 @@ func TestGetDatabaseInfo(t *testing.T) { defer os.Setenv("SQLITE3_DATABASE", "") adapter, driver, url := getDatabaseInfo() - assert.Equal(t, "github.com/go-rel/rel/adapter/sqlite3", adapter) + assert.Equal(t, "github.com/go-rel/sqlite3", adapter) assert.Equal(t, "github.com/mattn/go-sqlite3", driver) assert.Equal(t, "test.db", url) })