Skip to content

Commit

Permalink
Fix #755: calculate skip number in GetModelMethod (#782)
Browse files Browse the repository at this point in the history
* fix(#755): fix generate model

* test(gen-model): add test

* test(gen-model): fix
  • Loading branch information
miya-masa authored May 24, 2023
1 parent d89f033 commit caf55f3
Show file tree
Hide file tree
Showing 14 changed files with 1,718 additions and 9 deletions.
6 changes: 3 additions & 3 deletions internal/generate/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,9 @@ func (b *QueryStructMeta) ReviseDIYMethod() error {
if tableName == nil {
methods = append(methods, parser.DefaultMethodTableName(b.ModelStructName))
} else {
//e.g. return "@@table" => return TableNameUser
// e.g. return "@@table" => return TableNameUser
tableName.Body = strings.ReplaceAll(tableName.Body, "\"@@table\"", "TableName"+b.ModelStructName)
//e.g. return "t_@@table" => return "t_user"
// e.g. return "t_@@table" => return "t_user"
tableName.Body = strings.ReplaceAll(tableName.Body, "@@table", b.TableName)
}
b.ModelMethods = methods
Expand All @@ -194,7 +194,7 @@ func (b *QueryStructMeta) ReviseDIYMethod() error {

func (b *QueryStructMeta) addMethodFromAddMethodOpt(methods ...interface{}) *QueryStructMeta {
for _, method := range methods {
modelMethods, err := parser.GetModelMethod(method, 5)
modelMethods, err := parser.GetModelMethod(method)
if err != nil {
panic("add diy method err:" + err.Error())
}
Expand Down
12 changes: 10 additions & 2 deletions internal/parser/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func fileExists(path string) bool {
}

// GetModelMethod get diy methods
func GetModelMethod(v interface{}, skip int) (method *DIYMethods, err error) {
func GetModelMethod(v interface{}) (method *DIYMethods, err error) {
method = new(DIYMethods)

// get diy method info by input value, must input a function or a struct
Expand All @@ -98,7 +98,15 @@ func GetModelMethod(v interface{}, skip int) (method *DIYMethods, err error) {
// if struct in main file
ctx := build.Default
if method.pkgPath == "main" {
_, file, _, _ := runtime.Caller(skip)
var skip int
var file string
for {
_, file, _, _ = runtime.Caller(skip)
if !(strings.Contains(file, "gorm/gen/generator.go") || strings.Contains(file, "gorm/gen/internal")) || file == "" {
break
}
skip++
}
p, err = ctx.ImportDir(filepath.Dir(file), build.ImportComment)
} else {
p, err = ctx.Import(method.pkgPath, "", build.ImportComment)
Expand Down
39 changes: 39 additions & 0 deletions tests/.expect/dal_5/model/users.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

103 changes: 103 additions & 0 deletions tests/.expect/dal_5/query/gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

118 changes: 118 additions & 0 deletions tests/.expect/dal_5/query/gen_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit caf55f3

Please sign in to comment.