MCPcopy Create free account
hub / github.com/hashintel/hash / query_entity_subgraph

Function query_entity_subgraph

libs/@local/graph/api/src/rest/entity.rs:576–638  ·  view source on GitHub ↗
(
    AuthenticatedUserHeader(actor_id): AuthenticatedUserHeader,
    InteractiveHeader(interactive): InteractiveHeader,
    store_pool: Extension<Arc<S>>,
    temporal_client: Extension<Option<Arc<Te

Source from the content-addressed store, hash-verified

574 )
575)]
576async fn query_entity_subgraph<S>(
577 AuthenticatedUserHeader(actor_id): AuthenticatedUserHeader,
578 InteractiveHeader(interactive): InteractiveHeader,
579 store_pool: Extension<Arc<S>>,
580 temporal_client: Extension<Option<Arc<TemporalClient>>>,
581 Extension(api_config): Extension<ApiConfig>,
582 mut query_logger: Option<Extension<QueryLogger>>,
583 Json(request): Json<serde_json::Value>,
584) -> Result<Json<QueryEntitySubgraphResponse<'static>>, BoxedResponse>
585where
586 S: StorePool + Send + Sync,
587{
588 if let Some(query_logger) = &mut query_logger {
589 query_logger.capture(actor_id, OpenApiQuery::GetEntitySubgraph(&request));
590 }
591
592 let store = store_pool
593 .acquire(temporal_client.0)
594 .await
595 .map_err(report_to_response)?;
596
597 let request = QueryEntitySubgraphRequest::deserialize(&request)
598 .map_err(Report::from)
599 .attach(hash_status::StatusCode::InvalidArgument)
600 .map_err(report_to_response)?;
601 let (query, options, traversal) = request.into_parts();
602
603 // TODO: https://linear.app/hash/issue/H-5351/reuse-parts-between-compilation-units
604 let mut heap = Heap::uninitialized();
605
606 if matches!(query, EntityQuery::Query { .. }) {
607 // The heap is going to be used in the compilation of the query and therefore needs to be
608 // primed.
609 // Doing this in a separate step allows us to be allocation free when not using HashQL
610 // queries.
611 heap.prime();
612 }
613
614 let filter = query.compile(&heap, CompilationOptions { interactive })?;
615
616 let params = options
617 .into_traversal_params(filter, traversal, api_config)
618 .attach(hash_status::StatusCode::InvalidArgument)
619 .map_err(report_to_response)?;
620
621 let response = store
622 .query_entity_subgraph(actor_id, params)
623 .await
624 .map(|response| {
625 Json(QueryEntitySubgraphResponse {
626 subgraph: response.subgraph.into(),
627 cursor: response.cursor.map(EntityQueryCursor::into_owned),
628 closed_multi_entity_types: response.closed_multi_entity_types,
629 definitions: response.definitions,
630 entity_permissions: response.entity_permissions,
631 })
632 })
633 .map_err(report_to_response);

Callers

nothing calls this directly

Calls 13

map_errMethod · 0.80
into_traversal_paramsMethod · 0.80
JsonClass · 0.70
acquireMethod · 0.65
sendMethod · 0.65
deserializeFunction · 0.50
captureMethod · 0.45
attachMethod · 0.45
into_partsMethod · 0.45
primeMethod · 0.45
compileMethod · 0.45
mapMethod · 0.45

Tested by

no test coverage detected