Skip to content

Commit d5e7794

Browse files
authored
Fix support for query interfaces defined in model packages (#17)
1 parent 7b577e8 commit d5e7794

File tree

7 files changed

+182
-4
lines changed

7 files changed

+182
-4
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ type Query[T any] interface {
202202

203203
// SELECT * FROM @@table
204204
// {{where}}
205-
// {{if @user.Name }} [email protected] {{end}}
206-
// {{if @user.Age > 0}} AND [email protected] {{end}}
205+
// {{if user.Name }} [email protected] {{end}}
206+
// {{if user.Age > 0}} AND [email protected] {{end}}
207207
// {{end}}
208208
SearchUsers(user User) ([]T, error)
209209

examples/models/query.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package models
2+
3+
type Query[T any] interface {
4+
// GetByID query data by id and return it as struct
5+
//
6+
// SELECT * FROM @@table WHERE id=@id
7+
GetByID(id int) (T, error)
8+
9+
// SELECT * FROM @@table WHERE @@column=@value
10+
FilterWithColumn(column string, value string) (T, error)
11+
}

examples/models/user_query.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package models
2+
3+
type UserQuery interface {
4+
// SELECT * FROM @@table
5+
// {{where}}
6+
// {{if user.ID > 0}} [email protected] {{end}}
7+
// {{if user.Name != ""}} [email protected] {{end}}
8+
// {{end}}
9+
QueryWith(user User) (User, error)
10+
11+
// UPDATE @@table
12+
//{{set}}
13+
// {{if user.Name != ""}} [email protected], {{end}}
14+
// {{if user.Age > 0}} [email protected] {{end}}
15+
//{{end}}
16+
17+
UpdateWith(user User) error
18+
}

examples/output/models/query.go

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/output/models/user_query.go

Lines changed: 88 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/gen/generator.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func (g *Generator) Gen() error {
104104
tmpl, _ := template.New("").Parse(pkgTmpl)
105105

106106
// files contains config
107-
filesWithCfg := []string{}
107+
var filesWithCfg []string
108108
for pth, file := range g.Files {
109109
if file.Config != nil {
110110
filesWithCfg = append(filesWithCfg, pth)
@@ -683,6 +683,16 @@ func (p *File) parseFieldType(expr ast.Expr, pkgName string, fullMode bool) stri
683683
return pkgName + "." + t.Name
684684
}
685685

686+
if !unicode.IsLower(rune(t.Name[0])) && !strings.Contains(t.Name, ".") { // exported type and not another package type
687+
if fullMode && p.PackagePath != "" {
688+
return p.PackagePath + "." + t.Name
689+
}
690+
691+
if p.Package != "" {
692+
return p.Package + "." + t.Name
693+
}
694+
}
695+
686696
return t.Name
687697
case *ast.SelectorExpr:
688698
if pkgIdent, ok := t.X.(*ast.Ident); ok {

internal/gen/generator_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,6 @@ func TestProcessStructType(t *testing.T) {
141141
trimmed.Fields = append(trimmed.Fields, Field{Name: f.Name, DBName: f.DBName, GoType: f.GoType, NamedGoType: f.NamedGoType})
142142
}
143143
if !reflect.DeepEqual(trimmed, expected) {
144-
t.Errorf("Expected %+v, got %+v", expected, trimmed)
144+
t.Errorf("Expected %+v, \n got %+v", expected, trimmed)
145145
}
146146
}

0 commit comments

Comments
 (0)