use squonk::ast::generated::visit::{VisitMut, walk_select_item_mut, walk_table_factor_mut};
use squonk::ast::render::{RenderConfig, RenderCtx, RenderExt as _, RenderMode};
use squonk::ast::{SelectItem, TableFactor};
use squonk::parse;
struct StripAliases;
impl VisitMut for StripAliases {
fn visit_select_item_mut(&mut self, node: &mut SelectItem) {
if let SelectItem::Expr { alias, .. } = node {
*alias = None;
}
walk_select_item_mut(self, node);
}
fn visit_table_factor_mut(&mut self, node: &mut TableFactor) {
if let TableFactor::Table { alias, .. } = node {
*alias = None;
}
walk_table_factor_mut(self, node);
}
}
fn main() {
let parsed = parse("SELECT secret AS s, 42 AS answer FROM users AS u").expect("parses");
let mut statements = parsed.statements().to_vec();
let mut strip = StripAliases;
for statement in &mut statements {
strip.visit_statement_mut(statement);
}
let config = RenderConfig {
mode: RenderMode::Redacted,
..RenderConfig::default()
};
let ctx = RenderCtx::new(parsed.resolver(), parsed.source(), &config);
let redacted = statements[0].displayed(&ctx).to_string();
println!("before: {parsed}");
println!("stripped+redacted: {redacted}");
assert_eq!(redacted, "SELECT id, ? FROM id");
}