insert.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package gen
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/tal-tech/go-zero/core/collection"
  6. "github.com/tal-tech/go-zero/tools/goctl/model/sql/template"
  7. "github.com/tal-tech/go-zero/tools/goctl/util"
  8. "github.com/tal-tech/go-zero/tools/goctl/util/stringx"
  9. )
  10. func genInsert(table Table, withCache, postgreSql bool) (string, string, error) {
  11. keySet := collection.NewSet()
  12. keyVariableSet := collection.NewSet()
  13. keySet.AddStr(table.PrimaryCacheKey.DataKeyExpression)
  14. keyVariableSet.AddStr(table.PrimaryCacheKey.KeyLeft)
  15. for _, key := range table.UniqueCacheKey {
  16. keySet.AddStr(key.DataKeyExpression)
  17. keyVariableSet.AddStr(key.KeyLeft)
  18. }
  19. expressions := make([]string, 0)
  20. expressionValues := make([]string, 0)
  21. var count int
  22. for _, field := range table.Fields {
  23. camel := field.Name.ToCamel()
  24. if camel == "CreateTime" || camel == "UpdateTime" {
  25. continue
  26. }
  27. if field.Name.Source() == table.PrimaryKey.Name.Source() {
  28. if table.PrimaryKey.AutoIncrement {
  29. continue
  30. }
  31. }
  32. count += 1
  33. if postgreSql {
  34. expressions = append(expressions, fmt.Sprintf("$%d", count))
  35. } else {
  36. expressions = append(expressions, "?")
  37. }
  38. expressionValues = append(expressionValues, "data."+camel)
  39. }
  40. camel := table.Name.ToCamel()
  41. text, err := util.LoadTemplate(category, insertTemplateFile, template.Insert)
  42. if err != nil {
  43. return "", "", err
  44. }
  45. output, err := util.With("insert").
  46. Parse(text).
  47. Execute(map[string]interface{}{
  48. "withCache": withCache,
  49. "containsIndexCache": table.ContainsUniqueCacheKey,
  50. "upperStartCamelObject": camel,
  51. "lowerStartCamelObject": stringx.From(camel).Untitle(),
  52. "expression": strings.Join(expressions, ", "),
  53. "expressionValues": strings.Join(expressionValues, ", "),
  54. "keys": strings.Join(keySet.KeysStr(), "\n"),
  55. "keyValues": strings.Join(keyVariableSet.KeysStr(), ", "),
  56. })
  57. if err != nil {
  58. return "", "", err
  59. }
  60. // interface method
  61. text, err = util.LoadTemplate(category, insertTemplateMethodFile, template.InsertMethod)
  62. if err != nil {
  63. return "", "", err
  64. }
  65. insertMethodOutput, err := util.With("insertMethod").Parse(text).Execute(map[string]interface{}{
  66. "upperStartCamelObject": camel,
  67. })
  68. if err != nil {
  69. return "", "", err
  70. }
  71. return output.String(), insertMethodOutput.String(), nil
  72. }