mwong38 commented on a change in pull request #900:
URL: https://github.com/apache/parquet-mr/pull/900#discussion_r830942166



##########
File path: 
parquet-protobuf/src/main/java/org/apache/parquet/proto/ProtoMessageConverter.java
##########
@@ -427,6 +485,218 @@ public void addBinary(Binary binary) {
 
   }
 
+  final class ProtoTimestampConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+    final LogicalTypeAnnotation.TimestampLogicalTypeAnnotation 
logicalTypeAnnotation;
+
+    public ProtoTimestampConverter(ParentValueContainer parent, 
LogicalTypeAnnotation.TimestampLogicalTypeAnnotation logicalTypeAnnotation) {
+      this.parent = parent;
+      this.logicalTypeAnnotation = logicalTypeAnnotation;
+    }
+
+    @Override
+    public void addLong(long value) {
+      switch (logicalTypeAnnotation.getUnit()) {
+        case MICROS:
+          parent.add(Timestamps.fromMicros(value));
+          break;
+        case MILLIS:
+          parent.add(Timestamps.fromMillis(value));
+          break;
+        case NANOS:
+          parent.add(Timestamps.fromNanos(value));
+          break;
+      }
+    }
+  }
+
+  final class ProtoDateConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoDateConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addInt(int value) {
+      LocalDate localDate = LocalDate.ofEpochDay(value);
+      com.google.type.Date date = com.google.type.Date.newBuilder()
+        .setYear(localDate.getYear())
+        .setMonth(localDate.getMonthValue())
+        .setDay(localDate.getDayOfMonth())
+        .build();
+      parent.add(date);
+    }
+  }
+
+  final class ProtoTimeConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+    final LogicalTypeAnnotation.TimeLogicalTypeAnnotation 
logicalTypeAnnotation;
+
+    public ProtoTimeConverter(ParentValueContainer parent, 
LogicalTypeAnnotation.TimeLogicalTypeAnnotation logicalTypeAnnotation) {
+      this.parent = parent;
+      this.logicalTypeAnnotation = logicalTypeAnnotation;
+    }
+
+    @Override
+    public void addLong(long value) {
+      LocalTime localTime;
+      switch (logicalTypeAnnotation.getUnit()) {
+        case MILLIS:
+          localTime = LocalTime.ofNanoOfDay(value * 1_000_000);
+          break;
+        case MICROS:
+          localTime = LocalTime.ofNanoOfDay(value * 1_000);
+          break;
+        case NANOS:
+          localTime = LocalTime.ofNanoOfDay(value);
+          break;
+        default:
+          throw new IllegalArgumentException("Unrecognized TimeUnit: " + 
logicalTypeAnnotation.getUnit());
+      }
+      com.google.type.TimeOfDay timeOfDay = 
com.google.type.TimeOfDay.newBuilder()
+        .setHours(localTime.getHour())
+        .setMinutes(localTime.getMinute())
+        .setSeconds(localTime.getSecond())
+        .setNanos(localTime.getNano())
+        .build();
+      parent.add(timeOfDay);
+    }
+  }
+
+  final class ProtoDoubleValueConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoDoubleValueConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addDouble(double value) {
+      parent.add(DoubleValue.of(value));
+    }
+  }
+
+  final class ProtoFloatValueConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoFloatValueConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addFloat(float value) {
+      parent.add(FloatValue.of(value));
+    }
+  }
+
+  final class ProtoInt64ValueConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoInt64ValueConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addLong(long value) {
+      parent.add(Int64Value.of(value));
+    }
+  }
+
+  final class ProtoUInt64ValueConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoUInt64ValueConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addLong(long value) {
+      parent.add(UInt64Value.of(value));
+    }
+  }
+
+  final class ProtoInt32ValueConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoInt32ValueConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addInt(int value) {
+      parent.add(Int32Value.of(value));
+    }
+  }
+
+  final class ProtoUInt32ValueConverter extends PrimitiveConverter {
+
+    final ParentValueContainer parent;
+
+    public ProtoUInt32ValueConverter(ParentValueContainer parent) {
+      this.parent = parent;
+    }
+
+    @Override
+    public void addLong(long value) {
+      parent.add(UInt32Value.of((int) value));

Review comment:
       Good idea




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@parquet.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to