| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package main
- import (
- "encoding/json"
- "flag"
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "strings"
- "time"
- "git.wecise.com/wecise/odbserver/odb"
- "gitee.com/wecisecode/util/logger"
- )
- func main() {
- log.SetFlags(log.LstdFlags | log.Lshortfile)
- var keyspace = flag.String("k", "matrix", "Keyspace")
- var filePath = flag.String("f", "", "Recover file")
- flag.Parse()
- logger.SetConsole(false)
- g, err := odb.New(&odb.Option{Cache: odb.CacheAll, Keyspace: *keyspace})
- if err != nil {
- log.Fatal("New odb error:", err)
- }
- var (
- mql string
- oldTagDirs []map[string]interface{}
- )
- if *filePath == "" {
- mql = `select creater, domain, name, tags from /matrix/tagdir limit -1`
- oldTagDirs, _, err = g.Query(mql)
- if err != nil {
- log.Fatal("Get old tagdir error:", err)
- }
- // Export old tagdir
- b, err := json.MarshalIndent(oldTagDirs, "", " ")
- if err != nil {
- log.Fatal(err)
- }
- file, err := os.OpenFile("old_tagdir.json", os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm)
- if err != nil {
- log.Fatal("Create old_tagdir file error:", err)
- }
- if _, err = file.Write(b); err != nil {
- log.Fatal(err)
- }
- if _, _, err = g.Query(`delete from /matrix/tagdir with version`); err != nil {
- log.Fatal(err)
- }
- time.Sleep(time.Second)
- fmt.Println("Drop old tagdir class.")
- mql = `delete from /matrix/tagdir with version`
- if _, _, err = g.Query(mql); err != nil {
- log.Fatal(err)
- }
- time.Sleep(time.Second)
- mql = `drop class /matrix/tagdir`
- if _, _, err = g.Query(mql); err != nil {
- log.Fatal(err)
- }
- time.Sleep(time.Second)
- } else {
- b, err := ioutil.ReadFile(*filePath)
- if err != nil {
- log.Fatal(err)
- }
- if err = json.Unmarshal(b, &oldTagDirs); err != nil {
- log.Fatal(err)
- }
- }
- fmt.Println("Create new tagdir class.")
- mql = `create class if not exists /matrix/tagdir(
- creater varchar '创建者',
- domain varchar '目录所属域',
- name varchar '标签名称',
- parent varchar '父级目录,/分割的路径',
- path varchar '标签全名,/分割的路径',
- keys(creater, domain, name),
- indexes(creater, domain, name, parent, path)
- )`
- if _, _, err = g.Query(mql); err != nil {
- log.Fatal(err)
- }
- time.Sleep(time.Second)
- mql = `select name from /matrix/tagdir where creater = ? and domain = ? and name = ?`
- selectPs, err := g.Prepare(mql)
- if err != nil {
- log.Fatal(err)
- }
- mql = `insert into /matrix/tagdir (creater, domain, name, parent, path, tags) values (?, ?, ?, ?, ?, ?)`
- insertPs, err := g.Prepare(mql)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Println("Insert new tagdir data.")
- for _, ot := range oldTagDirs {
- creater := ot["creater"].(string)
- domain := ot["domain"].(string)
- a := strings.Split(ot["name"].(string), "/")
- var parent string
- for _, tag := range a {
- res, _, err := selectPs.Exec(creater, domain, tag)
- if err != nil {
- log.Fatal(err)
- }
- if len(res) == 0 {
- var path string
- if parent != "" {
- path = parent + "/" + tag
- } else {
- path = tag
- }
- if _, _, err = insertPs.Exec(creater, domain, tag, parent, path, strings.Split(path, "/")); err != nil {
- log.Fatal(err)
- }
- fmt.Printf("Insert creater: %s, domain: %s, tag: %s, parent: %s, path: %s, tags: %v \n", creater, domain, tag, parent, path, strings.Split(path, "/"))
- }
- if parent == "" {
- parent = tag
- } else {
- parent += "/" + tag
- }
- }
- }
- }
|