-
Notifications
You must be signed in to change notification settings - Fork 77
Open
Description
Any plans to make the generator GORM 2.0 compliant soon?
Perhaps I might be all wrong here (or just plain optimistic), but at glance, it does not seem to be quite a big deal - here's the simplest patch I could think of (neither unit tests nor examples fixed yet):
diff --git a/go.mod b/go.mod
index 7fd83ac..9071c01 100644
--- a/go.mod
+++ b/go.mod
@@ -7,8 +7,6 @@ require (
github.com/go-sql-driver/mysql v0.0.0-20170822214809-26471af196a1 // indirect
github.com/gofrs/uuid v3.2.0+incompatible // indirect
github.com/jinzhu/gorm v1.9.2
- github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d // indirect
- github.com/jinzhu/now v1.0.0 // indirect
github.com/lib/pq v1.0.0 // indirect
github.com/mattn/go-sqlite3 v1.10.0 // indirect
github.com/pkg/errors v0.8.1
@@ -16,6 +14,7 @@ require (
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 // indirect
golang.org/x/tools v0.0.0-20190226205152-f727befe758c
gopkg.in/DATA-DOG/go-sqlmock.v1 v1.2.0
+ gorm.io/gorm v1.20.8
)
go 1.13
diff --git a/go.sum b/go.sum
index 7f4f78c..84deb88 100644
--- a/go.sum
+++ b/go.sum
@@ -53,8 +53,12 @@ github.com/jinzhu/gorm v1.9.2 h1:lCvgEaqe/HVE+tjAR2mt4HbbHAZsQOv3XAZiEZV37iw=
github.com/jinzhu/gorm v1.9.2/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo=
github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d h1:jRQLvyVGL+iVtDElaEIDdKwpPqUIZJfzkNLV34htpEc=
github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.0.0 h1:6WV8LvwPpDhKjo5U9O6b4+xdG/jTXNPwlDme/MTo8Ns=
github.com/jinzhu/now v1.0.0/go.mod h1:oHTiXerJ20+SfYcrdlBO7rzZRJWGwSTQ0iUY2jI6Gfc=
+github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E=
+github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -166,6 +170,8 @@ gopkg.in/DATA-DOG/go-sqlmock.v1 v1.2.0/go.mod h1:OdE7CF6DbADk7lN8LIKRzRJTTZXIjtW
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gorm.io/gorm v1.20.8 h1:iToaOdZgjNvlc44NFkxfLa3U9q63qwaxt0FdNCiwOMs=
+gorm.io/gorm v1.20.8/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/internal/queryset/field/field.go b/internal/queryset/field/field.go
index 0b7e344..75ad6ed 100644
--- a/internal/queryset/field/field.go
+++ b/internal/queryset/field/field.go
@@ -1,12 +1,11 @@
package field
import (
+ "bytes"
"fmt"
"go/types"
"reflect"
"strings"
-
- "github.com/jinzhu/gorm"
)
type BaseInfo struct {
@@ -99,7 +98,7 @@ func (g InfoGenerator) GenFieldInfo(f Field) *Info {
return nil
}
- dbName := gorm.ToDBName(f.Name())
+ dbName := toDBName(f.Name()) // Equvalent to old: gorm.ToDBName(f.Name())
if dbColName := tagSetting["COLUMN"]; dbColName != "" {
dbName = dbColName
}
@@ -162,3 +161,52 @@ func (g InfoGenerator) GenFieldInfo(f Field) *Info {
return nil
}
}
+
+func toDBName(name string) string {
+ const (
+ lower = false
+ upper = true
+ )
+
+ if name == "" {
+ return ""
+ }
+
+ var (
+ value = name // commonInitialismsReplacer.Replace(name)
+ buf = bytes.NewBufferString("")
+ lastCase, currCase, nextCase, nextNumber bool
+ )
+
+ for i, v := range value[:len(value)-1] {
+ nextCase = bool(value[i+1] >= 'A' && value[i+1] <= 'Z')
+ nextNumber = bool(value[i+1] >= '0' && value[i+1] <= '9')
+
+ if i > 0 {
+ if currCase == upper {
+ if lastCase == upper && (nextCase == upper || nextNumber == upper) {
+ buf.WriteRune(v)
+ } else {
+ if value[i-1] != '_' && value[i+1] != '_' {
+ buf.WriteRune('_')
+ }
+ buf.WriteRune(v)
+ }
+ } else {
+ buf.WriteRune(v)
+ if i == len(value)-2 && (nextCase == upper && nextNumber == lower) {
+ buf.WriteRune('_')
+ }
+ }
+ } else {
+ currCase = upper
+ buf.WriteRune(v)
+ }
+ lastCase = currCase
+ currCase = nextCase
+ }
+
+ buf.WriteByte(value[len(value)-1])
+
+ return strings.ToLower(buf.String())
+}
diff --git a/internal/queryset/generator/generator.go b/internal/queryset/generator/generator.go
index a0bf12f..f817eb0 100644
--- a/internal/queryset/generator/generator.go
+++ b/internal/queryset/generator/generator.go
@@ -59,7 +59,7 @@ import (
"strings"
"time"
- "github.com/jinzhu/gorm"
+ "gorm.io/jgorm"
)
`
diff --git a/internal/queryset/methods/queryset.go b/internal/queryset/methods/queryset.go
index b42395b..bb8f2af 100644
--- a/internal/queryset/methods/queryset.go
+++ b/internal/queryset/methods/queryset.go
@@ -353,8 +353,8 @@ func NewCountMethod(qsTypeName string) CountMethod {
return CountMethod{
baseQuerySetMethod: newBaseQuerySetMethod(qsTypeName),
namedMethod: newNamedMethod("Count"),
- constRetMethod: newConstRetMethod("(int, error)"),
- constBodyMethod: newConstBodyMethod(`var count int
+ constRetMethod: newConstRetMethod("(int64, error)"),
+ constBodyMethod: newConstBodyMethod(`var count int64
err := %s.Count(&count).Error
return count, err`, qsDbName),
}
Any thoughts in this regard so far?
Thanks.
Regards
Metadata
Metadata
Assignees
Labels
No labels