From 5cf6886c5302a35d5027db6f0cefdb4d0d186b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Tue, 18 Apr 2023 17:53:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81sqlite=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client.go | 25 +++++++++++++++++++------ define.go | 16 ++++++++++++---- go.mod | 4 +++- go.sum | 8 ++++++++ 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/client.go b/client.go index 4a20f60..2a1116b 100644 --- a/client.go +++ b/client.go @@ -24,6 +24,7 @@ import ( gormLogger "gorm.io/gorm/logger" "gorm.io/driver/mysql" + "gorm.io/driver/sqlite" "gorm.io/gorm" ) @@ -70,7 +71,7 @@ func (c *client) AddWithConfigFile(cfgFilePath string, logInstance *zap.Logger) master: nil, slave: nil, extraFieldList: nil, - cfg: Mysql{}, + cfg: Driver{}, } if dbClient.master, err = c.GetDatabaseClient(cfg.Config.Master, logInstance); nil != err { return err @@ -218,14 +219,22 @@ func (c *client) getGormClient() (*gorm.DB, error) { // Author : go_developer@163.com<白茶清欢> // // Date : 18:41 2022/6/11 -func (c *client) GetDatabaseClient(conf *Mysql, logInstance *zap.Logger) (*gorm.DB, error) { +func (c *client) GetDatabaseClient(conf *Driver, logInstance *zap.Logger) (*gorm.DB, error) { var ( instance *gorm.DB err error ) - if instance, err = gorm.Open(mysql.Open(c.buildConnectionDSN(conf)), &gorm.Config{}); nil != err { - return nil, err + if conf.DBType == DriverTypeMysql { + if instance, err = gorm.Open(mysql.Open(c.buildConnectionDSN(conf)), &gorm.Config{}); nil != err { + return nil, err + } + } else if conf.DBType == DriverTypeSqlite3 { + if instance, err = gorm.Open(sqlite.Open(c.buildConnectionDSN(conf)), &gorm.Config{}); nil != err { + return nil, err + } + } else { + return nil, fmt.Errorf("%v : db driver is not support", conf.DBType) } instance.Logger = wrapper.NewGormLoggerWithInstance(nil, instance, logInstance, "", nil) @@ -238,7 +247,11 @@ func (c *client) GetDatabaseClient(conf *Mysql, logInstance *zap.Logger) (*gorm. // Author : go_developer@163.com<白茶清欢> // // Date : 18:42 2022/6/11 -func (c *client) buildConnectionDSN(conf *Mysql) string { +func (c *client) buildConnectionDSN(conf *Driver) string { + if conf.DBType == DriverTypeSqlite3 { + // 兼容sqlite3 + return conf.Host + } return fmt.Sprintf( "%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=%s", conf.Username, @@ -262,7 +275,7 @@ type DBClient struct { master *gorm.DB // 主库 slave *gorm.DB // 从库 extraFieldList []string // 提取的字段 - cfg Mysql // 数据库配置 + cfg Driver // 数据库配置 } // SetFlag 设置数据库标识 diff --git a/define.go b/define.go index 3e5e4f8..80e7604 100644 --- a/define.go +++ b/define.go @@ -49,16 +49,17 @@ const ( // // Date : 15:19 2022/6/9 type Database struct { - Master *Mysql `json:"master" yaml:"master"` // 主库配置 - Slave *Mysql `json:"slave" yaml:"slave"` // 从库配置 + Master *Driver `json:"master" yaml:"master"` // 主库配置 + Slave *Driver `json:"slave" yaml:"slave"` // 从库配置 } -// Mysql ... +// Driver ... // // Author : go_developer@163.com<白茶清欢> // // Date : 18:44 2022/5/14 -type Mysql struct { +type Driver struct { + DBType string `json:"db_type" yaml:"db_type"` // 数据库驱动类型 Host string `json:"host" yaml:"host"` // 数据库地址 Port int `json:"port" yaml:"port"` // 数据库端口 Username string `json:"username" yaml:"username"` // 用户名 @@ -69,6 +70,13 @@ type Mysql struct { Timezone string `json:"timezone" yaml:"timezone"` // 时区 } +const ( + // DriverTypeMysql mysql 驱动 + DriverTypeMysql = "mysql" + // DriverTypeSqlite3 sqlite3 + DriverTypeSqlite3 = "sqlite3" +) + // Connection 连接数配置 // // Author : go_developer@163.com<白茶清欢> diff --git a/go.mod b/go.mod index a5bac7b..55f1d66 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 go.uber.org/zap v1.24.0 gorm.io/driver/mysql v1.4.7 - gorm.io/gorm v1.24.6 + gorm.io/gorm v1.25.0 ) require ( @@ -35,6 +35,7 @@ require ( github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect github.com/lestrrat-go/strftime v1.0.6 // indirect github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-sqlite3 v1.14.16 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.0.7 // indirect @@ -54,4 +55,5 @@ require ( golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gorm.io/driver/sqlite v1.5.0 // indirect ) diff --git a/go.sum b/go.sum index 129c1b1..f0e239e 100644 --- a/go.sum +++ b/go.sum @@ -94,6 +94,9 @@ github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPn github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -253,10 +256,15 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.4.7 h1:rY46lkCspzGHn7+IYsNpSfEv9tA+SU4SkkB+GFX125Y= gorm.io/driver/mysql v1.4.7/go.mod h1:SxzItlnT1cb6e1e4ZRpgJN2VYtcqJgqnHxWr4wsP8oc= +gorm.io/driver/sqlite v1.5.0 h1:zKYbzRCpBrT1bNijRnxLDJWPjVfImGEn0lSnUY5gZ+c= +gorm.io/driver/sqlite v1.5.0/go.mod h1:kDMDfntV9u/vuMmz8APHtHF0b4nyBB7sfCieC6G8k8I= gorm.io/gorm v1.23.6/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.24.5 h1:g6OPREKqqlWq4kh/3MCQbZKImeB9e6Xgc4zD+JgNZGE= gorm.io/gorm v1.24.5/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= gorm.io/gorm v1.24.6 h1:wy98aq9oFEetsc4CAbKD2SoBCdMzsbSIvSUUFJuHi5s= gorm.io/gorm v1.24.6/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/gorm v1.25.0 h1:+KtYtb2roDz14EQe4bla8CbQlmb9dN3VejSai3lprfU= +gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=