Files
visualizador_instanciados/backend_go/selection_query.go
2026-03-23 11:13:27 -03:00

46 lines
1.1 KiB
Go

package main
import (
"context"
"fmt"
selectionqueries "visualizador_instanciados/backend_go/selection_queries"
)
func runSelectionQuery(
ctx context.Context,
sparql *AnzoGraphClient,
snapshot GraphResponse,
queryID string,
selectedIDs []uint32,
includeBNodes bool,
) (selectionqueries.Result, error) {
def, ok := selectionqueries.Get(queryID)
if !ok {
return selectionqueries.Result{}, fmt.Errorf("unknown query_id: %s", queryID)
}
idToNode := make(map[uint32]selectionqueries.NodeRef, len(snapshot.Nodes))
keyToID := make(map[string]uint32, len(snapshot.Nodes))
predicateIDByIRI := make(map[string]uint32)
for _, n := range snapshot.Nodes {
nr := selectionqueries.NodeRef{ID: n.ID, TermType: n.TermType, IRI: n.IRI}
idToNode[n.ID] = nr
keyToID[n.TermType+"\x00"+n.IRI] = n.ID
}
if snapshot.Meta != nil {
for predID, iri := range snapshot.Meta.Predicates {
if iri == "" {
continue
}
predicateIDByIRI[iri] = uint32(predID)
}
}
return def.Run(ctx, sparql, selectionqueries.Index{
IDToNode: idToNode,
KeyToID: keyToID,
PredicateIDByIRI: predicateIDByIRI,
}, selectedIDs, includeBNodes)
}