insert.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package gen
  2. import (
  3. "fmt"
  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 genInsert(table Table, withCache, postgreSql bool) (string, string, error) {
  12. keySet := collection.NewSet()
  13. keyVariableSet := collection.NewSet()
  14. keySet.AddStr(table.PrimaryCacheKey.DataKeyExpression)
  15. keyVariableSet.AddStr(table.PrimaryCacheKey.KeyLeft)
  16. for _, key := range table.UniqueCacheKey {
  17. keySet.AddStr(key.DataKeyExpression)
  18. keyVariableSet.AddStr(key.KeyLeft)
  19. }
  20. expressions := make([]string, 0)
  21. expressionValues := make([]string, 0)
  22. var count int
  23. for _, field := range table.Fields {
  24. camel := field.Name.ToCamel()
  25. if camel == "CreateTime" || camel == "UpdateTime" {
  26. continue
  27. }
  28. if field.Name.Source() == table.PrimaryKey.Name.Source() {
  29. if table.PrimaryKey.AutoIncrement {
  30. continue
  31. }
  32. }
  33. count += 1
  34. if postgreSql {
  35. expressions = append(expressions, fmt.Sprintf("$%d", count))
  36. } else {
  37. expressions = append(expressions, "?")
  38. }
  39. expressionValues = append(expressionValues, "data."+camel)
  40. }
  41. camel := table.Name.ToCamel()
  42. var text string
  43. var err error
  44. // if database is postgresql
  45. if postgreSql {
  46. text, err = pathx.LoadTemplate(category, insertTemplateFile, template.InsertPg)
  47. if err != nil {
  48. return "", "", err
  49. }
  50. } else {
  51. text, err = pathx.LoadTemplate(category, insertTemplateFile, template.Insert)
  52. if err != nil {
  53. return "", "", err
  54. }
  55. }
  56. output, err := util.With("insert").
  57. Parse(text).
  58. Execute(map[string]interface{}{
  59. "withCache": withCache,
  60. "containsIndexCache": table.ContainsUniqueCacheKey,
  61. "upperStartCamelObject": camel,
  62. "lowerStartCamelObject": stringx.From(camel).Untitle(),
  63. "expression": strings.Join(expressions, ", "),
  64. "expressionValues": strings.Join(expressionValues, ", "),
  65. "keys": strings.Join(keySet.KeysStr(), "\n"),
  66. "keyValues": strings.Join(keyVariableSet.KeysStr(), ", "),
  67. "data": table,
  68. })
  69. if err != nil {
  70. return "", "", err
  71. }
  72. // interface method
  73. // if database is postgresql
  74. if postgreSql {
  75. text, err = pathx.LoadTemplate(category, insertTemplateMethodFile, template.InsertMethodPg)
  76. if err != nil {
  77. return "", "", err
  78. }
  79. } else {
  80. text, err = pathx.LoadTemplate(category, insertTemplateMethodFile, template.InsertMethod)
  81. if err != nil {
  82. return "", "", err
  83. }
  84. }
  85. insertMethodOutput, err := util.With("insertMethod").Parse(text).Execute(map[string]interface{}{
  86. "upperStartCamelObject": camel,
  87. "data": table,
  88. })
  89. if err != nil {
  90. return "", "", err
  91. }
  92. return output.String(), insertMethodOutput.String(), nil
  93. }