You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by xu...@apache.org on 2017/11/29 04:23:35 UTC

[beam] 01/02: [BEAM-3238][SQL] Move Coders to map in BeamRecordSqlType

This is an automated email from the ASF dual-hosted git repository.

xumingming pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git

commit e2c3de092b0a7a5bbfcb5b7797984d5f4bd10138
Author: Anton Kedin <ke...@google.com>
AuthorDate: Wed Nov 22 16:04:05 2017 -0800

    [BEAM-3238][SQL] Move Coders to map in BeamRecordSqlType
    
    Improve readability. All coders are supposed to be thread safe and
    currently are backed by the static instances.
---
 .../beam/sdk/extensions/sql/BeamRecordSqlType.java | 111 +++++++++------------
 1 file changed, 47 insertions(+), 64 deletions(-)

diff --git a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/BeamRecordSqlType.java b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/BeamRecordSqlType.java
index 982494a..1784ec1 100644
--- a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/BeamRecordSqlType.java
+++ b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/BeamRecordSqlType.java
@@ -17,13 +17,13 @@
  */
 package org.apache.beam.sdk.extensions.sql;
 
+import com.google.common.collect.ImmutableMap;
 import java.math.BigDecimal;
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.GregorianCalendar;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.beam.sdk.coders.BigDecimalCoder;
@@ -50,26 +50,39 @@ import org.apache.beam.sdk.values.BeamRecordType;
  *
  */
 public class BeamRecordSqlType extends BeamRecordType {
-  private static final Map<Integer, Class> SQL_TYPE_TO_JAVA_CLASS = new HashMap<>();
-  static {
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.TINYINT, Byte.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.SMALLINT, Short.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.INTEGER, Integer.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.BIGINT, Long.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.FLOAT, Float.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.DOUBLE, Double.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.DECIMAL, BigDecimal.class);
-
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.BOOLEAN, Boolean.class);
-
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.CHAR, String.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.VARCHAR, String.class);
-
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.TIME, GregorianCalendar.class);
-
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.DATE, Date.class);
-    SQL_TYPE_TO_JAVA_CLASS.put(Types.TIMESTAMP, Date.class);
-  }
+  private static final Map<Integer, Class> JAVA_CLASSES = ImmutableMap
+      .<Integer, Class>builder()
+      .put(Types.TINYINT, Byte.class)
+      .put(Types.SMALLINT, Short.class)
+      .put(Types.INTEGER, Integer.class)
+      .put(Types.BIGINT, Long.class)
+      .put(Types.FLOAT, Float.class)
+      .put(Types.DOUBLE, Double.class)
+      .put(Types.DECIMAL, BigDecimal.class)
+      .put(Types.BOOLEAN, Boolean.class)
+      .put(Types.CHAR, String.class)
+      .put(Types.VARCHAR, String.class)
+      .put(Types.TIME, GregorianCalendar.class)
+      .put(Types.DATE, Date.class)
+      .put(Types.TIMESTAMP, Date.class)
+      .build();
+
+  private static final Map<Integer, Coder> CODERS = ImmutableMap
+      .<Integer, Coder>builder()
+      .put(Types.TINYINT, ByteCoder.of())
+      .put(Types.SMALLINT, ShortCoder.of())
+      .put(Types.INTEGER, BigEndianIntegerCoder.of())
+      .put(Types.BIGINT, BigEndianLongCoder.of())
+      .put(Types.FLOAT, FloatCoder.of())
+      .put(Types.DOUBLE, DoubleCoder.of())
+      .put(Types.DECIMAL, BigDecimalCoder.of())
+      .put(Types.BOOLEAN, BooleanCoder.of())
+      .put(Types.CHAR, StringUtf8Coder.of())
+      .put(Types.VARCHAR, StringUtf8Coder.of())
+      .put(Types.TIME, TimeCoder.of())
+      .put(Types.DATE, DateCoder.of())
+      .put(Types.TIMESTAMP, DateCoder.of())
+      .build();
 
   public List<Integer> fieldTypes;
 
@@ -84,54 +97,24 @@ public class BeamRecordSqlType extends BeamRecordType {
   }
 
   public static BeamRecordSqlType create(List<String> fieldNames,
-      List<Integer> fieldTypes) {
+                                         List<Integer> fieldTypes) {
     if (fieldNames.size() != fieldTypes.size()) {
       throw new IllegalStateException("the sizes of 'dataType' and 'fieldTypes' must match.");
     }
+
     List<Coder> fieldCoders = new ArrayList<>(fieldTypes.size());
+
     for (int idx = 0; idx < fieldTypes.size(); ++idx) {
-      switch (fieldTypes.get(idx)) {
-      case Types.INTEGER:
-        fieldCoders.add(BigEndianIntegerCoder.of());
-        break;
-      case Types.SMALLINT:
-        fieldCoders.add(ShortCoder.of());
-        break;
-      case Types.TINYINT:
-        fieldCoders.add(ByteCoder.of());
-        break;
-      case Types.DOUBLE:
-        fieldCoders.add(DoubleCoder.of());
-        break;
-      case Types.FLOAT:
-        fieldCoders.add(FloatCoder.of());
-        break;
-      case Types.DECIMAL:
-        fieldCoders.add(BigDecimalCoder.of());
-        break;
-      case Types.BIGINT:
-        fieldCoders.add(BigEndianLongCoder.of());
-        break;
-      case Types.VARCHAR:
-      case Types.CHAR:
-        fieldCoders.add(StringUtf8Coder.of());
-        break;
-      case Types.TIME:
-        fieldCoders.add(TimeCoder.of());
-        break;
-      case Types.DATE:
-      case Types.TIMESTAMP:
-        fieldCoders.add(DateCoder.of());
-        break;
-      case Types.BOOLEAN:
-        fieldCoders.add(BooleanCoder.of());
-        break;
-
-      default:
-        throw new UnsupportedOperationException(
-            "Data type: " + fieldTypes.get(idx) + " not supported yet!");
+      Integer fieldType = fieldTypes.get(idx);
+
+      if (!CODERS.containsKey(fieldType)) {
+          throw new UnsupportedOperationException(
+              "Data type: " + fieldType + " not supported yet!");
       }
+
+      fieldCoders.add(CODERS.get(fieldType));
     }
+
     return new BeamRecordSqlType(fieldNames, fieldTypes, fieldCoders);
   }
 
@@ -142,7 +125,7 @@ public class BeamRecordSqlType extends BeamRecordType {
     }
 
     int fieldType = fieldTypes.get(index);
-    Class javaClazz = SQL_TYPE_TO_JAVA_CLASS.get(fieldType);
+    Class javaClazz = JAVA_CLASSES.get(fieldType);
     if (javaClazz == null) {
       throw new IllegalArgumentException("Data type: " + fieldType + " not supported yet!");
     }
@@ -159,7 +142,7 @@ public class BeamRecordSqlType extends BeamRecordType {
     return Collections.unmodifiableList(fieldTypes);
   }
 
-  public Integer getFieldTypeByIndex(int index){
+  public Integer getFieldTypeByIndex(int index) {
     return fieldTypes.get(index);
   }
 

-- 
To stop receiving notification emails like this one, please contact
"commits@beam.apache.org" <co...@beam.apache.org>.