Browse Source

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

Co-authored-by: kurimi1 <d0n41df@gmail.com>
toutou_o 3 years ago
parent
commit
cc4c4928e0

+ 1 - 1
tools/goctl/model/sql/gen/gen.go

@@ -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
 	}

+ 13 - 5
tools/goctl/model/sql/gen/imports.go

@@ -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,10 +23,18 @@ func genImports(withCache, timeImport bool, table Table) (string, error) {
 
 		return buffer.String(), nil
 	}
-
-	text, err := pathx.LoadTemplate(category, importsWithNoCacheTemplateFile, template.ImportsNoCache)
-	if err != nil {
-		return "", err
+	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{}{

+ 24 - 6
tools/goctl/model/sql/gen/insert.go

@@ -46,9 +46,19 @@ func genInsert(table Table, withCache, postgreSql bool) (string, string, error)
 	}
 
 	camel := table.Name.ToCamel()
-	text, err := pathx.LoadTemplate(category, insertTemplateFile, template.Insert)
-	if err != nil {
-		return "", "", err
+	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").
@@ -69,9 +79,17 @@ func genInsert(table Table, withCache, postgreSql bool) (string, string, error)
 	}
 
 	// interface method
-	text, err = pathx.LoadTemplate(category, insertTemplateMethodFile, template.InsertMethod)
-	if err != nil {
-		return "", "", err
+	// 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{}{

+ 13 - 0
tools/goctl/model/sql/template/import.go

@@ -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"
+	)
+	`
 )

+ 19 - 0
tools/goctl/model/sql/template/insert.go

@@ -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)`