update.go 2.4 KB

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