Skip to content

Commit

Permalink
Moved common logic to method in TypeInfos
Browse files Browse the repository at this point in the history
  • Loading branch information
malhotrashivam committed Nov 10, 2023
1 parent 9932f33 commit 257da90
Showing 1 changed file with 26 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class dataType) {
return type(PrimitiveTypeName.BINARY, required, repeating)
.as(LogicalTypeAnnotation.decimalType(precisionAndScale.scale, precisionAndScale.precision));
}
Expand Down Expand Up @@ -195,10 +192,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.INT32, required, repeating).as(LogicalTypeAnnotation.intType(32, true));
}
}
Expand All @@ -215,10 +209,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.INT64, required, repeating);
}
}
Expand All @@ -235,10 +226,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.INT32, required, repeating).as(LogicalTypeAnnotation.intType(16, true));
}
}
Expand All @@ -255,10 +243,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.BOOLEAN, required, repeating);
}
}
Expand All @@ -275,10 +260,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.FLOAT, required, repeating);
}
}
Expand All @@ -295,10 +277,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.DOUBLE, required, repeating);
}
}
Expand All @@ -315,10 +294,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.INT32, required, repeating).as(LogicalTypeAnnotation.intType(16, false));
}
}
Expand All @@ -335,10 +311,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.INT32, required, repeating).as(LogicalTypeAnnotation.intType(8, true));
}
}
Expand All @@ -354,10 +327,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.BINARY, required, repeating)
.as(LogicalTypeAnnotation.stringType());
}
Expand All @@ -374,10 +344,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
// Write instants as Parquet TIMESTAMP(isAdjustedToUTC = true, unit = NANOS)
return type(PrimitiveTypeName.INT64, required, repeating)
.as(LogicalTypeAnnotation.timestampType(true, LogicalTypeAnnotation.TimeUnit.NANOS));
Expand All @@ -395,10 +362,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
// Write LocalDateTime as Parquet TIMESTAMP(isAdjustedToUTC = false, unit = NANOS)
return type(PrimitiveTypeName.INT64, required, repeating)
.as(LogicalTypeAnnotation.timestampType(false, LogicalTypeAnnotation.TimeUnit.NANOS));
Expand All @@ -416,10 +380,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.INT32, required, repeating)
.as(LogicalTypeAnnotation.dateType());
}
Expand All @@ -436,10 +397,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
// Always write in (isAdjustedToUTC = true, unit = NANOS) format
return type(PrimitiveTypeName.INT64, required, repeating)
.as(LogicalTypeAnnotation.timeType(true, LogicalTypeAnnotation.TimeUnit.NANOS));
Expand All @@ -463,7 +421,7 @@ public Set<Class<?>> getTypes() {
}

@Override
public PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
public PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
return type(PrimitiveTypeName.BINARY, required, repeating)
.as(LogicalTypeAnnotation.decimalType(0, 1));
}
Expand All @@ -478,6 +436,17 @@ default boolean isValidFor(Class<?> clazz) {
return getTypes().contains(clazz);
}

default PrimitiveBuilder<PrimitiveType> getBuilderImpl(boolean required, boolean repeating, Class<?> dataType) {
throw new UnsupportedOperationException("Implement this method if using the default getBuilder()");
}

default PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType) {
if (!isValidFor(dataType)) {
throw new IllegalArgumentException("Invalid data type " + dataType);
}
return getBuilderImpl(required, repeating, dataType);
}

default Type createSchemaType(
@NotNull final ColumnDefinition<?> columnDefinition,
@NotNull final ParquetInstructions instructions) {
Expand Down Expand Up @@ -510,8 +479,6 @@ default Type createSchemaType(
builder.named("item")).named(parquetColumnName))
.as(LogicalTypeAnnotation.listType()).named(parquetColumnName);
}

PrimitiveBuilder<PrimitiveType> getBuilder(boolean required, boolean repeating, Class<?> dataType);
}

private static class CodecType<T> implements TypeInfo {
Expand Down

0 comments on commit 257da90

Please sign in to comment.