pub use arrow;
pub use arrow::record_batch::RecordBatch;
#[cfg(feature = "_read-typed")]
pub(crate) fn deserialize_batches<T>(batches: &[RecordBatch]) -> Result<Vec<T>, crate::DbkitError>
where
T: serde::de::DeserializeOwned,
{
let mut rows = Vec::new();
for batch in batches {
let part: Vec<T> = serde_arrow::from_record_batch(batch)
.map_err(|e| crate::DbkitError::Conversion(e.to_string()))?;
rows.extend(part);
}
Ok(rows)
}
#[cfg(feature = "clickhouse")]
pub(crate) fn serialize_rows<T>(rows: &[T]) -> Result<RecordBatch, crate::DbkitError>
where
T: serde::Serialize,
{
use serde_arrow::schema::{SchemaLike, TracingOptions};
let fields = Vec::<arrow::datatypes::FieldRef>::from_samples(rows, TracingOptions::default())
.map_err(|e| crate::DbkitError::Conversion(e.to_string()))?;
serde_arrow::to_record_batch(&fields, &rows)
.map_err(|e| crate::DbkitError::Conversion(e.to_string()))
}