You are viewing a plain text version of this content. The canonical link for it is here.
Posted to gitbox@hive.apache.org by GitBox <gi...@apache.org> on 2020/07/09 14:40:41 UTC

[GitHub] [hive] belugabehr commented on a change in pull request #1229: HIVE-23818: Use String Switch-Case Statement in StatUtills

belugabehr commented on a change in pull request #1229:
URL: https://github.com/apache/hive/pull/1229#discussion_r452268372



##########
File path: ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
##########
@@ -1252,78 +1254,88 @@ public static long getSizeOfComplexTypes(HiveConf conf, ObjectInspector oi) {
   }
 
   /**
-   * Get size of fixed length primitives
-   * @param colType
-   *          - column type
+   * Get size of fixed length primitives.
+   *
+   * @param colType column type
    * @return raw data size
+   * @throws NullPointerException if colType is {@code null}
    */
-  public static long getAvgColLenOfFixedLengthTypes(String colType) {
-    String colTypeLowerCase = colType.toLowerCase();
-    if (colTypeLowerCase.equals(serdeConstants.TINYINT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.SMALLINT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.INT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.VOID_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.BOOLEAN_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.FLOAT_TYPE_NAME)) {
+  public static long getAvgColLenOfFixedLengthTypes(final String colType) {
+    String colTypeLowerCase = Objects.requireNonNull(colType).toLowerCase();
+    switch (colTypeLowerCase) {
+    case serdeConstants.TINYINT_TYPE_NAME:
+    case serdeConstants.SMALLINT_TYPE_NAME:
+    case serdeConstants.INT_TYPE_NAME:
+    case serdeConstants.VOID_TYPE_NAME:
+    case serdeConstants.BOOLEAN_TYPE_NAME:
+    case serdeConstants.FLOAT_TYPE_NAME:
       return JavaDataModel.get().primitive1();
-    } else if (colTypeLowerCase.equals(serdeConstants.DOUBLE_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.BIGINT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.INTERVAL_YEAR_MONTH_TYPE_NAME)
-        || colTypeLowerCase.equals("long")) {
+    case serdeConstants.DOUBLE_TYPE_NAME:
+    case serdeConstants.BIGINT_TYPE_NAME:
+    case serdeConstants.INTERVAL_YEAR_MONTH_TYPE_NAME:
+    case "long":
       return JavaDataModel.get().primitive2();
-    } else if (colTypeLowerCase.equals(serdeConstants.TIMESTAMP_TYPE_NAME) ||
-        colTypeLowerCase.equals(serdeConstants.TIMESTAMPLOCALTZ_TYPE_NAME)) {
+    case serdeConstants.TIMESTAMP_TYPE_NAME:
+    case serdeConstants.TIMESTAMPLOCALTZ_TYPE_NAME:
       return JavaDataModel.get().lengthOfTimestamp();
-    } else if (colTypeLowerCase.equals(serdeConstants.DATE_TYPE_NAME)) {
+    case serdeConstants.DATE_TYPE_NAME:
       return JavaDataModel.get().lengthOfDate();
-    } else if (colTypeLowerCase.startsWith(serdeConstants.DECIMAL_TYPE_NAME)) {
+    case serdeConstants.DECIMAL_TYPE_NAME:
       return JavaDataModel.get().lengthOfDecimal();
-    } else if (colTypeLowerCase.equals(serdeConstants.INTERVAL_DAY_TIME_TYPE_NAME)) {
+    case serdeConstants.INTERVAL_DAY_TIME_TYPE_NAME:
       return JavaDataModel.JAVA32_META;
-    } else {
-      //TODO: support complex types
+    default:
+      // TODO: support complex types
       // for complex type we simply return 0
       return 0;
     }
   }
 
   /**
-   * Get the size of arrays of primitive types
+   * Get the size of arrays of primitive types.
+   *
+   * @param colType The column type
+   * @param length The length of the column type
+   * @param maxLength The maximum length of the field
    * @return raw data size
+   * @throws NullPointerException if colType is {@code null}
    */
-  public static long getSizeOfPrimitiveTypeArraysFromType(String colType, int length, HiveConf conf) {
-    String colTypeLowerCase = colType.toLowerCase();
-    if (colTypeLowerCase.equals(serdeConstants.TINYINT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.SMALLINT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.INT_TYPE_NAME)
-        || colTypeLowerCase.equals(serdeConstants.FLOAT_TYPE_NAME)) {
+  public static long getSizeOfPrimitiveTypeArraysFromType(final String colType, final int length, final int maxLength) {
+    String colTypeLowerCase = Objects.requireNonNull(colType).toLowerCase();
+    if (colTypeLowerCase.startsWith(serdeConstants.VARCHAR_TYPE_NAME)
+        || colTypeLowerCase.startsWith(serdeConstants.CHAR_TYPE_NAME)) {
+      int charTypeLen = JavaDataModel.get().lengthForStringOfLength(maxLength);
+      return JavaDataModel.get().lengthForPrimitiveArrayOfSize(charTypeLen, length);
+    }
+    switch (colTypeLowerCase) {
+    case serdeConstants.TINYINT_TYPE_NAME:
+    case serdeConstants.SMALLINT_TYPE_NAME:
+    case serdeConstants.INT_TYPE_NAME:
+    case serdeConstants.FLOAT_TYPE_NAME:
       return JavaDataModel.get().lengthForIntArrayOfSize(length);
-    } else if (colTypeLowerCase.equals(serdeConstants.DOUBLE_TYPE_NAME)) {
+    case serdeConstants.DOUBLE_TYPE_NAME:
       return JavaDataModel.get().lengthForDoubleArrayOfSize(length);
-    } else if (colTypeLowerCase.equals(serdeConstants.BIGINT_TYPE_NAME)
-        || colTypeLowerCase.equals("long")) {
+    case serdeConstants.BIGINT_TYPE_NAME:
+    case "long":

Review comment:
       Since this JIRA is about using the switch / clean up, I don't really want to change any behaviors.  Can you please open a JIRA to explore this?




----------------------------------------------------------------
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.

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



---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscribe@hive.apache.org
For additional commands, e-mail: gitbox-help@hive.apache.org