Skip to content

Commit

Permalink
Rename Encoder to KeyEncoder
Browse files Browse the repository at this point in the history
  • Loading branch information
regadas committed Jan 25, 2024
1 parent d1cf55e commit 43411f9
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ public abstract class BucketMetadata<K1, K2, V> implements Serializable, HasDisp

@JsonIgnore private final Coder<K1> keyCoder;

@JsonIgnore private final Supplier<Encoder<K1>> primaryKeyEncoder;
@JsonIgnore private final Supplier<Encoder<K2>> secondaryKeyEncoder;
@JsonIgnore private final Supplier<KeyEncoder<K1>> primaryKeyEncoder;
@JsonIgnore private final Supplier<KeyEncoder<K2>> secondaryKeyEncoder;

@JsonIgnore private final Coder<K2> keyCoderSecondary;

Expand Down Expand Up @@ -239,10 +239,10 @@ static BucketIdFn icebergFn() {
}
}

public interface Encoder<T> extends Serializable {
public interface KeyEncoder<T> extends Serializable {
byte[] encode(T value, Coder<T> coder);

static <T> Encoder<T> defaultEncoder() {
static <T> KeyEncoder<T> defaultEncoder() {
return (value, coder) -> {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
Expand All @@ -254,7 +254,7 @@ static <T> Encoder<T> defaultEncoder() {
};
}

static <T> Encoder<T> icebergEncoder(Class<T> klass) {
static <T> KeyEncoder<T> icebergEncoder(Class<T> klass) {
return IcebergEncoder.create(klass);
}
}
Expand Down Expand Up @@ -285,8 +285,8 @@ public BucketIdFn bucketIdFn() {
}

@Override
public <T> Encoder<T> encoder(Class<T> klass) {
return Encoder.icebergEncoder(klass);
public <T> KeyEncoder<T> encoder(Class<T> klass) {
return KeyEncoder.icebergEncoder(klass);
}
};

Expand All @@ -296,8 +296,8 @@ public BucketIdFn bucketIdFn() {
return BucketIdFn.defaultFn();
}

public <T> Encoder<T> encoder(Class<T> klass) {
return Encoder.defaultEncoder();
public <T> KeyEncoder<T> encoder(Class<T> klass) {
return KeyEncoder.defaultEncoder();
}
}

Expand Down Expand Up @@ -478,7 +478,7 @@ static BucketIdFnSupplier create(String hashType) {
}

@FunctionalInterface
interface EncoderSupplier<T> extends Supplier<Encoder<T>>, Serializable {
interface EncoderSupplier<T> extends Supplier<KeyEncoder<T>>, Serializable {
static <T> EncoderSupplier<T> create(String hashType, Class<T> klass) {
return () -> HashType.valueOf(hashType).encoder(klass);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private static byte[] encode(BigDecimal value) {
return value.unscaledValue().toByteArray();
}

public static <T> BucketMetadata.Encoder<T> create(Class<T> klass) {
public static <T> BucketMetadata.KeyEncoder<T> create(Class<T> klass) {
if (klass.equals(Integer.class)) {
return (value, coder) -> encode((Integer) value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,39 +37,39 @@ public void shouldHashValuesAsDescribedInSpec() {
// https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements
BucketMetadata.HashType hashType = BucketMetadata.HashType.ICEBERG;
HashFunction hasher = hashType.create();
BucketMetadata.Encoder<Integer> integerEncoder = hashType.encoder(Integer.class);
BucketMetadata.Encoder<Long> longEncoder = hashType.encoder(Long.class);
BucketMetadata.Encoder<BigDecimal> decimalEncoder = hashType.encoder(BigDecimal.class);
BucketMetadata.Encoder<LocalDate> dateEncoder = hashType.encoder(LocalDate.class);
BucketMetadata.Encoder<LocalTime> timeEncoder = hashType.encoder(LocalTime.class);
BucketMetadata.Encoder<LocalDateTime> dateTimeEncoder = hashType.encoder(LocalDateTime.class);
BucketMetadata.Encoder<ZonedDateTime> zonedDateTimeEncoder =
BucketMetadata.KeyEncoder<Integer> integerKeyEncoder = hashType.encoder(Integer.class);
BucketMetadata.KeyEncoder<Long> longKeyEncoder = hashType.encoder(Long.class);
BucketMetadata.KeyEncoder<BigDecimal> decimalKeyEncoder = hashType.encoder(BigDecimal.class);
BucketMetadata.KeyEncoder<LocalDate> dateKeyEncoder = hashType.encoder(LocalDate.class);
BucketMetadata.KeyEncoder<LocalTime> timeKeyEncoder = hashType.encoder(LocalTime.class);
BucketMetadata.KeyEncoder<LocalDateTime> dateTimeKeyEncoder = hashType.encoder(LocalDateTime.class);
BucketMetadata.KeyEncoder<ZonedDateTime> zonedDateTimeKeyEncoder =
hashType.encoder(ZonedDateTime.class);
BucketMetadata.Encoder<Instant> instantEncoder = hashType.encoder(Instant.class);
BucketMetadata.Encoder<String> stringEncoder = hashType.encoder(String.class);
BucketMetadata.Encoder<UUID> uuidEncoder = hashType.encoder(UUID.class);
BucketMetadata.Encoder<byte[]> bytesEncoder = hashType.encoder(byte[].class);
BucketMetadata.KeyEncoder<Instant> instantKeyEncoder = hashType.encoder(Instant.class);
BucketMetadata.KeyEncoder<String> stringKeyEncoder = hashType.encoder(String.class);
BucketMetadata.KeyEncoder<UUID> uuidKeyEncoder = hashType.encoder(UUID.class);
BucketMetadata.KeyEncoder<byte[]> bytesKeyEncoder = hashType.encoder(byte[].class);

assertEquals(2017239379, hasher.hashBytes(integerEncoder.encode(34, null)).asInt());
assertEquals(2017239379, hasher.hashBytes(longEncoder.encode(34L, null)).asInt());
assertEquals(2017239379, hasher.hashBytes(integerKeyEncoder.encode(34, null)).asInt());
assertEquals(2017239379, hasher.hashBytes(longKeyEncoder.encode(34L, null)).asInt());
assertEquals(
-500754589, hasher.hashBytes(decimalEncoder.encode(new BigDecimal("14.20"), null)).asInt());
-500754589, hasher.hashBytes(decimalKeyEncoder.encode(new BigDecimal("14.20"), null)).asInt());
assertEquals(
-653330422, hasher.hashBytes(dateEncoder.encode(LocalDate.of(2017, 11, 16), null)).asInt());
-653330422, hasher.hashBytes(dateKeyEncoder.encode(LocalDate.of(2017, 11, 16), null)).asInt());
assertEquals(
-662762989, hasher.hashBytes(timeEncoder.encode(LocalTime.of(22, 31, 8), null)).asInt());
-662762989, hasher.hashBytes(timeKeyEncoder.encode(LocalTime.of(22, 31, 8), null)).asInt());
assertEquals(
-2047944441,
hasher
.hashBytes(
dateTimeEncoder.encode(
dateTimeKeyEncoder.encode(
LocalDateTime.of(LocalDate.of(2017, 11, 16), LocalTime.of(22, 31, 8)), null))
.asInt());
assertEquals(
-2047944441,
hasher
.hashBytes(
zonedDateTimeEncoder.encode(
zonedDateTimeKeyEncoder.encode(
ZonedDateTime.of(
LocalDate.of(2017, 11, 16),
LocalTime.of(14, 31, 8),
Expand All @@ -80,23 +80,23 @@ public void shouldHashValuesAsDescribedInSpec() {
-2047944441,
hasher
.hashBytes(
instantEncoder.encode(
instantKeyEncoder.encode(
ZonedDateTime.of(
LocalDate.of(2017, 11, 16),
LocalTime.of(14, 31, 8),
ZoneOffset.ofHours(-8))
.toInstant(),
null))
.asInt());
assertEquals(1210000089, hasher.hashBytes(stringEncoder.encode("iceberg", null)).asInt());
assertEquals(1210000089, hasher.hashBytes(stringKeyEncoder.encode("iceberg", null)).asInt());
assertEquals(
1488055340,
hasher
.hashBytes(
uuidEncoder.encode(UUID.fromString("f79c3e09-677c-4bbd-a479-3f349cb785e7"), null))
uuidKeyEncoder.encode(UUID.fromString("f79c3e09-677c-4bbd-a479-3f349cb785e7"), null))
.asInt());
assertEquals(
-188683207, hasher.hashBytes(bytesEncoder.encode(new byte[] {0, 1, 2, 3}, null)).asInt());
-188683207, hasher.hashBytes(bytesKeyEncoder.encode(new byte[] {0, 1, 2, 3}, null)).asInt());
}

@Test
Expand Down

0 comments on commit 43411f9

Please sign in to comment.