use std::fs::File;
use ar_row::arrow::array::RecordBatchReader;
use orc_rust::projection::ProjectionMask;
use orc_rust::ArrowReaderBuilder;
use ar_row::deserialize::CheckableDataType;
use ar_row_derive::ArRowDeserialize;
fn get_reader_builder() -> ArrowReaderBuilder<File> {
let orc_path = "../test_data/TestOrcFile.test1.orc";
let file = File::open(orc_path).expect("could not open .orc");
ArrowReaderBuilder::try_new(file).expect("Could not make builder")
}
#[derive(ArRowDeserialize, Default, Debug, PartialEq, Eq)]
struct Test1IncorrectOrder {
long1: Option<i64>,
string1: Option<String>,
bytes1: Option<Box<[u8]>>,
}
#[test]
fn incorrect_order() {
let builder = get_reader_builder();
let projection = ProjectionMask::named_roots(
builder.file_metadata().root_data_type(),
&["long1", "string1", "bytes1"],
);
let reader = builder.with_projection(projection).build();
assert_eq!(
Test1IncorrectOrder::check_schema(&reader.schema()),
Err("Test1IncorrectOrder cannot be decoded:\n\tField #1 must be called string1, not bytes1\n\tField #2 must be called bytes1, not string1".to_string()));
}
#[derive(ArRowDeserialize, Default, Debug, PartialEq, Eq)]
struct Test1IncorrectType {
long1: Option<i64>,
bytes1: Option<String>,
}
#[test]
fn incorrect_type() {
let builder = get_reader_builder();
let projection = ProjectionMask::named_roots(
builder.file_metadata().root_data_type(),
&["long1", "bytes1"],
);
let reader = builder.with_projection(projection).build();
assert_eq!(
Test1IncorrectType::check_schema(&reader.schema()),
Err("Test1IncorrectType cannot be decoded:\n\tField bytes1 cannot be decoded: String must be decoded from Arrow Utf8/LargeUtf8, not Arrow Binary".to_string()));
}