Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,13 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }}

- name: Build
if: matrix.os != 'windows-latest'
run: make build

- name: Build
if: matrix.os == 'windows-latest'
env:
AWS_LC_SYS_C_STD: "11"
run: make build

build_with_no_default_features:
Expand Down
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/catalog/glue/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ impl SchemaVisitor for GlueSchemaBuilder {
PrimitiveType::Date => "date".to_string(),
PrimitiveType::Timestamp => "timestamp".to_string(),
PrimitiveType::TimestampNs => "timestamp_ns".to_string(),
PrimitiveType::Timestamptz | PrimitiveType::TimestamptzNs => {
PrimitiveType::Timestamptz | PrimitiveType::TimestamptzNs | PrimitiveType::Variant => {
return Err(Error::new(
ErrorKind::FeatureUnsupported,
format!("Conversion from {p:?} is not supported"),
Expand Down
2 changes: 1 addition & 1 deletion crates/catalog/hms/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ impl SchemaVisitor for HiveSchemaBuilder {
PrimitiveType::Date => "date".to_string(),
PrimitiveType::Timestamp => "timestamp".to_string(),
PrimitiveType::TimestampNs => "timestamp_ns".to_string(),
PrimitiveType::Timestamptz | PrimitiveType::TimestamptzNs => {
PrimitiveType::Timestamptz | PrimitiveType::TimestamptzNs | PrimitiveType::Variant => {
return Err(Error::new(
ErrorKind::FeatureUnsupported,
format!("Conversion from {p:?} is not supported"),
Expand Down
4 changes: 4 additions & 0 deletions crates/iceberg/src/arrow/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,9 @@ impl SchemaVisitor for ToArrowSchemaConverter {
crate::spec::PrimitiveType::Binary => {
Ok(ArrowSchemaOrFieldOrType::Type(DataType::LargeBinary))
}
crate::spec::PrimitiveType::Variant => {
Ok(ArrowSchemaOrFieldOrType::Type(DataType::LargeBinary))
}
}
}
}
Expand Down Expand Up @@ -1119,6 +1122,7 @@ pub fn datum_to_arrow_type_with_ree(datum: &Datum) -> DataType {
PrimitiveType::Uuid => make_ree(DataType::Binary),
PrimitiveType::Fixed(_) => make_ree(DataType::Binary),
PrimitiveType::Binary => make_ree(DataType::Binary),
PrimitiveType::Variant => make_ree(DataType::Binary),
PrimitiveType::Decimal { precision, scale } => {
make_ree(DataType::Decimal128(*precision as u8, *scale as i8))
}
Expand Down
4 changes: 4 additions & 0 deletions crates/iceberg/src/arrow/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,10 @@ impl SchemaWithPartnerVisitor<ArrayRef> for ArrowArrayToIcebergStructConverter {
))
}
}
PrimitiveType::Variant => Err(Error::new(
ErrorKind::FeatureUnsupported,
"Converting arrow array to variant literals is not supported yet.",
)),
}
}
}
Expand Down
6 changes: 6 additions & 0 deletions crates/iceberg/src/avro/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,12 @@ impl SchemaVisitor for SchemaToAvroSchema {
PrimitiveType::Uuid => AvroSchema::Uuid,
PrimitiveType::Fixed(len) => avro_fixed_schema((*len) as usize)?,
PrimitiveType::Binary => AvroSchema::Bytes,
PrimitiveType::Variant => {
return Err(Error::new(
ErrorKind::FeatureUnsupported,
"Converting variant type to avro schema is not supported yet.",
));
}
PrimitiveType::Decimal { precision, scale } => {
avro_decimal_schema(*precision as usize, *scale as usize)?
}
Expand Down
12 changes: 11 additions & 1 deletion crates/iceberg/src/spec/datatypes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ pub enum PrimitiveType {
TimestamptzNs,
/// Arbitrary-length character sequences encoded in utf-8
String,
/// Semi-structured data encoded as an Iceberg variant.
Variant,
/// Universally Unique Identifiers, should use 16-byte fixed
Uuid,
/// Fixed length byte array
Expand Down Expand Up @@ -379,6 +381,7 @@ impl fmt::Display for PrimitiveType {
PrimitiveType::TimestampNs => write!(f, "timestamp_ns"),
PrimitiveType::TimestamptzNs => write!(f, "timestamptz_ns"),
PrimitiveType::String => write!(f, "string"),
PrimitiveType::Variant => write!(f, "variant"),
PrimitiveType::Uuid => write!(f, "uuid"),
PrimitiveType::Fixed(size) => write!(f, "fixed({size})"),
PrimitiveType::Binary => write!(f, "binary"),
Expand Down Expand Up @@ -868,7 +871,8 @@ mod tests {
{"id": 13, "name": "uuid_field", "required": true, "type": "uuid"},
{"id": 14, "name": "fixed_field", "required": true, "type": "fixed[10]"},
{"id": 15, "name": "binary_field", "required": true, "type": "binary"},
{"id": 16, "name": "string_field", "required": true, "type": "string"}
{"id": 16, "name": "string_field", "required": true, "type": "string"},
{"id": 17, "name": "variant_field", "required": true, "type": "variant"}
]
}
"#;
Expand Down Expand Up @@ -948,6 +952,12 @@ mod tests {
Type::Primitive(PrimitiveType::String),
)
.into(),
NestedField::required(
17,
"variant_field",
Type::Primitive(PrimitiveType::Variant),
)
.into(),
],
id_lookup: OnceLock::default(),
name_lookup: OnceLock::default(),
Expand Down
23 changes: 18 additions & 5 deletions crates/iceberg/src/spec/table_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1732,6 +1732,12 @@ mod tests {
"name": "ts",
"required": true,
"type": "timestamp"
},
{
"id": 5,
"name": "payload",
"required": false,
"type": "variant"
}
]
}
Expand Down Expand Up @@ -1798,11 +1804,18 @@ mod tests {

let schema = Schema::builder()
.with_schema_id(1)
.with_fields(vec![Arc::new(NestedField::required(
4,
"ts",
Type::Primitive(PrimitiveType::Timestamp),
))])
.with_fields(vec![
Arc::new(NestedField::required(
4,
"ts",
Type::Primitive(PrimitiveType::Timestamp),
)),
Arc::new(NestedField::optional(
5,
"payload",
Type::Primitive(PrimitiveType::Variant),
)),
])
.build()
.unwrap();

Expand Down
6 changes: 6 additions & 0 deletions crates/iceberg/src/spec/values/datum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,12 @@ impl Datum {
}
PrimitiveType::Fixed(_) => PrimitiveLiteral::Binary(Vec::from(bytes)),
PrimitiveType::Binary => PrimitiveLiteral::Binary(Vec::from(bytes)),
PrimitiveType::Variant => {
return Err(Error::new(
ErrorKind::FeatureUnsupported,
"Converting bytes to variant datum is not supported yet.",
));
}
PrimitiveType::Decimal { .. } => {
let unscaled_value = BigInt::from_signed_bytes_be(bytes);
PrimitiveLiteral::Int128(unscaled_value.to_i128().ok_or_else(|| {
Expand Down
Loading