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

Function query_entities

libs/@local/graph/api/src/rest/entity.rs:433–489  ·  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

431 )
432)]
433async fn query_entities<S>(
434 AuthenticatedUserHeader(actor_id): AuthenticatedUserHeader,
435 InteractiveHeader(interactive): InteractiveHeader,
436 store_pool: Extension<Arc<S>>,
437 temporal_client: Extension<Option<Arc<TemporalClient>>>,
438 Extension(api_config): Extension<ApiConfig>,
439 mut query_logger: Option<Extension<QueryLogger>>,
440 Json(request): Json<Box<RawJsonvalue>>,
441) -> Result<Json<QueryEntitiesResponse<'static>>, BoxedResponse>
442where
443 S: StorePool + Send + Sync,
444{
445 if let Some(query_logger) = &mut query_logger {
446 query_logger.capture(actor_id, OpenApiQuery::GetEntities(&request));
447 }
448
449 let store = store_pool
450 .acquire(temporal_client.0)
451 .await
452 .map_err(report_to_response)?;
453
454 let request = QueryEntitiesRequest::deserialize(&*request)
455 .map_err(Report::from)
456 .attach(hash_status::StatusCode::InvalidArgument)
457 .map_err(report_to_response)?;
458
459 let (query, options) = request.into_parts();
460
461 // TODO: https://linear.app/hash/issue/H-5351/reuse-parts-between-compilation-units
462 let mut heap = Heap::uninitialized();
463
464 if matches!(query, EntityQuery::Query { .. }) {
465 // The heap is going to be used in the compilation of the query and therefore needs to be
466 // primed.
467 // Doing this in a separate step allows us to be allocation free when not using HashQL
468 // queries.
469 heap.prime();
470 }
471
472 let filter = query.compile(&heap, CompilationOptions { interactive })?;
473
474 let params = options
475 .into_params(filter, api_config)
476 .attach(hash_status::StatusCode::InvalidArgument)
477 .map_err(report_to_response)?;
478
479 let response = store
480 .query_entities(actor_id, params)
481 .await
482 .map(Json)
483 .map_err(report_to_response);
484
485 if let Some(query_logger) = &mut query_logger {
486 query_logger.send().await.map_err(report_to_response)?;
487 }
488 response
489}
490

Callers

nothing calls this directly

Calls 12

map_errMethod · 0.80
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
into_paramsMethod · 0.45
mapMethod · 0.45
query_entitiesMethod · 0.45

Tested by

no test coverage detected