sql_executor.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package xorm
  2. import (
  3. "strings"
  4. "time"
  5. )
  6. type SqlExecutor struct {
  7. session *Session
  8. sqls interface{}
  9. parmas interface{}
  10. err error
  11. }
  12. func (sqlExecutor *SqlExecutor) Execute() ([][]map[string]interface{}, map[string][]map[string]interface{}, error) {
  13. if sqlExecutor.err != nil {
  14. return nil, nil, sqlExecutor.err
  15. }
  16. switch sqlExecutor.sqls.(type) {
  17. case string:
  18. sqlstr := strings.TrimLeft(sqlExecutor.sqls.(string), " \n")
  19. sqlCmd := strings.ToLower(strings.Split(sqlstr, " ")[0])
  20. if sqlExecutor.parmas == nil {
  21. switch sqlCmd {
  22. case "select", "desc":
  23. rsults := sqlExecutor.session.Sql(sqlstr).Query()
  24. if rsults.Error != nil {
  25. return nil, nil, rsults.Error
  26. }
  27. resultSlice := make([][]map[string]interface{}, 1)
  28. resultSlice[0] = rsults.Results
  29. return resultSlice, nil, nil
  30. case "insert", "delete", "update":
  31. rsults, err := sqlExecutor.session.Sql(sqlstr).Execute()
  32. if err != nil {
  33. return nil, nil, err
  34. }
  35. resultSlice := make([][]map[string]interface{}, 1)
  36. resultMap := make([]map[string]interface{}, 1)
  37. resultMap[0] = make(map[string]interface{})
  38. //todo all database support LastInsertId
  39. LastInsertId, _ := rsults.LastInsertId()
  40. resultMap[0]["LastInsertId"] = LastInsertId
  41. RowsAffected, err := rsults.RowsAffected()
  42. if err != nil {
  43. return nil, nil, err
  44. }
  45. resultMap[0]["RowsAffected"] = RowsAffected
  46. resultSlice[0] = resultMap
  47. return resultSlice, nil, nil
  48. }
  49. } else {
  50. switch sqlExecutor.parmas.(type) {
  51. case []map[string]interface{}:
  52. parmaMap, ok := sqlExecutor.parmas.([]map[string]interface{})
  53. if !ok {
  54. return nil, nil, ErrParamsType
  55. }
  56. switch sqlCmd {
  57. case "select", "desc":
  58. rsults := sqlExecutor.session.Sql(sqlstr, &parmaMap[0]).Query()
  59. if rsults.Error != nil {
  60. return nil, nil, rsults.Error
  61. }
  62. resultSlice := make([][]map[string]interface{}, 1)
  63. resultSlice[0] = rsults.Results
  64. return resultSlice, nil, nil
  65. case "insert", "delete", "update":
  66. rsults, err := sqlExecutor.session.Sql(sqlstr, &parmaMap[0]).Execute()
  67. if err != nil {
  68. return nil, nil, err
  69. }
  70. resultSlice := make([][]map[string]interface{}, 1)
  71. resultMap := make([]map[string]interface{}, 1)
  72. resultMap[0] = make(map[string]interface{})
  73. LastInsertId, _ := rsults.LastInsertId()
  74. resultMap[0]["LastInsertId"] = LastInsertId
  75. RowsAffected, err := rsults.RowsAffected()
  76. if err != nil {
  77. return nil, nil, err
  78. }
  79. resultMap[0]["RowsAffected"] = RowsAffected
  80. resultSlice[0] = resultMap
  81. return resultSlice, nil, nil
  82. }
  83. case map[string]interface{}:
  84. parmaMap, ok := sqlExecutor.parmas.(map[string]interface{})
  85. if !ok {
  86. return nil, nil, ErrParamsType
  87. }
  88. switch sqlCmd {
  89. case "select", "desc":
  90. key := NewV4().String() + time.Now().String()
  91. sqlExecutor.session.Engine.AddSql(key, sqlstr)
  92. rsults := sqlExecutor.session.SqlMapClient(key, &parmaMap).Query()
  93. sqlExecutor.session.Engine.RemoveSql(key)
  94. if rsults.Error != nil {
  95. return nil, nil, rsults.Error
  96. }
  97. resultSlice := make([][]map[string]interface{}, 1)
  98. resultSlice[0] = rsults.Results
  99. return resultSlice, nil, nil
  100. case "insert", "delete", "update":
  101. rsults, err := sqlExecutor.session.Sql(sqlstr, &parmaMap).Execute()
  102. if err != nil {
  103. return nil, nil, err
  104. }
  105. resultSlice := make([][]map[string]interface{}, 1)
  106. resultMap := make([]map[string]interface{}, 1)
  107. resultMap[0] = make(map[string]interface{})
  108. LastInsertId, _ := rsults.LastInsertId()
  109. resultMap[0]["LastInsertId"] = LastInsertId
  110. RowsAffected, err := rsults.RowsAffected()
  111. if err != nil {
  112. return nil, nil, err
  113. }
  114. resultMap[0]["RowsAffected"] = RowsAffected
  115. resultSlice[0] = resultMap
  116. return resultSlice, nil, nil
  117. }
  118. default:
  119. return nil, nil, ErrParamsType
  120. }
  121. }
  122. case []string:
  123. if sqlExecutor.session.IsSqlFuc == true {
  124. err := sqlExecutor.session.Begin()
  125. if err != nil {
  126. return nil, nil, err
  127. }
  128. }
  129. case map[string]string:
  130. if sqlExecutor.session.IsSqlFuc == true {
  131. err := sqlExecutor.session.Begin()
  132. if err != nil {
  133. return nil, nil, err
  134. }
  135. }
  136. }
  137. return nil, nil, nil
  138. }
  139. //func (sqlExecutor *SqlExecutor) Execute() (interface{}, error) {
  140. // switch sqlExecutor.sqls.(type) {
  141. // case string:
  142. // sqlstr := strings.TrimLeft(sqlExecutor.sqls.(string), " \n")
  143. // sqlCmd := strings.ToLower(strings.Split(sqlstr, " ")[0])
  144. // switch sqlExecutor.parmasCount {
  145. // case 0:
  146. // switch sqlCmd {
  147. // case "select", "desc":
  148. // rsults := sqlExecutor.session.Sql(sqlstr).Query()
  149. // if rsults.Error != nil {
  150. // return nil, rsults.Error
  151. // }
  152. // return rsults.Results, nil
  153. // case "insert", "delete", "update":
  154. // return sqlExecutor.session.Sql(sqlstr).Execute()
  155. // }
  156. // case 1:
  157. // switch sqlExecutor.parmas.(type) {
  158. // case map[string]interface{}:
  159. // switch sqlCmd {
  160. // case "select", "desc":
  161. // case "insert", "delete", "update":
  162. // }
  163. // default:
  164. // switch sqlCmd {
  165. // case "select", "desc":
  166. // case "insert", "delete", "update":
  167. // }
  168. // }
  169. // default:
  170. // switch sqlCmd {
  171. // case "select", "desc":
  172. // case "insert", "delete", "update":
  173. // }
  174. // }
  175. // case []string:
  176. // if sqlExecutor.session.IsSqlFuc == true {
  177. // err := sqlExecutor.session.Begin()
  178. // if err != nil {
  179. // return nil, err
  180. // }
  181. // }
  182. // case map[string]string:
  183. // if sqlExecutor.session.IsSqlFuc == true {
  184. // err := sqlExecutor.session.Begin()
  185. // if err != nil {
  186. // return nil, err
  187. // }
  188. // }
  189. // }
  190. // return 1, nil
  191. //}