From 40a95aafbca892fc7729f5e7f439188c03f5b8c4 Mon Sep 17 00:00:00 2001 From: "suguo.yao" Date: Fri, 3 Sep 2021 16:44:20 +0800 Subject: [PATCH] =?UTF-8?q?sqlite=20=E5=8F=8Atest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ README.md | 7 +++-- go.mod | 2 ++ mysql/mysql.go | 5 ++++ sqlite/config.go | 5 ++++ sqlite/sqlite.go | 63 +++++++++++++++++++++++++++++++++++++++++++++ test/sqlite_test.go | 40 ++++++++++++++++++++++++++++ 7 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 sqlite/config.go create mode 100644 sqlite/sqlite.go create mode 100644 test/sqlite_test.go diff --git a/.gitignore b/.gitignore index 93f7791..458b8d1 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ # Dependency directories (remove the comment below to include it) # vendor/ go.sum +tmp/ +.vscode/ +logs/ diff --git a/README.md b/README.md index 8cd80c2..b1d959b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ #### 组件实现 * MySQL - > "gorm.io/driver/mysql" - > "gorm.io/gorm" - > "gorm.io/gorm/logger" - > "gorm.io/plugin/dbresolver" + > 支持连接池dbresolver +* Sqlite + > 支持多级目录创建 diff --git a/go.mod b/go.mod index 4bcf31b..2ad335c 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.17 require ( gorm.io/driver/mysql v1.1.2 + gorm.io/driver/sqlite v1.1.4 gorm.io/gorm v1.21.14 gorm.io/plugin/dbresolver v1.1.0 ) @@ -12,4 +13,5 @@ require ( github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.2 // indirect + github.com/mattn/go-sqlite3 v1.14.5 // indirect ) diff --git a/mysql/mysql.go b/mysql/mysql.go index 870fe81..19b55b9 100644 --- a/mysql/mysql.go +++ b/mysql/mysql.go @@ -1,6 +1,7 @@ package mysql import ( + "errors" "time" "gorm.io/driver/mysql" @@ -34,6 +35,10 @@ func New() (*gorm.DB, error) { return _db, nil } + if _conf == nil { + return nil, errors.New("组件未初始化,请执行Init!") + } + var err error _db, err = gorm.Open(mysql.Open(_conf.ConnString), &gorm.Config{ SkipDefaultTransaction: true, diff --git a/sqlite/config.go b/sqlite/config.go new file mode 100644 index 0000000..115eaa8 --- /dev/null +++ b/sqlite/config.go @@ -0,0 +1,5 @@ +package sqlite + +type Config struct { + DBFile string //DB文件名 +} diff --git a/sqlite/sqlite.go b/sqlite/sqlite.go new file mode 100644 index 0000000..d377640 --- /dev/null +++ b/sqlite/sqlite.go @@ -0,0 +1,63 @@ +package sqlite + +import ( + "errors" + "os" + "path/filepath" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +var ( + _conf *Config + _db *gorm.DB +) + +//Init mysql初始化 +func Init(conf *Config) error { + if conf != nil { + _conf = conf + } + return nil +} + +//New 创建实例 +func New() (*gorm.DB, error) { + if _db != nil { + return _db, nil + } + + if _conf == nil { + return nil, errors.New("组件未初始化,请执行Init!") + } + + dir, _ := filepath.Split(_conf.DBFile) + if dir != "" { + _, err := os.Stat(dir) + if os.IsNotExist(err) { + if err := os.MkdirAll(dir, 0755); err != nil { + return nil, err + } + } + } + + var err error + _db, err = gorm.Open(sqlite.Open(_conf.DBFile), &gorm.Config{ + SkipDefaultTransaction: true, + Logger: logger.Default.LogMode(logger.Silent), + }) + if err != nil { + return nil, err + } + return _db, nil +} + +func Migrate(dest ...interface{}) error { + db, err := New() + if err != nil { + return err + } + return db.AutoMigrate(dest...) +} diff --git a/test/sqlite_test.go b/test/sqlite_test.go new file mode 100644 index 0000000..ee5a407 --- /dev/null +++ b/test/sqlite_test.go @@ -0,0 +1,40 @@ +package test + +import ( + "testing" + + "myschools.me/suguo/norm/sqlite" +) + +type ABC struct { + A string + B string + C string +} + +type CBA struct { + D string + E string + F string +} + +func TestSqlite(t *testing.T) { + conf := &sqlite.Config{ + DBFile: "tmp1/abc/aaaaa/abc.db", + } + if err := sqlite.Init(conf); err != nil { + t.Fatal(err) + } + db, err := sqlite.New() + if err != nil { + t.Fatal(err) + } + + if db == nil { + t.Error("DB nil") + } + + if err := sqlite.Migrate(&ABC{}, &CBA{}); err != nil { + t.Fatal(err) + } +}