uqa_sql/schema/indexes/
routines.rs1use crate::{
10 ast::{FunctionBinding, IndexKey},
11 catalog::{
12 index::IndexDefinition,
13 stored_ast::{expression_references_routine_identity, rewrite_expression_routine_identity},
14 },
15 SQLError,
16};
17
18pub fn index_references_routine(
19 keys: &[IndexKey],
20 definition: &IndexDefinition,
21 target: &FunctionBinding,
22) -> Result<bool, SQLError> {
23 for expression in keys
24 .iter()
25 .filter_map(|key| match key {
26 IndexKey::Expression(expr) => Some(expr.as_ref()),
27 IndexKey::Column(_) => None,
28 })
29 .chain(definition.predicate.as_deref())
30 {
31 if expression_references_routine_identity(expression, target)? {
32 return Ok(true);
33 }
34 }
35 Ok(false)
36}
37
38pub fn rewrite_index_routine_references(
39 keys: &mut [IndexKey],
40 definition: &mut IndexDefinition,
41 target: &FunctionBinding,
42 name: &str,
43) -> Result<bool, SQLError> {
44 let mut changed = false;
45 for expression in keys
46 .iter_mut()
47 .filter_map(|key| match key {
48 IndexKey::Expression(expr) => Some(expr.as_mut()),
49 IndexKey::Column(_) => None,
50 })
51 .chain(definition.predicate.as_deref_mut())
52 {
53 changed |= rewrite_expression_routine_identity(expression, target, name)?;
54 }
55 Ok(changed)
56}