sqlmap.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package xorm
  2. import (
  3. "bufio"
  4. "bytes"
  5. "encoding/json"
  6. "encoding/xml"
  7. "fmt"
  8. "io/ioutil"
  9. "os"
  10. "strings"
  11. )
  12. type SqlMap struct {
  13. SqlMapRootDir string
  14. Sql map[string]string
  15. Extension map[string]string
  16. Capacity uint
  17. Cipher Cipher
  18. }
  19. func (sqlMap *SqlMap) checkNilAndInit() {
  20. if sqlMap.Sql == nil {
  21. if sqlMap.Capacity == 0 {
  22. sqlMap.Sql = make(map[string]string, 100)
  23. } else {
  24. sqlMap.Sql = make(map[string]string, sqlMap.Capacity)
  25. }
  26. }
  27. }
  28. type SqlM interface {
  29. RootDir() string
  30. Extension() string
  31. }
  32. func (sqlMap *SqlMap) walkFunc(path string, info os.FileInfo, err error) error {
  33. if err != nil {
  34. return err
  35. }
  36. if info.IsDir() {
  37. return nil
  38. }
  39. if strings.HasSuffix(path, sqlMap.Extension["xml"]) || strings.HasSuffix(path, sqlMap.Extension["json"]) || strings.HasSuffix(path, sqlMap.Extension["xsql"]) {
  40. err = sqlMap.paresSql(path)
  41. if err != nil {
  42. return err
  43. }
  44. }
  45. return nil
  46. }
  47. func (sqlMap *SqlMap) paresSql(filepath string) error {
  48. content, err := ioutil.ReadFile(filepath)
  49. fmt.Println("filepath:", filepath)
  50. if err != nil {
  51. return err
  52. }
  53. enc := sqlMap.Cipher
  54. if enc != nil {
  55. content, err = enc.Decrypt(content)
  56. if err != nil {
  57. return err
  58. }
  59. }
  60. sqlMap.checkNilAndInit()
  61. if strings.HasSuffix(filepath, sqlMap.Extension["xml"]) {
  62. var result Result
  63. err = xml.Unmarshal(content, &result)
  64. if err != nil {
  65. return err
  66. }
  67. for _, sql := range result.Sql {
  68. sqlMap.Sql[sql.Id] = sql.Value
  69. }
  70. return nil
  71. }
  72. if strings.HasSuffix(filepath, sqlMap.Extension["json"]) {
  73. var result map[string]string
  74. err = json.Unmarshal(content, &result)
  75. if err != nil {
  76. return err
  77. }
  78. for k := range result {
  79. sqlMap.Sql[k] = result[k]
  80. }
  81. return nil
  82. }
  83. if strings.HasSuffix(filepath, sqlMap.Extension["xsql"]) {
  84. scanner := &Scanner{}
  85. result := scanner.Run(bufio.NewScanner(bytes.NewReader(content)))
  86. for k := range result {
  87. sqlMap.Sql[k] = result[k]
  88. }
  89. return nil
  90. }
  91. return nil
  92. }
  93. func (sqlMap *SqlMap) addSql(key string, sql string) {
  94. sqlMap.checkNilAndInit()
  95. sqlMap.Sql[key] = sql
  96. }
  97. func (sqlMap *SqlMap) updateSql(key string, sql string) {
  98. sqlMap.checkNilAndInit()
  99. sqlMap.Sql[key] = sql
  100. }
  101. func (sqlMap *SqlMap) removeSql(key string) {
  102. sqlMap.checkNilAndInit()
  103. delete(sqlMap.Sql, key)
  104. }
  105. func (sqlMap *SqlMap) batchAddSql(sqlStrMap map[string]string) {
  106. sqlMap.checkNilAndInit()
  107. for k, v := range sqlStrMap {
  108. sqlMap.Sql[k] = v
  109. }
  110. }
  111. func (sqlMap *SqlMap) batchUpdateSql(sqlStrMap map[string]string) {
  112. sqlMap.checkNilAndInit()
  113. for k, v := range sqlStrMap {
  114. sqlMap.Sql[k] = v
  115. }
  116. }
  117. func (sqlMap *SqlMap) batchRemoveSql(key []string) {
  118. sqlMap.checkNilAndInit()
  119. for _, v := range key {
  120. delete(sqlMap.Sql, v)
  121. }
  122. }
  123. func (sqlMap *SqlMap) getSql(key string) string {
  124. return sqlMap.Sql[key]
  125. }
  126. func (sqlMap *SqlMap) getSqlMap(keys ...interface{}) map[string]string {
  127. var resultSqlMap map[string]string
  128. i := len(keys)
  129. if i == 0 {
  130. return sqlMap.Sql
  131. }
  132. if i == 1 {
  133. switch keys[0].(type) {
  134. case string:
  135. resultSqlMap = make(map[string]string, 1)
  136. case []string:
  137. ks := keys[0].([]string)
  138. n := len(ks)
  139. resultSqlMap = make(map[string]string, n)
  140. }
  141. } else {
  142. resultSqlMap = make(map[string]string, i)
  143. }
  144. for k, _ := range keys {
  145. switch keys[k].(type) {
  146. case string:
  147. key := keys[k].(string)
  148. resultSqlMap[key] = sqlMap.Sql[key]
  149. case []string:
  150. ks := keys[k].([]string)
  151. for _, v := range ks {
  152. resultSqlMap[v] = sqlMap.Sql[v]
  153. }
  154. }
  155. }
  156. return resultSqlMap
  157. }