|
54 | 54 | TimestampType, |
55 | 55 | TimestamptzType, |
56 | 56 | TimeType, |
| 57 | + UnknownType, |
57 | 58 | UUIDType, |
58 | 59 | ) |
59 | 60 |
|
@@ -919,6 +920,36 @@ def test_promotion(file_type: IcebergType, read_type: IcebergType) -> None: |
919 | 920 | promote(file_type, read_type) |
920 | 921 |
|
921 | 922 |
|
| 923 | +def test_unknown_type_promotion_to_primitive() -> None: |
| 924 | + """Test that UnknownType can be promoted to primitive types (V3+ behavior)""" |
| 925 | + unknown_type = UnknownType() |
| 926 | + |
| 927 | + assert promote(unknown_type, StringType()) == StringType() |
| 928 | + assert promote(unknown_type, IntegerType()) == IntegerType() |
| 929 | + assert promote(unknown_type, BooleanType()) == BooleanType() |
| 930 | + assert promote(unknown_type, FloatType()) == FloatType() |
| 931 | + |
| 932 | + |
| 933 | +def test_unknown_type_promotion_to_non_primitive_raises_resolve_error() -> None: |
| 934 | + """Test that UnknownType cannot be promoted to non-primitive types and raises ResolveError""" |
| 935 | + unknown_type = UnknownType() |
| 936 | + |
| 937 | + with pytest.raises(ResolveError) as exc_info: |
| 938 | + promote(unknown_type, ListType(element_id=1, element_type=StringType(), element_required=False)) |
| 939 | + |
| 940 | + assert "Cannot promote unknown to list<string>" in str(exc_info.value) |
| 941 | + |
| 942 | + with pytest.raises(ResolveError) as exc_info: |
| 943 | + promote(unknown_type, MapType(key_id=1, key_type=StringType(), value_id=2, value_type=StringType(), value_required=False)) |
| 944 | + |
| 945 | + assert "Cannot promote unknown to map<string, string>" in str(exc_info.value) |
| 946 | + |
| 947 | + with pytest.raises(ResolveError) as exc_info: |
| 948 | + promote(unknown_type, StructType(NestedField(field_id=1, name="field", field_type=StringType(), required=False))) |
| 949 | + |
| 950 | + assert "Cannot promote unknown to struct<1: field: optional string>" in str(exc_info.value) |
| 951 | + |
| 952 | + |
922 | 953 | @pytest.fixture() |
923 | 954 | def primitive_fields() -> List[NestedField]: |
924 | 955 | return [ |
|
0 commit comments