updatetagdir.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "os"
  9. "strings"
  10. "time"
  11. "git.wecise.com/wecise/odbserver/odb"
  12. "gitee.com/wecisecode/util/logger"
  13. )
  14. func main() {
  15. log.SetFlags(log.LstdFlags | log.Lshortfile)
  16. var keyspace = flag.String("k", "matrix", "Keyspace")
  17. var filePath = flag.String("f", "", "Recover file")
  18. flag.Parse()
  19. logger.SetConsole(false)
  20. g, err := odb.New(&odb.Option{Cache: odb.CacheAll, Keyspace: *keyspace})
  21. if err != nil {
  22. log.Fatal("New odb error:", err)
  23. }
  24. var (
  25. mql string
  26. oldTagDirs []map[string]interface{}
  27. )
  28. if *filePath == "" {
  29. mql = `select creater, domain, name, tags from /matrix/tagdir limit -1`
  30. oldTagDirs, _, err = g.Query(mql)
  31. if err != nil {
  32. log.Fatal("Get old tagdir error:", err)
  33. }
  34. // Export old tagdir
  35. b, err := json.MarshalIndent(oldTagDirs, "", " ")
  36. if err != nil {
  37. log.Fatal(err)
  38. }
  39. file, err := os.OpenFile("old_tagdir.json", os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm)
  40. if err != nil {
  41. log.Fatal("Create old_tagdir file error:", err)
  42. }
  43. if _, err = file.Write(b); err != nil {
  44. log.Fatal(err)
  45. }
  46. if _, _, err = g.Query(`delete from /matrix/tagdir with version`); err != nil {
  47. log.Fatal(err)
  48. }
  49. time.Sleep(time.Second)
  50. fmt.Println("Drop old tagdir class.")
  51. mql = `delete from /matrix/tagdir with version`
  52. if _, _, err = g.Query(mql); err != nil {
  53. log.Fatal(err)
  54. }
  55. time.Sleep(time.Second)
  56. mql = `drop class /matrix/tagdir`
  57. if _, _, err = g.Query(mql); err != nil {
  58. log.Fatal(err)
  59. }
  60. time.Sleep(time.Second)
  61. } else {
  62. b, err := ioutil.ReadFile(*filePath)
  63. if err != nil {
  64. log.Fatal(err)
  65. }
  66. if err = json.Unmarshal(b, &oldTagDirs); err != nil {
  67. log.Fatal(err)
  68. }
  69. }
  70. fmt.Println("Create new tagdir class.")
  71. mql = `create class if not exists /matrix/tagdir(
  72. creater varchar '创建者',
  73. domain varchar '目录所属域',
  74. name varchar '标签名称',
  75. parent varchar '父级目录,/分割的路径',
  76. path varchar '标签全名,/分割的路径',
  77. keys(creater, domain, name),
  78. indexes(creater, domain, name, parent, path)
  79. )`
  80. if _, _, err = g.Query(mql); err != nil {
  81. log.Fatal(err)
  82. }
  83. time.Sleep(time.Second)
  84. mql = `select name from /matrix/tagdir where creater = ? and domain = ? and name = ?`
  85. selectPs, err := g.Prepare(mql)
  86. if err != nil {
  87. log.Fatal(err)
  88. }
  89. mql = `insert into /matrix/tagdir (creater, domain, name, parent, path, tags) values (?, ?, ?, ?, ?, ?)`
  90. insertPs, err := g.Prepare(mql)
  91. if err != nil {
  92. log.Fatal(err)
  93. }
  94. fmt.Println("Insert new tagdir data.")
  95. for _, ot := range oldTagDirs {
  96. creater := ot["creater"].(string)
  97. domain := ot["domain"].(string)
  98. a := strings.Split(ot["name"].(string), "/")
  99. var parent string
  100. for _, tag := range a {
  101. res, _, err := selectPs.Exec(creater, domain, tag)
  102. if err != nil {
  103. log.Fatal(err)
  104. }
  105. if len(res) == 0 {
  106. var path string
  107. if parent != "" {
  108. path = parent + "/" + tag
  109. } else {
  110. path = tag
  111. }
  112. if _, _, err = insertPs.Exec(creater, domain, tag, parent, path, strings.Split(path, "/")); err != nil {
  113. log.Fatal(err)
  114. }
  115. fmt.Printf("Insert creater: %s, domain: %s, tag: %s, parent: %s, path: %s, tags: %v \n", creater, domain, tag, parent, path, strings.Split(path, "/"))
  116. }
  117. if parent == "" {
  118. parent = tag
  119. } else {
  120. parent += "/" + tag
  121. }
  122. }
  123. }
  124. }