From a869c04227539fb7f27e23a95396fdc543dd6016 Mon Sep 17 00:00:00 2001 From: tr1v3r Date: Thu, 11 Apr 2024 00:39:54 +0800 Subject: [PATCH 1/8] style: replace from ioutil to os --- generator.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/generator.go b/generator.go index 6f09bf59..1635ab0d 100644 --- a/generator.go +++ b/generator.go @@ -6,7 +6,6 @@ import ( "database/sql" "fmt" "io" - "io/ioutil" "log" "os" "path/filepath" @@ -567,7 +566,7 @@ func (g *Generator) output(fileName string, content []byte) error { } return fmt.Errorf("cannot format file: %w", err) } - return ioutil.WriteFile(fileName, result, 0640) + return os.WriteFile(fileName, result, 0640) } func (g *Generator) pushQueryStructMeta(meta *generate.QueryStructMeta) (*genInfo, error) { From 536bc2692a89f03301f8c87975f7d657f96a4a6f Mon Sep 17 00:00:00 2001 From: True R1v3r Date: Fri, 12 Apr 2024 02:04:38 +0800 Subject: [PATCH 2/8] fix: install gentool with separated tag (#1127) * chore: update go.mod --- tools/gentool/go.mod | 16 +++++++--------- tools/gentool/go.sum | 27 +++++++++++---------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/tools/gentool/go.mod b/tools/gentool/go.mod index a19ab555..14aec3b1 100644 --- a/tools/gentool/go.mod +++ b/tools/gentool/go.mod @@ -1,4 +1,4 @@ -module gentool +module gorm.io/gen/tools/gentool go 1.19 @@ -9,7 +9,7 @@ require ( gorm.io/driver/postgres v1.5.7 gorm.io/driver/sqlite v1.5.5 gorm.io/driver/sqlserver v1.5.3 - gorm.io/gen v0.3.25 + gorm.io/gen v0.3.26 gorm.io/gorm v1.25.9 ) @@ -26,8 +26,7 @@ require ( github.com/hashicorp/go-version v1.6.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.5.4 // indirect - github.com/jackc/puddle/v2 v2.2.1 // indirect + github.com/jackc/pgx/v5 v5.4.3 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/klauspost/compress v1.16.7 // indirect @@ -40,12 +39,11 @@ require ( github.com/shopspring/decimal v1.3.1 // indirect go.opentelemetry.io/otel v1.19.0 // indirect go.opentelemetry.io/otel/trace v1.19.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.15.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.17.0 // indirect gorm.io/datatypes v1.1.1-0.20230130040222-c43177d3cf8c // indirect gorm.io/hints v1.1.0 // indirect gorm.io/plugin/dbresolver v1.5.0 // indirect diff --git a/tools/gentool/go.sum b/tools/gentool/go.sum index 742aef31..2cbdb9d4 100644 --- a/tools/gentool/go.sum +++ b/tools/gentool/go.sum @@ -1333,9 +1333,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.5.4 h1:Xp2aQS8uXButQdnCMWNmvx6UysWQQC+u1EoizjguY+8= -github.com/jackc/pgx/v5 v5.5.4/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= -github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= +github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= @@ -1982,9 +1981,8 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2134,7 +2132,7 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2181,8 +2179,7 @@ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2333,9 +2330,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2369,9 +2365,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2464,8 +2459,8 @@ golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2809,8 +2804,8 @@ gorm.io/driver/sqlite v1.5.5 h1:7MDMtUZhV065SilG62E0MquljeArQZNfJnjd9i9gx3E= gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATavE= gorm.io/driver/sqlserver v1.5.3 h1:rjupPS4PVw+rjJkfvr8jn2lJ8BMhT4UW5FwuJY0P3Z0= gorm.io/driver/sqlserver v1.5.3/go.mod h1:B+CZ0/7oFJ6tAlefsKoyxdgDCXJKSgwS2bMOQZT0I00= -gorm.io/gen v0.3.25 h1:uT/1YfvcnYUdike4XPYyi89FEnVHZF115GUXQm2Sfug= -gorm.io/gen v0.3.25/go.mod h1:p+t0iCKjaPz+pKRxcx63nXdRgnrah/QD2l92747ihyA= +gorm.io/gen v0.3.26 h1:sFf1j7vNStimPRRAtH4zz5NiHM+1dr6eA9aaRdplyhY= +gorm.io/gen v0.3.26/go.mod h1:a5lq5y3w4g5LMxBcw0wnO6tYUCdNutWODq5LrIt75LE= gorm.io/gorm v1.21.15/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gorm.io/gorm v1.22.2/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= From 5360707da8e6ff368689290daecc0bfa56ca8a53 Mon Sep 17 00:00:00 2001 From: qqxhb <30866940+qqxhb@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:40:34 +0800 Subject: [PATCH 3/8] feat: add NotIn for Field https://github.com/go-gorm/gen/issues/1146 --- field/field.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/field/field.go b/field/field.go index 023b335c..1fc42d65 100644 --- a/field/field.go +++ b/field/field.go @@ -30,6 +30,11 @@ func (field Field) In(values ...driver.Valuer) Expr { return expr{e: clause.IN{Column: field.RawExpr(), Values: field.toSlice(values...)}} } +// NotIn ... +func (field Field) NotIn(values ...driver.Valuer) Expr { + return expr{e: clause.Not(field.In(values...).expression())} +} + // Gt ... func (field Field) Gt(value driver.Valuer) Expr { return expr{e: clause.Gt{Column: field.RawExpr(), Value: value}} From ebb636437c9af9de4c914b782926d6d829fe4fcb Mon Sep 17 00:00:00 2001 From: qqxhb <30866940+qqxhb@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:07:01 +0800 Subject: [PATCH 4/8] feat: add substring and substr for field String (#1194) * feat: add substring and substr for field String * feat: add comment for substring --- do_test.go | 18 ++++++++++++++++++ field/string.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/do_test.go b/do_test.go index d1bd6812..00e52f44 100644 --- a/do_test.go +++ b/do_test.go @@ -141,6 +141,24 @@ func TestDO_methods(t *testing.T) { ExpectedVars: []interface{}{uint(10)}, Result: "WHERE `id` = ?", }, + { + Expr: u.Where(u.Name.Substring(1)), + Result: "WHERE SUBSTRING(`name`,1)", + }, + { + Expr: u.Where(u.Name.Substring(1, 6), u.ID.Eq(10)), + ExpectedVars: []interface{}{uint(10)}, + Result: "WHERE SUBSTRING(`name`,1,6) AND `id` = ?", + }, + { + Expr: u.Where(u.Name.Substr(1), u.ID.Eq(10)), + ExpectedVars: []interface{}{uint(10)}, + Result: "WHERE SUBSTR(`name`,1) AND `id` = ?", + }, + { + Expr: u.Where(u.Name.Substr(1, 6)), + Result: "WHERE SUBSTR(`name`,1,6)", + }, { Expr: u.Where(u.Name.Eq("tom"), u.Age.Gt(18)), ExpectedVars: []interface{}{"tom", 18}, diff --git a/field/string.go b/field/string.go index 5fe56742..c587073e 100644 --- a/field/string.go +++ b/field/string.go @@ -147,6 +147,41 @@ func (field String) SubstringIndex(delim string, count int) String { }}} } +// Substring https://dev.mysql.com/doc/refman/8.4/en/string-functions.html#function_substring +func (field String) Substring(params ...int) String { + if len(params) == 0 { + return field + } + if len(params) == 1 { + return String{expr{e: clause.Expr{ + SQL: fmt.Sprintf("SUBSTRING(?,%d)", params[0]), + Vars: []interface{}{field.RawExpr()}, + }}} + } + return String{expr{e: clause.Expr{ + SQL: fmt.Sprintf("SUBSTRING(?,%d,%d)", params[0], params[1]), + Vars: []interface{}{field.RawExpr()}, + }}} +} + +// Substr SUBSTR is a synonym for SUBSTRING +// https://dev.mysql.com/doc/refman/8.4/en/string-functions.html#function_substring +func (field String) Substr(params ...int) String { + if len(params) == 0 { + return field + } + if len(params) == 1 { + return String{expr{e: clause.Expr{ + SQL: fmt.Sprintf("SUBSTR(?,%d)", params[0]), + Vars: []interface{}{field.RawExpr()}, + }}} + } + return String{expr{e: clause.Expr{ + SQL: fmt.Sprintf("SUBSTR(?,%d,%d)", params[0], params[1]), + Vars: []interface{}{field.RawExpr()}, + }}} +} + func (field String) toSlice(values []string) []interface{} { slice := make([]interface{}, len(values)) for i, v := range values { From bf545ef24ab9bb546ef3ad2c15ad3e6be5c96a74 Mon Sep 17 00:00:00 2001 From: qqxhb <1252905006@qq.com> Date: Mon, 23 Sep 2024 11:47:06 +0800 Subject: [PATCH 5/8] fix: Updates method is invalid for tag type hooks --- do.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/do.go b/do.go index aca161a5..72dfd178 100644 --- a/do.go +++ b/do.go @@ -77,7 +77,7 @@ func (d *DO) ReplaceConnPool(pool gorm.ConnPool) { // UseModel specify a data model structure as a source for table name func (d *DO) UseModel(model interface{}) { d.modelType = d.indirect(model) - + d.db = d.db.Model(model).Session(&gorm.Session{}) err := d.db.Statement.Parse(model) if err != nil { panic(fmt.Errorf("Cannot parse model: %+v\n%w", model, err)) @@ -710,7 +710,7 @@ func (d *DO) Updates(value interface{}) (info ResultInfo, err error) { valTyp = rawTyp } - tx := d.db + tx := d.db.Model(d.newResultPointer()) if d.backfillData != nil { tx = tx.Model(d.backfillData) } From 1c60357d589fc322e36838d14e4bb0d89e27b121 Mon Sep 17 00:00:00 2001 From: qqxhb <1252905006@qq.com> Date: Fri, 18 Oct 2024 20:17:06 +0800 Subject: [PATCH 6/8] feat: support NullType --- config.go | 23 ++++++++++++++++++ field_options.go | 45 ++++++++++++++++++++++++++++++++++++ go.mod | 12 ++++++---- go.sum | 38 +++++++++++++++--------------- internal/model/tbl_column.go | 2 +- 5 files changed, 96 insertions(+), 24 deletions(-) diff --git a/config.go b/config.go index f2161b8f..1f4c00ee 100644 --- a/config.go +++ b/config.go @@ -115,6 +115,29 @@ func (cfg *Config) WithImportPkgPath(paths ...string) { cfg.importPkgPaths = append(cfg.importPkgPaths, paths...) } +// WithDataTypesNullType configures the types of fields to use their datatypes nullable counterparts. +/** + * + * @param {boolean} all - If true, all basic types of fields will be replaced with their `datatypes.Null[T]` types. + * If false, only fields that are allowed to be null will be replaced with `datatypes.Null[T]` types. + * + * Examples: + * + * When `all` is true: + * - `int64` will be replaced with `datatypes.NullInt64` + * - `string` will be replaced with `datatypes.NullString` + * + * When `all` is false: + * - Only fields that can be null (e.g., `*string` or `*int`) will be replaced with `datatypes.Null[T]` types. + * + * Note: + * Ensure that proper error handling is implemented when converting + * fields to their `datatypes.Null[T]` types to avoid runtime issues. + */ +func (cfg *Config) WithDataTypesNullType(all bool) { + cfg.WithOpts(WithDataTypesNullType(all)) +} + // Revise format path and db func (cfg *Config) Revise() (err error) { if strings.TrimSpace(cfg.ModelPkgPath) == "" { diff --git a/field_options.go b/field_options.go index 0ff6a489..072e3e22 100644 --- a/field_options.go +++ b/field_options.go @@ -1,6 +1,7 @@ package gen import ( + "fmt" "reflect" "regexp" "strings" @@ -26,6 +27,50 @@ var ( } } + // WithDataTypesNullType configures the types of fields to use their datatypes nullable counterparts. + /** + * + * @param {boolean} all - If true, all basic types of fields will be replaced with their `datatypes.Null[T]` types. + * If false, only fields that are allowed to be null will be replaced with `datatypes.Null[T]` types. + * + * Examples: + * + * When `all` is true: + * - `int64` will be replaced with `datatypes.NullInt64` + * - `string` will be replaced with `datatypes.NullString` + * + * When `all` is false: + * - Only fields that can be null (e.g., `*string` or `*int`) will be replaced with `datatypes.Null[T]` types. + * + * Note: + * Ensure that proper error handling is implemented when converting + * fields to their `datatypes.Null[T]` types to avoid runtime issues. + */ + WithDataTypesNullType = func(all bool) model.ModifyFieldOpt { + return func(f *model.Field) *model.Field { + ft := f.Type + nullable := false + if strings.HasPrefix(ft, "*") { + nullable = true + ft = strings.TrimLeft(ft, "*") + } + if !all && !nullable { + return f + } + switch ft { + case "time.Time", "string", "int", "int8", "int16", + "int32", "int64", "uint", "uint8", "uint16", "uint32", + "uint64", "float64", "float32", "byte", "bool": + ft = fmt.Sprintf("datatypes.Null[%s]", ft) + default: + return f + } + f.CustomGenType = f.GenType() + f.Type = ft + return f + } + } + // FieldNew add new field (any type your want) FieldNew = func(fieldName, fieldType string, fieldTag field.Tag) model.CreateFieldOpt { return func(*model.Field) *model.Field { diff --git a/go.mod b/go.mod index adcdee35..bc6eeed6 100644 --- a/go.mod +++ b/go.mod @@ -4,17 +4,19 @@ go 1.18 require ( golang.org/x/tools v0.17.0 - gorm.io/datatypes v1.1.1-0.20230130040222-c43177d3cf8c - gorm.io/gorm v1.25.9 + gorm.io/datatypes v1.2.4 + gorm.io/gorm v1.25.11 gorm.io/hints v1.1.0 gorm.io/plugin/dbresolver v1.5.0 ) require ( - github.com/go-sql-driver/mysql v1.7.0 // indirect + filippo.io/edwards25519 v1.1.0 // indirect + github.com/go-sql-driver/mysql v1.8.1 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - golang.org/x/crypto v0.14.0 // indirect golang.org/x/mod v0.14.0 // indirect - gorm.io/driver/mysql v1.4.4 // indirect + golang.org/x/text v0.14.0 // indirect + gorm.io/driver/mysql v1.5.6 // indirect ) diff --git a/go.sum b/go.sum index 8e7d4d18..6b983a2b 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,19 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/pgconn v1.13.0 h1:3L1XMNV2Zvca/8BYhzcRFS70Lr0WlDg16Di6SFGAbys= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgproto3/v2 v2.3.1 h1:nwj7qwf0S+Q7ISFfBndqeLwSwxs+4DPsbRFjECT1Y4Y= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= -github.com/jackc/pgtype v1.12.0 h1:Dlq8Qvcch7kiehm8wPGIW0W3KsCCHJnRacKW0UM8n5w= -github.com/jackc/pgx/v4 v4.17.2 h1:0Ut0rpeKwvIVbMQ1KbMBU4h6wxehBI535LK6Flheh8E= +github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= 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.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= @@ -25,22 +26,22 @@ github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLg github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/datatypes v1.1.1-0.20230130040222-c43177d3cf8c h1:jWdr7cHgl8c/ua5vYbR2WhSp+NQmzhsj0xoY3foTzW8= -gorm.io/datatypes v1.1.1-0.20230130040222-c43177d3cf8c/go.mod h1:SH2K9R+2RMjuX1CkCONrPwoe9JzVv2hkQvEu4bXGojE= +gorm.io/datatypes v1.2.4 h1:uZmGAcK/QZ0uyfCuVg0VQY1ZmV9h1fuG0tMwKByO1z4= +gorm.io/datatypes v1.2.4/go.mod h1:f4BsLcFAX67szSv8svwLRjklArSHAvHLeE3pXAS5DZI= gorm.io/driver/mysql v1.4.3/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c= -gorm.io/driver/mysql v1.4.4 h1:MX0K9Qvy0Na4o7qSC/YI7XxqUw5KDw01umqgID+svdQ= -gorm.io/driver/mysql v1.4.4/go.mod h1:BCg8cKI+R0j/rZRQxeKis/forqRwRSYOR8OM3Wo6hOM= -gorm.io/driver/postgres v1.4.5 h1:mTeXTTtHAgnS9PgmhN2YeUbazYpLhUI1doLnw42XUZc= +gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8= +gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= +gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U= gorm.io/driver/sqlite v1.1.6/go.mod h1:W8LmC/6UvVbHKah0+QOC7Ja66EaZXHwUTjgXY8YNWX8= gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU= gorm.io/driver/sqlserver v1.4.1 h1:t4r4r6Jam5E6ejqP7N82qAJIJAht27EGT41HyPfXRw0= @@ -48,8 +49,9 @@ gorm.io/gorm v1.21.15/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gorm.io/gorm v1.22.2/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= -gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8= -gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= +gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gorm.io/hints v1.1.0 h1:Lp4z3rxREufSdxn4qmkK3TLDltrM10FLTHiuqwDPvXw= gorm.io/hints v1.1.0/go.mod h1:lKQ0JjySsPBj3uslFzY3JhYDtqEwzm+G1hv8rWujB6Y= gorm.io/plugin/dbresolver v1.5.0 h1:XVHLxh775eP0CqVh3vcfJtYqja3uFl5Wr3cKlY8jgDY= diff --git a/internal/model/tbl_column.go b/internal/model/tbl_column.go index 3dd59673..f1c394e0 100644 --- a/internal/model/tbl_column.go +++ b/internal/model/tbl_column.go @@ -136,7 +136,7 @@ func (c *Column) needDefaultTag(defaultTagValue string) bool { case reflect.String: return defaultTagValue != "" case reflect.Struct: - return strings.Trim(defaultTagValue, "'0:- ") != "" + return strings.Trim(defaultTagValue, "'0:-") != "" } return c.Name() != "created_at" && c.Name() != "updated_at" } From a31c34b70efff1ef3550b3e57a440cf7d5cc082d Mon Sep 17 00:00:00 2001 From: qqxhb <1252905006@qq.com> Date: Fri, 22 Nov 2024 09:06:02 +0800 Subject: [PATCH 7/8] feat: parse table name for all method --- internal/generate/query.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/internal/generate/query.go b/internal/generate/query.go index c9e27e10..f25835da 100644 --- a/internal/generate/query.go +++ b/internal/generate/query.go @@ -186,16 +186,12 @@ func (b *QueryStructMeta) ReviseDIYMethod() error { } method.Receiver.Package = "" method.Receiver.Type = b.ModelStructName + b.pasreTableName(method) methods = append(methods, method) methodMap[method.MethodName] = true } if tableName == nil { methods = append(methods, parser.DefaultMethodTableName(b.ModelStructName)) - } else { - // e.g. return "@@table" => return TableNameUser - tableName.Body = strings.ReplaceAll(tableName.Body, "\"@@table\"", "TableName"+b.ModelStructName) - // e.g. return "t_@@table" => return "t_user" - tableName.Body = strings.ReplaceAll(tableName.Body, "@@table", b.TableName) } b.ModelMethods = methods @@ -204,7 +200,16 @@ func (b *QueryStructMeta) ReviseDIYMethod() error { } return nil } +func (b *QueryStructMeta) pasreTableName(method *parser.Method) { + if method == nil || method.Body == "" || !strings.Contains(method.Body, "@@table") { + return + } + // e.g. return "@@table" => return TableNameUser + method.Body = strings.ReplaceAll(method.Body, "\"@@table\"", "TableName"+b.ModelStructName) + // e.g. return "t_@@table" => return "t_user" + method.Body = strings.ReplaceAll(method.Body, "@@table", b.TableName) +} func (b *QueryStructMeta) addMethodFromAddMethodOpt(methods ...interface{}) *QueryStructMeta { for _, method := range methods { modelMethods, err := parser.GetModelMethod(method) From 14f5dc700420f8f00b694422ca3b8ee2f9f6e1cb Mon Sep 17 00:00:00 2001 From: qqxhb <1252905006@qq.com> Date: Thu, 19 Dec 2024 20:55:24 +0800 Subject: [PATCH 8/8] feat: interface template add method Rows --- internal/template/struct.go | 2 ++ tests/.expect/dal_3/query/banks.gen.go | 3 +++ tests/.expect/dal_3/query/credit_cards.gen.go | 3 +++ tests/.expect/dal_3/query/customers.gen.go | 3 +++ tests/.expect/dal_3/query/people.gen.go | 3 +++ tests/.expect/dal_3/query/users.gen.go | 3 +++ tests/.expect/dal_4/query/banks.gen.go | 3 +++ tests/.expect/dal_4/query/credit_cards.gen.go | 3 +++ tests/.expect/dal_4/query/customers.gen.go | 3 +++ tests/.expect/dal_4/query/people.gen.go | 3 +++ tests/.expect/dal_4/query/users.gen.go | 2 ++ tests/.expect/dal_5/query/users.gen.go | 3 +++ tests/.expect/dal_6/query/users.gen.go | 3 +++ 13 files changed, 37 insertions(+) diff --git a/internal/template/struct.go b/internal/template/struct.go index 8b83a12e..d0415cb0 100644 --- a/internal/template/struct.go +++ b/internal/template/struct.go @@ -201,6 +201,8 @@ type I{{.ModelStructName}}Do interface { FirstOrCreate() (*{{.StructInfo.Package}}.{{.StructInfo.Type}}, error) FindByPage(offset int, limit int) (result []*{{.StructInfo.Package}}.{{.StructInfo.Type}}, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) I{{.ModelStructName}}Do UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_3/query/banks.gen.go b/tests/.expect/dal_3/query/banks.gen.go index 863cd584..c644b19a 100644 --- a/tests/.expect/dal_3/query/banks.gen.go +++ b/tests/.expect/dal_3/query/banks.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -163,6 +164,8 @@ type IBankDo interface { FirstOrCreate() (*model.Bank, error) FindByPage(offset int, limit int) (result []*model.Bank, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IBankDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_3/query/credit_cards.gen.go b/tests/.expect/dal_3/query/credit_cards.gen.go index 99b18762..217978ad 100644 --- a/tests/.expect/dal_3/query/credit_cards.gen.go +++ b/tests/.expect/dal_3/query/credit_cards.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -177,6 +178,8 @@ type ICreditCardDo interface { FirstOrCreate() (*model.CreditCard, error) FindByPage(offset int, limit int) (result []*model.CreditCard, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) ICreditCardDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_3/query/customers.gen.go b/tests/.expect/dal_3/query/customers.gen.go index d9a78890..b1824d5c 100644 --- a/tests/.expect/dal_3/query/customers.gen.go +++ b/tests/.expect/dal_3/query/customers.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -167,6 +168,8 @@ type ICustomerDo interface { FirstOrCreate() (*model.Customer, error) FindByPage(offset int, limit int) (result []*model.Customer, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) ICustomerDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_3/query/people.gen.go b/tests/.expect/dal_3/query/people.gen.go index 9c89dd0f..6b844f24 100644 --- a/tests/.expect/dal_3/query/people.gen.go +++ b/tests/.expect/dal_3/query/people.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -231,6 +232,8 @@ type IPersonDo interface { FirstOrCreate() (*model.Person, error) FindByPage(offset int, limit int) (result []*model.Person, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IPersonDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_3/query/users.gen.go b/tests/.expect/dal_3/query/users.gen.go index 63287a57..81389c80 100644 --- a/tests/.expect/dal_3/query/users.gen.go +++ b/tests/.expect/dal_3/query/users.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -184,6 +185,8 @@ type IUserDo interface { FirstOrCreate() (*model.User, error) FindByPage(offset int, limit int) (result []*model.User, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IUserDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_4/query/banks.gen.go b/tests/.expect/dal_4/query/banks.gen.go index 30233266..36a9ea26 100644 --- a/tests/.expect/dal_4/query/banks.gen.go +++ b/tests/.expect/dal_4/query/banks.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -163,6 +164,8 @@ type IBankDo interface { FirstOrCreate() (*model.Bank, error) FindByPage(offset int, limit int) (result []*model.Bank, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IBankDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_4/query/credit_cards.gen.go b/tests/.expect/dal_4/query/credit_cards.gen.go index 5543f328..50d37d84 100644 --- a/tests/.expect/dal_4/query/credit_cards.gen.go +++ b/tests/.expect/dal_4/query/credit_cards.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -177,6 +178,8 @@ type ICreditCardDo interface { FirstOrCreate() (*model.CreditCard, error) FindByPage(offset int, limit int) (result []*model.CreditCard, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) ICreditCardDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_4/query/customers.gen.go b/tests/.expect/dal_4/query/customers.gen.go index 5e81eb4c..86482859 100644 --- a/tests/.expect/dal_4/query/customers.gen.go +++ b/tests/.expect/dal_4/query/customers.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -167,6 +168,8 @@ type ICustomerDo interface { FirstOrCreate() (*model.Customer, error) FindByPage(offset int, limit int) (result []*model.Customer, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) ICustomerDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_4/query/people.gen.go b/tests/.expect/dal_4/query/people.gen.go index eb4933ca..c87090cd 100644 --- a/tests/.expect/dal_4/query/people.gen.go +++ b/tests/.expect/dal_4/query/people.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -231,6 +232,8 @@ type IPersonDo interface { FirstOrCreate() (*model.Person, error) FindByPage(offset int, limit int) (result []*model.Person, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IPersonDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_4/query/users.gen.go b/tests/.expect/dal_4/query/users.gen.go index 41a7c76b..fc4d5e12 100644 --- a/tests/.expect/dal_4/query/users.gen.go +++ b/tests/.expect/dal_4/query/users.gen.go @@ -189,6 +189,8 @@ type IUserDo interface { FirstOrCreate() (*model.User, error) FindByPage(offset int, limit int) (result []*model.User, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IUserDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_5/query/users.gen.go b/tests/.expect/dal_5/query/users.gen.go index 2a36a48c..3dccc403 100644 --- a/tests/.expect/dal_5/query/users.gen.go +++ b/tests/.expect/dal_5/query/users.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -184,6 +185,8 @@ type IUserDo interface { FirstOrCreate() (*model.User, error) FindByPage(offset int, limit int) (result []*model.User, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IUserDo UnderlyingDB() *gorm.DB diff --git a/tests/.expect/dal_6/query/users.gen.go b/tests/.expect/dal_6/query/users.gen.go index 13ad2815..1482c8ba 100644 --- a/tests/.expect/dal_6/query/users.gen.go +++ b/tests/.expect/dal_6/query/users.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "database/sql" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -184,6 +185,8 @@ type IUserDo interface { FirstOrCreate() (*model.User, error) FindByPage(offset int, limit int) (result []*model.User, count int64, err error) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) + Rows() (*sql.Rows, error) + Row() *sql.Row Scan(result interface{}) (err error) Returning(value interface{}, columns ...string) IUserDo UnderlyingDB() *gorm.DB