update.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package gen
  2. import (
  3. "sort"
  4. "strings"
  5. "github.com/zeromicro/go-zero/core/collection"
  6. "github.com/zeromicro/go-zero/tools/goctl/model/sql/template"
  7. "github.com/zeromicro/go-zero/tools/goctl/util"
  8. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  9. "github.com/zeromicro/go-zero/tools/goctl/util/stringx"
  10. )
  11. func genUpdate(table Table, withCache, postgreSql bool) (string, string, error) {
  12. expressionValues := make([]string, 0)
  13. for _, field := range table.Fields {
  14. camel := util.SafeString(field.Name.ToCamel())
  15. if camel == "CreateTime" || camel == "UpdateTime" {
  16. continue
  17. }
  18. if field.Name.Source() == table.PrimaryKey.Name.Source() {
  19. continue
  20. }
  21. expressionValues = append(expressionValues, "data."+camel)
  22. }
  23. keySet := collection.NewSet()
  24. keyVariableSet := collection.NewSet()
  25. keySet.AddStr(table.PrimaryCacheKey.DataKeyExpression)
  26. keyVariableSet.AddStr(table.PrimaryCacheKey.KeyLeft)
  27. for _, key := range table.UniqueCacheKey {
  28. keySet.AddStr(key.DataKeyExpression)
  29. keyVariableSet.AddStr(key.KeyLeft)
  30. }
  31. keys := keySet.KeysStr()
  32. sort.Strings(keys)
  33. keyVars := keyVariableSet.KeysStr()
  34. sort.Strings(keyVars)
  35. if postgreSql {
  36. expressionValues = append([]string{"data." + table.PrimaryKey.Name.ToCamel()}, expressionValues...)
  37. } else {
  38. expressionValues = append(expressionValues, "data."+table.PrimaryKey.Name.ToCamel())
  39. }
  40. camelTableName := table.Name.ToCamel()
  41. text, err := pathx.LoadTemplate(category, updateTemplateFile, template.Update)
  42. if err != nil {
  43. return "", "", err
  44. }
  45. output, err := util.With("update").
  46. Parse(text).
  47. Execute(map[string]interface{}{
  48. "withCache": withCache,
  49. "upperStartCamelObject": camelTableName,
  50. "keys": strings.Join(keys, "\n"),
  51. "keyValues": strings.Join(keyVars, ", "),
  52. "primaryCacheKey": table.PrimaryCacheKey.DataKeyExpression,
  53. "primaryKeyVariable": table.PrimaryCacheKey.KeyLeft,
  54. "lowerStartCamelObject": stringx.From(camelTableName).Untitle(),
  55. "originalPrimaryKey": wrapWithRawString(table.PrimaryKey.Name.Source(), postgreSql),
  56. "expressionValues": strings.Join(expressionValues, ", "),
  57. "postgreSql": postgreSql,
  58. "data": table,
  59. })
  60. if err != nil {
  61. return "", "", nil
  62. }
  63. // update interface method
  64. text, err = pathx.LoadTemplate(category, updateMethodTemplateFile, template.UpdateMethod)
  65. if err != nil {
  66. return "", "", err
  67. }
  68. updateMethodOutput, err := util.With("updateMethod").
  69. Parse(text).
  70. Execute(map[string]interface{}{
  71. "upperStartCamelObject": camelTableName,
  72. "data": table,
  73. })
  74. if err != nil {
  75. return "", "", nil
  76. }
  77. return output.String(), updateMethodOutput.String(), nil
  78. }