pg-blast-radius 0.3.0

Workload-aware blast radius forecaster for PostgreSQL migrations
Documentation
use anyhow::Result;
use pg_query::protobuf;

pub fn parse(sql: &str) -> Result<pg_query::ParseResult> {
    pg_query::parse(sql).map_err(|e| anyhow::anyhow!("Parse error: {e}"))
}

pub fn extract_statement_sql(source: &str, stmt: &protobuf::RawStmt) -> String {
    let start = stmt.stmt_location as usize;
    let len = if stmt.stmt_len > 0 {
        stmt.stmt_len as usize
    } else {
        source.len() - start
    };
    let end = (start + len).min(source.len());
    source[start..end].trim().to_string()
}

pub fn format_relation(r: &protobuf::RangeVar) -> String {
    if r.schemaname.is_empty() {
        r.relname.clone()
    } else {
        format!("{}.{}", r.schemaname, r.relname)
    }
}