51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
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) {
|
|
ids := n.Relations[string(r)]
|
|
if len(ids) == 0 {
|
|
return nil, nil
|
|
}
|
|
result := make([]string, 0, len(ids))
|
|
for _, id := range ids {
|
|
var title string
|
|
if err := db.QueryRow("SELECT title FROM nodes WHERE id = ?", id).Scan(&title); err != nil {
|
|
return nil, err
|
|
}
|
|
result = append(result, title)
|
|
}
|
|
return result, nil
|
|
}
|