use anyhow::{anyhow, bail, Result};
use polars::prelude::*;
use std::path::PathBuf;
use crate::parser::Expr;
use super::*;
pub fn eval(args: &[Expr], ctx: &mut Context) -> Result<()> {
let path = PathBuf::from(args::string(&args[0]));
let overwrite = args::named_bool(args, "overwrite")?;
if let Some(df) = ctx.take_df() {
if !overwrite && path.exists() {
bail!("parquet error: file '{}' already exists.", path.display());
}
let file = std::fs::File::create(&path)
.map_err(|e| anyhow!("parquet error: cannot create file '{}' {e}", path.display()))?;
let mut out_df = df.clone().collect()?;
ctx.set_df(df)?;
ParquetWriter::new(file).finish(&mut out_df)?;
} else {
let df = LazyFrame::scan_parquet(&path, ScanArgsParquet::default())
.map_err(|e| anyhow!("parquet error: cannot read file '{}' {e}", path.display()))?;
ctx.set_df(df)?;
}
Ok(())
}