in parquet/src/schema/printer.rs [528:789]
fn test_print_logical_types() {
let types_and_strings = vec![
(
build_primitive_type(
"field",
None,
PhysicalType::INT32,
Some(LogicalType::Integer {
bit_width: 32,
is_signed: true,
}),
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED INT32 field (INTEGER(32,true));",
),
(
build_primitive_type(
"field",
None,
PhysicalType::INT32,
Some(LogicalType::Integer {
bit_width: 8,
is_signed: false,
}),
ConvertedType::NONE,
Repetition::OPTIONAL,
)
.unwrap(),
"OPTIONAL INT32 field (INTEGER(8,false));",
),
(
build_primitive_type(
"field",
None,
PhysicalType::INT32,
Some(LogicalType::Integer {
bit_width: 16,
is_signed: true,
}),
ConvertedType::INT_16,
Repetition::REPEATED,
)
.unwrap(),
"REPEATED INT32 field (INTEGER(16,true));",
),
(
build_primitive_type(
"field",
Some(42),
PhysicalType::INT32,
Some(LogicalType::Integer {
bit_width: 16,
is_signed: true,
}),
ConvertedType::INT_16,
Repetition::REPEATED,
)
.unwrap(),
"REPEATED INT32 field [42] (INTEGER(16,true));",
),
(
build_primitive_type(
"field",
None,
PhysicalType::INT64,
None,
ConvertedType::NONE,
Repetition::REPEATED,
)
.unwrap(),
"REPEATED INT64 field;",
),
(
build_primitive_type(
"field",
None,
PhysicalType::FLOAT,
None,
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED FLOAT field;",
),
(
build_primitive_type(
"booleans",
None,
PhysicalType::BOOLEAN,
None,
ConvertedType::NONE,
Repetition::OPTIONAL,
)
.unwrap(),
"OPTIONAL BOOLEAN booleans;",
),
(
build_primitive_type(
"booleans",
Some(42),
PhysicalType::BOOLEAN,
None,
ConvertedType::NONE,
Repetition::OPTIONAL,
)
.unwrap(),
"OPTIONAL BOOLEAN booleans [42];",
),
(
build_primitive_type(
"field",
None,
PhysicalType::INT64,
Some(LogicalType::Timestamp {
is_adjusted_to_u_t_c: true,
unit: TimeUnit::MILLIS(Default::default()),
}),
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED INT64 field (TIMESTAMP(MILLIS,true));",
),
(
build_primitive_type(
"field",
None,
PhysicalType::INT32,
Some(LogicalType::Date),
ConvertedType::NONE,
Repetition::OPTIONAL,
)
.unwrap(),
"OPTIONAL INT32 field (DATE);",
),
(
build_primitive_type(
"field",
None,
PhysicalType::INT32,
Some(LogicalType::Time {
unit: TimeUnit::MILLIS(Default::default()),
is_adjusted_to_u_t_c: false,
}),
ConvertedType::TIME_MILLIS,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED INT32 field (TIME(MILLIS,false));",
),
(
build_primitive_type(
"field",
Some(42),
PhysicalType::INT32,
Some(LogicalType::Time {
unit: TimeUnit::MILLIS(Default::default()),
is_adjusted_to_u_t_c: false,
}),
ConvertedType::TIME_MILLIS,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED INT32 field [42] (TIME(MILLIS,false));",
),
(
build_primitive_type(
"field",
None,
PhysicalType::BYTE_ARRAY,
None,
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field;",
),
(
build_primitive_type(
"field",
Some(42),
PhysicalType::BYTE_ARRAY,
None,
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field [42];",
),
(
build_primitive_type(
"field",
None,
PhysicalType::BYTE_ARRAY,
None,
ConvertedType::UTF8,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field (UTF8);",
),
(
build_primitive_type(
"field",
None,
PhysicalType::BYTE_ARRAY,
Some(LogicalType::Json),
ConvertedType::JSON,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field (JSON);",
),
(
build_primitive_type(
"field",
None,
PhysicalType::BYTE_ARRAY,
Some(LogicalType::Bson),
ConvertedType::BSON,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field (BSON);",
),
(
build_primitive_type(
"field",
None,
PhysicalType::BYTE_ARRAY,
Some(LogicalType::String),
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field (STRING);",
),
(
build_primitive_type(
"field",
Some(42),
PhysicalType::BYTE_ARRAY,
Some(LogicalType::String),
ConvertedType::NONE,
Repetition::REQUIRED,
)
.unwrap(),
"REQUIRED BYTE_ARRAY field [42] (STRING);",
),
];
types_and_strings.into_iter().for_each(|(field, expected)| {
let mut s = String::new();
{
let mut p = Printer::new(&mut s);
p.print(&field);
}
assert_eq!(&s, expected)
});
}