🐞 fix(gen): pg gen of insert (#1591)

Co-authored-by: kurimi1 <d0n41df@gmail.com>
master
toutou_o 3 years ago committed by GitHub
parent fba6543b23
commit cc4c4928e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -223,7 +223,7 @@ func (g *defaultGenerator) genModel(in parser.Table, withCache bool) (string, er
table.UniqueCacheKey = uniqueKey
table.ContainsUniqueCacheKey = len(uniqueKey) > 0
importsCode, err := genImports(withCache, in.ContainsTime(), table)
importsCode, err := genImports(withCache, in.ContainsTime(), table, g.isPostgreSql)
if err != nil {
return "", err
}

@ -6,7 +6,7 @@ import (
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
)
func genImports(withCache, timeImport bool, table Table) (string, error) {
func genImports(withCache, timeImport bool, table Table, postgreSql bool) (string, error) {
if withCache {
text, err := pathx.LoadTemplate(category, importsTemplateFile, template.Imports)
if err != nil {
@ -23,11 +23,19 @@ func genImports(withCache, timeImport bool, table Table) (string, error) {
return buffer.String(), nil
}
text, err := pathx.LoadTemplate(category, importsWithNoCacheTemplateFile, template.ImportsNoCache)
var text string
var err error
if postgreSql {
text, err = pathx.LoadTemplate(category, importsWithNoCacheTemplateFile, template.ImportsNoCachePg)
if err != nil {
return "", err
}
} else {
text, err = pathx.LoadTemplate(category, importsWithNoCacheTemplateFile, template.ImportsNoCache)
if err != nil {
return "", err
}
}
buffer, err := util.With("import").Parse(text).Execute(map[string]interface{}{
"time": timeImport,

@ -46,10 +46,20 @@ func genInsert(table Table, withCache, postgreSql bool) (string, string, error)
}
camel := table.Name.ToCamel()
text, err := pathx.LoadTemplate(category, insertTemplateFile, template.Insert)
var text string
var err error
// if database is postgresql
if postgreSql {
text, err = pathx.LoadTemplate(category, insertTemplateFile, template.InsertPg)
if err != nil {
return "", "", err
}
} else {
text, err = pathx.LoadTemplate(category, insertTemplateFile, template.Insert)
if err != nil {
return "", "", err
}
}
output, err := util.With("insert").
Parse(text).
@ -69,10 +79,18 @@ func genInsert(table Table, withCache, postgreSql bool) (string, string, error)
}
// interface method
// if database is postgresql
if postgreSql {
text, err = pathx.LoadTemplate(category, insertTemplateMethodFile, template.InsertMethodPg)
if err != nil {
return "", "", err
}
} else {
text, err = pathx.LoadTemplate(category, insertTemplateMethodFile, template.InsertMethod)
if err != nil {
return "", "", err
}
}
insertMethodOutput, err := util.With("insertMethod").Parse(text).Execute(map[string]interface{}{
"upperStartCamelObject": camel,

@ -30,4 +30,17 @@ var (
"github.com/zeromicro/go-zero/core/stringx"
)
`
// pg
ImportsNoCachePg = `import (
"context"
"fmt"
"strings"
{{if .time}}"time"{{end}}
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)
`
)

@ -15,5 +15,24 @@ func (m *default{{.upperStartCamelObject}}Model) Insert(ctx context.Context, dat
}
`
// pg
var InsertPg = `
func (m *default{{.upperStartCamelObject}}Model) Insert(data *{{.upperStartCamelObject}}) (int64,error) {
{{if .withCache}}{{if .containsIndexCache}}{{.keys}}
ret, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values ({{.expression}})", m.table, {{.lowerStartCamelObject}}RowsExpectAutoSet)
return conn.Exec(query, {{.expressionValues}})
}, {{.keyValues}}){{else}}query := fmt.Sprintf("insert into %s (%s) values ({{.expression}})", m.table, {{.lowerStartCamelObject}}RowsExpectAutoSet)
ret,err:=m.ExecNoCache(query, {{.expressionValues}})
{{end}}{{else}}query := fmt.Sprintf("insert into %s (%s) values ({{.expression}}) RETURNING id", m.table, {{.lowerStartCamelObject}}RowsExpectAutoSet)
var id int64
err:=m.conn.QueryRow(&id, query, {{.expressionValues}}){{end}}
return id,err
}
`
// InsertMethod defines an interface method template for insert code in model
var InsertMethod = `Insert(ctx context.Context, data *{{.upperStartCamelObject}}) (sql.Result,error)`
// pg
var InsertMethodPg = `Insert(ctx context.Context, data *{{.upperStartCamelObject}}) (int64,error)`

Loading…
Cancel
Save