Skip to main content

teaql_runtime/repository/
types.rs

1use teaql_core::{EntityDescriptor, SelectQuery};
2
3use crate::{MetadataStore, UserContext};
4
5pub struct Repository<'a, M, E> {
6    pub(super) metadata: &'a M,
7    pub(super) executor: &'a E,
8}
9
10pub struct ContextRepository<'a, E> {
11    pub(super) metadata: UserContextMetadata<'a>,
12    pub(crate) executor: &'a E,
13}
14
15pub struct ResolvedRepository<'a, E> {
16    pub(super) entity: String,
17    pub(super) repository: ContextRepository<'a, E>,
18    pub(super) trace_context: Vec<teaql_core::TraceNode>,
19}
20
21impl<'a, E> ResolvedRepository<'a, E> {
22    pub fn with_trace_context(mut self, trace_context: Vec<teaql_core::TraceNode>) -> Self {
23        self.trace_context = trace_context;
24        self
25    }
26}
27
28#[derive(Debug, Clone, PartialEq)]
29pub struct RelationLoadPlan {
30    pub parent_entity: String,
31    pub relation_name: String,
32    pub path: String,
33    pub target_entity: String,
34    pub local_key: String,
35    pub foreign_key: String,
36    pub many: bool,
37    pub query: Option<SelectQuery>,
38    pub children: Vec<RelationLoadPlan>,
39}
40
41pub(crate) struct UserContextMetadata<'a> {
42    pub(crate) context: &'a UserContext,
43}
44
45impl MetadataStore for UserContextMetadata<'_> {
46    fn entity(&self, name: &str) -> Option<&EntityDescriptor> {
47        self.context.entity(name)
48    }
49
50    fn all_entities(&self) -> Vec<&EntityDescriptor> {
51        self.context
52            .metadata
53            .as_ref()
54            .map(|metadata| metadata.all_entities())
55            .unwrap_or_default()
56    }
57
58    fn record_metadata_log(&self, metadata: &teaql_data_service::ExecutionMetadata) {
59        self.context.record_metadata_log(metadata);
60    }
61}