insert.go 2.5 KB

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