sqlmap.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package xorm
  2. import (
  3. "encoding/xml"
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "github.com/Unknwon/goconfig"
  9. )
  10. type SqlMap struct {
  11. Sql map[string]string
  12. }
  13. type Result struct {
  14. Sql []Sql `xml:"sql"`
  15. }
  16. type Sql struct {
  17. Value string `xml:",chardata"`
  18. Id string `xml:"id,attr"`
  19. }
  20. func (engine *Engine) InitSqlMap() error {
  21. var err error
  22. cfg, err := goconfig.LoadConfigFile("./sql/xormcfg.ini")
  23. if err != nil {
  24. return err
  25. }
  26. var sqlMapRootDir string
  27. sqlMapRootDir, err = cfg.GetValue("", "sqlMapRootDir")
  28. if err != nil {
  29. return err
  30. }
  31. engine.SqlMap.Sql = make(map[string]string)
  32. err = filepath.Walk(sqlMapRootDir, engine.SqlMap.walkFunc)
  33. if err != nil {
  34. return err
  35. }
  36. return nil
  37. }
  38. func (sqlMap *SqlMap) walkFunc(path string, info os.FileInfo, err error) error {
  39. if err != nil {
  40. return err
  41. }
  42. if info.IsDir() {
  43. return nil
  44. }
  45. if strings.HasSuffix(path, ".xml") {
  46. err = sqlMap.paresSql(path)
  47. if err != nil {
  48. return err
  49. }
  50. }
  51. return nil
  52. }
  53. func (sqlMap *SqlMap) paresSql(filepath string) error {
  54. content, err := ioutil.ReadFile(filepath)
  55. if err != nil {
  56. return err
  57. }
  58. var result Result
  59. err = xml.Unmarshal(content, &result)
  60. if err != nil {
  61. return err
  62. }
  63. for _, sql := range result.Sql {
  64. sqlMap.Sql[sql.Id] = sql.Value
  65. }
  66. return nil
  67. }