iceberg_rust/
sql.rs

1/*!
2Utility functions for SQL
3*/
4
5use std::ops::ControlFlow;
6
7use sqlparser::{ast::visit_relations, dialect::GenericDialect, parser::Parser};
8
9use crate::error::Error;
10
11/// Find all table references in a SQL query
12pub fn find_relations(sql: &str) -> Result<Vec<String>, Error> {
13    let statements = Parser::parse_sql(&GenericDialect, sql)?;
14    let mut visited = Vec::new();
15
16    visit_relations(&statements, |relation| {
17        visited.push(relation.to_string());
18        ControlFlow::<()>::Continue(())
19    });
20    Ok(visited)
21}