engineplus.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package xorm
  2. import (
  3. "encoding/json"
  4. "reflect"
  5. "gopkg.in/flosch/pongo2.v3"
  6. )
  7. func (engine *Engine) SetSqlMapRootDir(sqlMapRootDir string) *Engine {
  8. engine.sqlMap.SqlMapRootDir = sqlMapRootDir
  9. return engine
  10. }
  11. func (engine *Engine) SetSqlTemplateRootDir(sqlTemplateRootDir string) *Engine {
  12. engine.sqlTemplate.SqlTemplateRootDir = sqlTemplateRootDir
  13. return engine
  14. }
  15. func (engine *Engine) SqlMapClient(sqlTagName string, args ...interface{}) *Session {
  16. session := engine.NewSession()
  17. session.IsAutoClose = true
  18. session.IsSqlFuc = true
  19. return session.Sql(engine.sqlMap.Sql[sqlTagName], args...)
  20. }
  21. func (engine *Engine) SqlTemplateClient(sqlTagName string, args ...interface{}) *Session {
  22. session := engine.NewSession()
  23. session.IsAutoClose = true
  24. session.IsSqlFuc = true
  25. if engine.sqlTemplate.Template[sqlTagName] == nil {
  26. if len(args) == 0 {
  27. return session.Sql("")
  28. } else {
  29. map1 := args[0].(*map[string]interface{})
  30. return session.Sql("", map1)
  31. }
  32. }
  33. if len(args) == 0 {
  34. parmap := &pongo2.Context{"1": 1}
  35. sql, err := engine.sqlTemplate.Template[sqlTagName].Execute(*parmap)
  36. if err != nil {
  37. engine.logger.Error(err)
  38. }
  39. return session.Sql(sql)
  40. } else {
  41. map1 := args[0].(*map[string]interface{})
  42. sql, err := engine.sqlTemplate.Template[sqlTagName].Execute(*map1)
  43. if err != nil {
  44. engine.logger.Error(err)
  45. }
  46. return session.Sql(sql, map1)
  47. }
  48. }
  49. func (engine *Engine) Search(beans interface{}, condiBeans ...interface{}) ResultStructs {
  50. session := engine.NewSession()
  51. defer session.Close()
  52. return session.Search(beans, condiBeans...)
  53. }
  54. // Get retrieve one record from table, bean's non-empty fields
  55. // are conditions
  56. func (engine *Engine) GetFirst(bean interface{}) ResultBean {
  57. session := engine.NewSession()
  58. defer session.Close()
  59. return session.GetFirst(bean)
  60. }
  61. func JSONString(v interface{}, IndentJSON bool) (string, error) {
  62. var result []byte
  63. var err error
  64. if IndentJSON {
  65. result, err = json.MarshalIndent(v, "", " ")
  66. } else {
  67. result, err = json.Marshal(v)
  68. }
  69. if err != nil {
  70. return "", err
  71. }
  72. if string(result) == "null" {
  73. return "", nil
  74. }
  75. return string(result), nil
  76. }
  77. func (engine *Engine) Sqls(sqls interface{}, parmas ...interface{}) *SqlsExecutor {
  78. session := engine.NewSession()
  79. session.IsSqlFuc = true
  80. return session.Sqls(sqls, parmas...)
  81. }
  82. func (engine *Engine) SqlMapsClient(sqls interface{}, parmas ...interface{}) *SqlMapsExecutor {
  83. session := engine.NewSession()
  84. session.IsSqlFuc = true
  85. return session.SqlMapsClient(sqls, parmas...)
  86. }
  87. func (engine *Engine) SqlTemplatesClient(sqls interface{}, parmas ...interface{}) *SqlsExecutor {
  88. session := engine.NewSession()
  89. session.IsSqlFuc = true
  90. return session.Sqls(sqls, parmas...)
  91. }
  92. func (engine *Engine) BatchSql(sqls interface{}) *Session {
  93. session := engine.NewSession()
  94. types := reflect.TypeOf(sqls)
  95. if types.Kind() == reflect.Map {
  96. engine.logger.Info("sqls is Map")
  97. engine.logger.Info(types.Elem())
  98. engine.logger.Info(types.Elem().Kind())
  99. }
  100. if types.Kind() == reflect.Slice {
  101. engine.logger.Info("sqls is Slice")
  102. engine.logger.Info(types.Elem())
  103. engine.logger.Info(types.Elem().Kind())
  104. }
  105. switch sqls.(type) {
  106. case []string:
  107. engine.logger.Info("sqls is []string")
  108. case map[string]string:
  109. engine.logger.Info("sqls is map[string]string")
  110. }
  111. return session.BatchSql()
  112. }