use crate::ir::catalog::Catalog;
use crate::ir::column_type::ColumnType;
pub fn run(cat: &mut Catalog) {
let sentinel = ColumnType::Other {
raw: "view_column".to_string(),
};
for v in &mut cat.views {
for c in &mut v.columns {
c.column_type = sentinel.clone();
}
}
for m in &mut cat.materialized_views {
for c in &mut m.columns {
c.column_type = sentinel.clone();
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::identifier::{Identifier, QualifiedName};
use crate::ir::view::{View, ViewColumn};
use crate::parse::normalize_body::NormalizedBody;
fn id(s: &str) -> Identifier {
Identifier::from_unquoted(s).unwrap()
}
#[test]
fn replaces_bigint_view_column_with_sentinel() {
let mut cat = Catalog::empty();
cat.views.push(View {
qname: QualifiedName::new(id("app"), id("v")),
columns: vec![ViewColumn {
name: id("id"),
column_type: ColumnType::BigInt,
comment: None,
}],
body_canonical: NormalizedBody::empty(),
body_dependencies: vec![],
security_barrier: None,
security_invoker: None,
check_option: None,
comment: None,
raw_body: String::new(),
owner: None,
grants: vec![],
});
run(&mut cat);
assert!(matches!(
&cat.views[0].columns[0].column_type,
ColumnType::Other { raw } if raw == "view_column",
));
}
}