use super::{DependencyBuilder, References};
use uqa_sql::plan::QueryPlan;
use uqa_sql::SQLError;
impl DependencyBuilder<'_> {
pub(super) fn query_references(&self, query: &QueryPlan) -> Result<References, SQLError> {
let found =
super::super::view_definition::query_references(self.catalog, self.resolution, query)?;
let mut references = References::default();
for name in &found.relations {
if let Some(oid) = self.objects.relation_oid_by_name(name) {
references.add_relation(oid);
}
}
for (relation, column) in &found.columns {
let Some(oid) = self.objects.relation_oid_by_name(relation) else {
continue;
};
if let Some(number) = self
.objects
.relation(oid)
.and_then(|relation| relation.column_number(column))
{
references.add_column(oid, number);
}
}
let expressions = self.expressions();
for name in &found.types {
if let Some(oid) = expressions.type_oid(name) {
references.add_type(oid);
}
}
for binding in &found.routines {
if let Some(oid) = expressions.routine_oid(binding) {
references.add_routine(oid);
}
}
for (ty, oid) in &found.constants {
super::expressions::add_constant_reference(ty, *oid, &mut references);
}
Ok(references)
}
}