use arrow::datatypes::{Schema, SchemaBuilder};
use datafusion_common::Result;
use datafusion_physical_expr::window::WindowExpr;
use std::sync::Arc;
pub(crate) fn create_schema(
input_schema: &Schema,
window_expr: &[Arc<dyn WindowExpr>],
) -> Result<Schema> {
let capacity = input_schema.fields().len() + window_expr.len();
let mut builder = SchemaBuilder::with_capacity(capacity);
builder.extend(input_schema.fields().iter().cloned());
for expr in window_expr {
builder.push(expr.field()?);
}
Ok(builder
.finish()
.with_metadata(input_schema.metadata().clone()))
}