transmet/tags/tags.go

50 lines
1.1 KiB
Go

package tags
import (
"database/sql"
_ "github.com/lib/pq"
"fmt"
"strings"
"strconv"
)
type Tag struct {
Name string
Parent sql.NullInt64
Children []int
}
var Tags map[int]*Tag
func LoadTags(db *sql.DB) {
Tags = make(map[int]*Tag)
rows, err := db.Query("select tags.tag_id, tags.name, tags.parent_id, array_agg(distinct(parent_of.tag_id)) as children from tags left join tags as parent_of on parent_of.parent_id=tags.tag_id group by tags.tag_id")
if err != nil {
fmt.Println("DB Error loading tags:", err)
return
}
for rows.Next() {
tag := &Tag{Children: nil}
var children sql.NullString
var tag_id int
err = rows.Scan(&tag_id, &tag.Name, &tag.Parent, &children)
if err != nil {
fmt.Println("tags DB Error: ", err)
}
if children.Valid {
var childrenStr = children.String[1 : len(children.String)-1]
if childrenStr != "NULL" {
pids := strings.Split(childrenStr, ",")
for _, spid := range pids {
pid, _ := strconv.Atoi(spid)
tag.Children = append(tag.Children, pid)
}
}
}
Tags[tag_id] = tag
}
}