use crate::Engine;
use uqa_sql::{
binding::stored_relations::{
self as analysis, StoredQueryBindingContext, StoredQuerySequences, StoredRelationCatalog,
},
catalog::resolution::RelationResolution,
plan::QueryPlan,
SQLError,
};
impl StoredRelationCatalog for Engine {
fn resolve_age_label_relation_name(&self, reference: &str) -> Result<Option<String>, SQLError> {
uqa_execution::catalog::projection::resolve_age_label_relation_name(
&self.catalog_execution(),
reference,
)
}
fn resolve_visible_relation_kind(
&self,
reference: &str,
) -> Result<RelationResolution, SQLError> {
Engine::resolve_visible_relation_kind(self, reference)
}
fn resolve_loaded_visible_relation_kind(
&self,
reference: &str,
) -> Result<RelationResolution, SQLError> {
Engine::resolve_loaded_visible_relation_kind(self, reference)
}
fn resolve_bound_relation_kind(&self, reference: &str) -> Result<RelationResolution, SQLError> {
Engine::resolve_bound_relation_kind(self, reference)
}
}
impl StoredQuerySequences for Engine {
fn query_sequence(&self, reference: &str) -> Result<String, String> {
self.resolve_sequence_reference_for_binding(reference)
.map_err(|error| error.to_string())
}
fn loaded_query_sequence(&self, reference: &str) -> Result<String, String> {
let sequences = self.durable.sequences.read();
let candidates = self
.relation_lookup_candidates(reference)
.map_err(|error| error.to_string())?;
analysis::resolve_loaded_query_sequence(reference, candidates, |candidate| {
sequences.contains_key(candidate)
})
}
}
impl Engine {
pub(crate) fn bind_stored_query_relations(
&self,
plan: &mut QueryPlan,
context: &str,
reject_transition_relations: bool,
) -> Result<bool, SQLError> {
let temporary_schema = self.temporary_schema_name();
let transition_relations =
uqa_execution::mutation::triggers::current_transition_relation_names();
analysis::bind_stored_query_relations(
&StoredQueryBindingContext {
relations: self,
sequences: self,
temporary_schema: &temporary_schema,
transition_relations: &transition_relations,
},
plan,
context,
reject_transition_relations,
false,
)
}
}