47 lines
975 B
Go
47 lines
975 B
Go
package tags
|
|
|
|
import (
|
|
"database/sql"
|
|
_ "github.com/lib/pq"
|
|
"fmt"
|
|
)
|
|
|
|
type Tag struct {
|
|
Id int
|
|
Name string
|
|
Parent sql.NullInt64
|
|
Children []*Tag
|
|
}
|
|
|
|
var TagsTree []*Tag
|
|
var TagsFlat map[int]*Tag
|
|
|
|
// Cavet: slight cheat. All parents must have tag_id < their children.
|
|
func LoadTags(db *sql.DB) {
|
|
TagsTree = []*Tag{}
|
|
TagsFlat = make(map[int]*Tag)
|
|
|
|
rows, err := db.Query("select tags.tag_id, tags.name, tags.parent_id from tags order by tag_id,tags.parent_id desc")
|
|
if err != nil {
|
|
fmt.Println("DB Error loading tags:", err)
|
|
return
|
|
}
|
|
|
|
for rows.Next() {
|
|
tag := &Tag{Children: []*Tag{}}
|
|
|
|
err = rows.Scan(&tag.Id, &tag.Name, &tag.Parent)
|
|
if err != nil {
|
|
fmt.Println("tags DB Error: ", err)
|
|
}
|
|
|
|
TagsFlat[tag.Id] = tag
|
|
|
|
if tag.Parent.Valid {
|
|
pid := int(tag.Parent.Int64)
|
|
TagsFlat[pid].Children = append(TagsFlat[pid].Children, tag)
|
|
} else {
|
|
TagsTree = append(TagsTree, tag)
|
|
}
|
|
}
|
|
} |