Skip to content

Commit

Permalink
Add VariantData implementation of Variant.
Browse files Browse the repository at this point in the history
  • Loading branch information
rdblue committed Feb 21, 2025
1 parent bc52d4a commit f3e3ccc
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 87 deletions.
12 changes: 1 addition & 11 deletions api/src/main/java/org/apache/iceberg/variants/Variant.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,7 @@ public interface Variant {
VariantValue value();

static Variant of(VariantMetadata metadata, VariantValue value) {
return new Variant() {
@Override
public VariantMetadata metadata() {
return metadata;
}

@Override
public VariantValue value() {
return value;
}
};
return new VariantData(metadata, value);
}

static Variant from(ByteBuffer buffer) {
Expand Down
43 changes: 43 additions & 0 deletions api/src/main/java/org/apache/iceberg/variants/VariantData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.iceberg.variants;

import org.apache.iceberg.relocated.com.google.common.base.Preconditions;

class VariantData implements Variant {
private final VariantMetadata metadata;
private final VariantValue value;

VariantData(VariantMetadata metadata, VariantValue value) {
Preconditions.checkArgument(metadata != null, "Invalid variant metadata: null");
Preconditions.checkArgument(value != null, "Invalid variant value: null");
this.metadata = metadata;
this.value = value;
}

@Override
public VariantMetadata metadata() {
return metadata;
}

@Override
public VariantValue value() {
return value;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -351,31 +351,7 @@ private VariantReader(
public Variant read(Variant ignored) {
VariantMetadata metadata = metadataReader.read(null);
VariantValue value = valueReader.read(metadata);
if (value == MISSING) {
return new Variant() {
@Override
public VariantMetadata metadata() {
return metadata;
}

@Override
public VariantValue value() {
return Variants.ofNull();
}
};
}

return new Variant() {
@Override
public VariantMetadata metadata() {
return metadata;
}

@Override
public VariantValue value() {
return value;
}
};
return Variant.of(metadata, value != MISSING ? value : Variants.ofNull());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,40 +97,41 @@ public class TestVariantWriters {

private static final Variant[] VARIANTS =
new Variant[] {
variantOf(EMPTY_METADATA, Variants.ofNull()),
variantOf(EMPTY_METADATA, Variants.of(true)),
variantOf(EMPTY_METADATA, Variants.of(false)),
variantOf(EMPTY_METADATA, Variants.of((byte) 34)),
variantOf(EMPTY_METADATA, Variants.of((byte) -34)),
variantOf(EMPTY_METADATA, Variants.of((short) 1234)),
variantOf(EMPTY_METADATA, Variants.of((short) -1234)),
variantOf(EMPTY_METADATA, Variants.of(12345)),
variantOf(EMPTY_METADATA, Variants.of(-12345)),
variantOf(EMPTY_METADATA, Variants.of(9876543210L)),
variantOf(EMPTY_METADATA, Variants.of(-9876543210L)),
variantOf(EMPTY_METADATA, Variants.of(10.11F)),
variantOf(EMPTY_METADATA, Variants.of(-10.11F)),
variantOf(EMPTY_METADATA, Variants.of(14.3D)),
variantOf(EMPTY_METADATA, Variants.of(-14.3D)),
variantOf(EMPTY_METADATA, EMPTY_OBJECT),
variantOf(TEST_METADATA, TEST_OBJECT),
variantOf(TEST_METADATA, SIMILAR_OBJECT),
variantOf(EMPTY_METADATA, Variants.ofIsoDate("2024-11-07")),
variantOf(EMPTY_METADATA, Variants.ofIsoDate("1957-11-07")),
variantOf(EMPTY_METADATA, Variants.ofIsoTimestamptz("2024-11-07T12:33:54.123456+00:00")),
variantOf(EMPTY_METADATA, Variants.ofIsoTimestamptz("1957-11-07T12:33:54.123456+00:00")),
variantOf(EMPTY_METADATA, Variants.ofIsoTimestampntz("2024-11-07T12:33:54.123456")),
variantOf(EMPTY_METADATA, Variants.ofIsoTimestampntz("1957-11-07T12:33:54.123456")),
variantOf(EMPTY_METADATA, Variants.of(new BigDecimal("123456.789"))), // decimal4
variantOf(EMPTY_METADATA, Variants.of(new BigDecimal("-123456.789"))), // decimal4
variantOf(EMPTY_METADATA, Variants.of(new BigDecimal("123456789.987654321"))), // decimal8
variantOf(EMPTY_METADATA, Variants.of(new BigDecimal("-123456789.987654321"))), // decimal8
variantOf(EMPTY_METADATA, Variants.of(new BigDecimal("9876543210.123456789"))), // decimal16
variantOf(
Variant.of(EMPTY_METADATA, Variants.ofNull()),
Variant.of(EMPTY_METADATA, Variants.of(true)),
Variant.of(EMPTY_METADATA, Variants.of(false)),
Variant.of(EMPTY_METADATA, Variants.of((byte) 34)),
Variant.of(EMPTY_METADATA, Variants.of((byte) -34)),
Variant.of(EMPTY_METADATA, Variants.of((short) 1234)),
Variant.of(EMPTY_METADATA, Variants.of((short) -1234)),
Variant.of(EMPTY_METADATA, Variants.of(12345)),
Variant.of(EMPTY_METADATA, Variants.of(-12345)),
Variant.of(EMPTY_METADATA, Variants.of(9876543210L)),
Variant.of(EMPTY_METADATA, Variants.of(-9876543210L)),
Variant.of(EMPTY_METADATA, Variants.of(10.11F)),
Variant.of(EMPTY_METADATA, Variants.of(-10.11F)),
Variant.of(EMPTY_METADATA, Variants.of(14.3D)),
Variant.of(EMPTY_METADATA, Variants.of(-14.3D)),
Variant.of(EMPTY_METADATA, EMPTY_OBJECT),
Variant.of(TEST_METADATA, TEST_OBJECT),
Variant.of(TEST_METADATA, SIMILAR_OBJECT),
Variant.of(EMPTY_METADATA, Variants.ofIsoDate("2024-11-07")),
Variant.of(EMPTY_METADATA, Variants.ofIsoDate("1957-11-07")),
Variant.of(EMPTY_METADATA, Variants.ofIsoTimestamptz("2024-11-07T12:33:54.123456+00:00")),
Variant.of(EMPTY_METADATA, Variants.ofIsoTimestamptz("1957-11-07T12:33:54.123456+00:00")),
Variant.of(EMPTY_METADATA, Variants.ofIsoTimestampntz("2024-11-07T12:33:54.123456")),
Variant.of(EMPTY_METADATA, Variants.ofIsoTimestampntz("1957-11-07T12:33:54.123456")),
Variant.of(EMPTY_METADATA, Variants.of(new BigDecimal("123456.789"))), // decimal4
Variant.of(EMPTY_METADATA, Variants.of(new BigDecimal("-123456.789"))), // decimal4
Variant.of(EMPTY_METADATA, Variants.of(new BigDecimal("123456789.987654321"))), // decimal8
Variant.of(EMPTY_METADATA, Variants.of(new BigDecimal("-123456789.987654321"))), // decimal8
Variant.of(
EMPTY_METADATA, Variants.of(new BigDecimal("9876543210.123456789"))), // decimal16
Variant.of(
EMPTY_METADATA, Variants.of(new BigDecimal("-9876543210.123456789"))), // decimal16
variantOf(
Variant.of(
EMPTY_METADATA, Variants.of(ByteBuffer.wrap(new byte[] {0x0a, 0x0b, 0x0c, 0x0d}))),
variantOf(EMPTY_METADATA, Variants.of("iceberg")),
Variant.of(EMPTY_METADATA, Variants.of("iceberg")),
};

@ParameterizedTest
Expand Down Expand Up @@ -199,25 +200,6 @@ private static List<Record> writeAndRead(
}
}

private static Variant variantOf(VariantMetadata metadata, VariantValue value) {
return new Variant() {
@Override
public VariantMetadata metadata() {
return metadata;
}

@Override
public VariantValue value() {
return value;
}

@Override
public String toString() {
return "Variant(metadata=" + metadata + ", value=" + value + ")";
}
};
}

private Type toParquetSchema(VariantValue value) {
return VariantVisitor.visit(value, new ParquetSchemaProducer());
}
Expand Down

0 comments on commit f3e3ccc

Please sign in to comment.