| | |
| | | return links, nil |
| | | } |
| | | |
| | | // GetUnresolvedLinks 某文档的悬空链接文本列表 |
| | | func (s *Store) GetUnresolvedLinks(path string) ([]string, error) { |
| | | rows, err := s.db.Query(` |
| | | SELECT u.link_text FROM unresolved_links u |
| | | JOIN nodes n ON n.id = u.from_node WHERE n.path = ?`, path) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | defer rows.Close() |
| | | var links []string |
| | | for rows.Next() { |
| | | var l string |
| | | rows.Scan(&l) |
| | | links = append(links, l) |
| | | } |
| | | return links, rows.Err() |
| | | } |
| | | |
| | | // NodeInfo 节点基本信息(用于 GC) |
| | | type NodeInfo struct { |
| | | ID int64 |
| | |
| | | visited[id] = true |
| | | |
| | | query := ` |
| | | SELECT id, from_node, to_node, relation, label |
| | | SELECT id, from_node, to_node, relation, label, provenance |
| | | FROM edges |
| | | WHERE from_node = ? |
| | | ` |
| | |
| | | for rows.Next() { |
| | | var e graph.Edge |
| | | var edgeID int64 |
| | | if err := rows.Scan(&edgeID, &e.FromNode, &e.ToNode, &e.Relation, &e.Label); err != nil { |
| | | if err := rows.Scan(&edgeID, &e.FromNode, &e.ToNode, &e.Relation, &e.Label, &e.Provenance); err != nil { |
| | | rows.Close() |
| | | return nil, fmt.Errorf("扫描边失败: %w", err) |
| | | } |