datafusion-ducklake-cli 0.1.0

Interactive and scriptable SQL shell for datafusion-ducklake-provider.
Documentation
use std::sync::Arc;

use datafusion_ducklake_provider::datafusion::arrow::record_batch::RecordBatch;
use datafusion_ducklake_provider::datafusion::arrow::util::pretty::pretty_format_batches;
use datafusion_ducklake_provider::datafusion::dataframe::DataFrame;

use crate::error::CliError;

pub(crate) async fn format_dataframe(
    dataframe: DataFrame,
    quiet: bool,
) -> Result<Option<String>, CliError> {
    let schema = Arc::new(dataframe.schema().as_arrow().clone());
    let has_columns = !schema.fields().is_empty();
    let mut batches = dataframe.collect().await?;

    if !has_columns {
        if !quiet {
            return Ok(Some("OK\n".to_string()));
        }
        return Ok(None);
    }

    if batches.is_empty() {
        batches.push(RecordBatch::new_empty(schema));
    }
    Ok(Some(format!("{}\n", pretty_format_batches(&batches)?)))
}