package db import "axolotl/models" func (db *DB) AddRel(f, t string, r models.RelType) error { _, err := db.Exec("INSERT OR IGNORE INTO rels (from_id, to_id, rel_type) VALUES (?, ?, ?)", f, t, r) return err } func (db *DB) RemoveRel(f, t string, r models.RelType) error { _, err := db.Exec("DELETE FROM rels WHERE from_id = ? AND to_id = ? AND rel_type = ?", f, t, r) return err } func getIDs(db *DB, q, id string, r models.RelType) ([]string, error) { rows, err := db.Query(q, id, r) if err != nil { return nil, err } defer rows.Close() var ids []string for rows.Next() { var i string rows.Scan(&i) ids = append(ids, i) } return ids, nil } func (db *DB) GetRelated(id string, r models.RelType) ([]string, error) { return getIDs(db, "SELECT to_id FROM rels WHERE from_id = ? AND rel_type = ?", id, r) } func (db *DB) GetIncomingRels(id string, r models.RelType) ([]string, error) { return getIDs(db, "SELECT from_id FROM rels WHERE to_id = ? AND rel_type = ?", id, r) } func (db *DB) GetRelNames(n *models.Node, r models.RelType) ([]string, error) { result := make([]string, 0, len(n.Relations[string(r)])) for _, id := range n.Relations[string(r)] { node, err := db.NodeByID(id) if err != nil { return nil, err } result = append(result, node.Title) } return result, nil }