1use anyhow::Result;
2use pg_query::protobuf;
3
4pub fn parse(sql: &str) -> Result<pg_query::ParseResult> {
5 pg_query::parse(sql).map_err(|e| anyhow::anyhow!("Parse error: {e}"))
6}
7
8pub fn extract_statement_sql(source: &str, stmt: &protobuf::RawStmt) -> String {
9 let start = stmt.stmt_location as usize;
10 let len = if stmt.stmt_len > 0 {
11 stmt.stmt_len as usize
12 } else {
13 source.len() - start
14 };
15 let end = (start + len).min(source.len());
16 source[start..end].trim().to_string()
17}
18
19pub fn format_relation(r: &protobuf::RangeVar) -> String {
20 if r.schemaname.is_empty() {
21 r.relname.clone()
22 } else {
23 format!("{}.{}", r.schemaname, r.relname)
24 }
25}