Skip to content

Commit

Permalink
support ddl sql for schema
Browse files Browse the repository at this point in the history
  • Loading branch information
junqiang.zhang committed May 7, 2022
1 parent 8dc827a commit b3ee6d6
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 22 deletions.
43 changes: 23 additions & 20 deletions example/exmaple.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,27 @@ func main() {
testMockGORM()
testMockGORMV2()
testMockXORM()
//testMockRedis()
//testMockHttpServer()
//testMockDocker()
testMockRedis()
testMockHttpServer()
testMockDocker()

//testDBUtil()
testDBUtil()

}

func testMockGORM() {
var db *gorm.DB

mockdb.DBType = "mysql"
mock := gmock.NewMockGORM("example", func(gorm *mockdb.MockGORM) {
db = gorm.GetGormDB()
})
mock.RegisterModels(&User{})
mock.ResetAndInit()
//mock.RegisterModels(&User{})
mock.InitSchemas(`CREATE TABLE user (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
age int(3) DEFAULT NULL,
name varchar(255) DEFAULT NULL COMMENT '名称',
PRIMARY KEY (id)
) ENGINE=InnoDB ;`)
mock.ResetAndInit()

var user User
Expand All @@ -52,25 +57,24 @@ func testMockGORM() {
panic(fmt.Errorf("testMockGORM error"))
}


}

func testDBUtil() {
util:=gmock.NewDBUtil()
util.RunMySQLServer("test",33333,false)
db,err:=gorm.Open("mysql","user:pass@tcp(127.0.0.1:33333)/test?charset=utf8mb4&parseTime=True&loc=Local")
if err!=nil {
util := gmock.NewDBUtil()
util.RunMySQLServer("test", 33333, false)
db, err := gorm.Open("mysql", "user:pass@tcp(127.0.0.1:33333)/test?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
sqlText :=util.ReadFile("./example/ddl.txt")
for _,s:=range util.ParseSQLText(sqlText) {
sqlText := util.ReadFile("./example/ddl.txt")
for _, s := range util.ParseSQLText(sqlText) {
fmt.Println(db.Exec(s))
}
fmt.Println(util.QueryListBySQL(db.DB(),"select * from project"))
fmt.Println(util.QueryListBySQL(db.DB(), "select * from project"))
}

func testMockGORMV2() {
mockdb.DBType="mysql"
mockdb.DBType = "mysql"
var db *gormv2.DB
mock := gmock.NewMockGORMV2("example", func(orm *mockdb.MockGORMV2) {
db = orm.GetGormDB()
Expand All @@ -90,8 +94,6 @@ func testMockGORMV2() {
panic(fmt.Errorf("testMockGORMV2 error"))
}



}

func testMockRedis() {
Expand Down Expand Up @@ -134,18 +136,19 @@ func testMockHttpServer() {
if err != nil {
panic(err)
}
if string(data)!="hello baidu" {
if string(data) != "hello baidu" {
panic(fmt.Errorf("testMockHttpServer error"))
}
}

func testMockXORM() {
var engine *xorm.Engine
mockdb.DBType="mysql"
mockdb.DBType = "mysql"
mock := gmock.NewMockXORM("example", func(orm *mockdb.MockXORM) {
engine = orm.GetXORMEngine()
})
mock.RegisterModels(&User{})

mock.ResetAndInit()
db := mock.GetXORMEngine()
var user User
Expand Down
22 changes: 21 additions & 1 deletion mockdb/mock_gorm.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ type MockGORM struct {
db *gorm.DB
dbType string
dsn string
schema string // just fix:github.com/jinzhu/gorm "fix tables"
util *util.DBUtil
models []interface{}
resetHandler func(orm *MockGORM)
Expand Down Expand Up @@ -85,8 +86,11 @@ func getFilesBySuffix(dir string, suffix string) []string {
// ResetAndInit 初始化数据库及表数据
func (m *MockGORM) ResetAndInit() {
//m.db = renew()

m.dropTables()
m.initModels()
if DBType != "mysql" {
m.initModels()
}
m.initSQL()
if m.resetHandler != nil {
m.resetHandler(m)
Expand Down Expand Up @@ -143,6 +147,11 @@ func (m *MockGORM) GetSqlDB() *sql.DB {
return m.db.DB()
}

// InitSchemas 为了兼容github.com/jinzhu/gorm mysql的bug 特殊处理的
func (m *MockGORM) InitSchemas(sqlSchema string) {
m.schema=sqlSchema
}

// RegisterModels 注册模型
func (m *MockGORM) RegisterModels(models ...interface{}) {
if len(models) > 0 {
Expand Down Expand Up @@ -171,6 +180,16 @@ func (m *MockGORM) initModels() {
}
}
func (m *MockGORM) initSQL() {
if m.schema!="" {
sqls:=m.parseMockSQL(m.schema)
for _, sql := range sqls {
err := m.db.Exec(sql).Error
if err != nil {
log.Print(sql)
panic(err)
}
}
}
for _, filePath := range getFilesBySuffix(m.pathToSqlFileName, "sql") {
sqlText := m.readMockSQl(filePath)
sqls := m.parseMockSQL(sqlText)
Expand All @@ -183,6 +202,7 @@ func (m *MockGORM) initSQL() {
}
log.Printf("sql file %v is loaded", filePath)
}

}

// ReadMockSQl read sql file to string
Expand Down
16 changes: 16 additions & 0 deletions mockdb/mock_gormv2.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ type MockGORMV2 struct {
models []interface{}
util *util.DBUtil
resetHandler func(resetHandler *MockGORMV2)
schema string
}

func NewMockGORMV2(pathToSqlFileName string, resetHandler func(orm *MockGORMV2)) *MockGORMV2 {
Expand Down Expand Up @@ -101,6 +102,11 @@ func (m *MockGORMV2) dropTables() {
}
}

func (m *MockGORMV2) InitSchemas(sqlSchema string) {
m.schema=sqlSchema
}


// GetSqlDB 获取*sql.DB实例
func (m *MockGORMV2) GetSqlDB() *sql.DB {
db, err := m.db.DB()
Expand Down Expand Up @@ -138,6 +144,16 @@ func (m *MockGORMV2) initModels() {
}
}
func (m *MockGORMV2) initSQL() {
if m.schema!="" {
sqls:=m.parseMockSQL(m.schema)
for _, sql := range sqls {
err := m.db.Exec(sql).Error
if err != nil {
log.Print(sql)
panic(err)
}
}
}
for _, filePath := range getFilesBySuffix(m.pathToSqlFileName, "sql") {
sqlText := m.readMockSQl(filePath)
sqls := m.parseMockSQL(sqlText)
Expand Down
17 changes: 16 additions & 1 deletion mockdb/mock_xorm.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type MockXORM struct {
dbType string
dsn string
resetHandler func(orm *MockXORM)
schema string
}

func NewMockXORM(pathToSqlFileName string, resetHandler func(orm *MockXORM)) *MockXORM {
Expand Down Expand Up @@ -57,7 +58,7 @@ func NewMockXORM(pathToSqlFileName string, resetHandler func(orm *MockXORM)) *Mo
if err != nil {
panic(err)
}
mock.engine=db
mock.engine = db
return &mock
}

Expand Down Expand Up @@ -107,6 +108,10 @@ func (m *MockXORM) dropTables() {

}

func (m *MockXORM) InitSchemas(sqlSchema string) {
m.schema = sqlSchema
}

//GetXORMEngine 获取 *xorm.Engine实例
func (m *MockXORM) GetXORMEngine() *xorm.Engine {
return m.engine
Expand Down Expand Up @@ -145,6 +150,16 @@ func (m *MockXORM) initModels() {
}
}
func (m *MockXORM) initSQL() {
if m.schema != "" {
sqls := m.parseMockSQL(m.schema)
for _, sql := range sqls {
_, err := m.engine.Exec(sql)
if err != nil {
log.Print(sql)
panic(err)
}
}
}
for _, filePath := range getFilesBySuffix(m.pathToSqlFileName, "sql") {
sqlText := m.readMockSQl(filePath)
sqls := m.parseMockSQL(sqlText)
Expand Down

0 comments on commit b3ee6d6

Please sign in to comment.