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

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


The following commit(s) were added to refs/heads/master by this push:
     new f0289f3cb IMPALA-11273: Remove APIs deprecated in Java 11
f0289f3cb is described below

commit f0289f3cbb54ed4f1839d8dbe1be963a80082628
Author: Michael Smith <[email protected]>
AuthorDate: Mon Apr 10 16:42:23 2023 -0700

    IMPALA-11273: Remove APIs deprecated in Java 11
    
    Replaces constructor calls for object versions of primitives - Integer,
    Long, Float, Double, Boolean - with optimized valueOf calls as using
    constructors for these is deprecated according to jdeprscan.
    
    Removes override of finalize. Use of finalize is deprecated, and
    hive-udf-call.cc ensures we always call close when unloading the UDF.
    Adds try-with-resources to UdfExecutorTest to handle test cleanup.
    
    Updates BigDecimal.setScale to use RoundingMode.
    
    Change-Id: Idfb053223b6e098e6032502f873361696dd2da84
    Reviewed-on: http://gerrit.cloudera.org:8080/19721
    Reviewed-by: Impala Public Jenkins <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 .../org/apache/impala/analysis/NumericLiteral.java |  5 +-
 .../org/apache/impala/analysis/OrderByElement.java |  2 +-
 .../org/apache/impala/analysis/SelectStmt.java     |  4 +-
 .../org/apache/impala/catalog/ColumnStats.java     | 24 ++++----
 .../apache/impala/hive/executor/UdfExecutor.java   |  7 +--
 .../org/apache/impala/planner/AnalyticPlanner.java |  8 +--
 .../apache/impala/planner/SingleNodePlanner.java   |  6 +-
 .../java/org/apache/impala/service/Frontend.java   |  2 +-
 fe/src/main/jflex/sql-scanner.flex                 |  8 +--
 .../impala/hive/executor/UdfExecutorTest.java      | 67 +++++++++++-----------
 .../datagenerator/RandomNestedDataGenerator.java   | 14 ++---
 11 files changed, 72 insertions(+), 75 deletions(-)

diff --git a/fe/src/main/java/org/apache/impala/analysis/NumericLiteral.java 
b/fe/src/main/java/org/apache/impala/analysis/NumericLiteral.java
index 3725df151..59daf977c 100644
--- a/fe/src/main/java/org/apache/impala/analysis/NumericLiteral.java
+++ b/fe/src/main/java/org/apache/impala/analysis/NumericLiteral.java
@@ -19,6 +19,7 @@ package org.apache.impala.analysis;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.RoundingMode;
 
 import org.apache.impala.catalog.ScalarType;
 import org.apache.impala.catalog.Type;
@@ -429,7 +430,7 @@ public class NumericLiteral extends LiteralExpr {
 
     // If cast to an integer type, round the fractional part.
     if (targetType.isIntegerType() && value.scale() != 0) {
-      return value.setScale(0, BigDecimal.ROUND_HALF_UP);
+      return value.setScale(0, RoundingMode.HALF_UP);
     }
 
     // If non-decimal (integer or float), use the existing value.
@@ -447,7 +448,7 @@ public class NumericLiteral extends LiteralExpr {
 
     // Truncate (round) extra digits if necessary.
     if (value.scale() > decimalType.decimalScale()) {
-      return value.setScale(decimalType.decimalScale(), 
BigDecimal.ROUND_HALF_UP);
+      return value.setScale(decimalType.decimalScale(), RoundingMode.HALF_UP);
     }
 
     // Existing value fits, use it.
diff --git a/fe/src/main/java/org/apache/impala/analysis/OrderByElement.java 
b/fe/src/main/java/org/apache/impala/analysis/OrderByElement.java
index 61eb6de4e..15eb441b0 100644
--- a/fe/src/main/java/org/apache/impala/analysis/OrderByElement.java
+++ b/fe/src/main/java/org/apache/impala/analysis/OrderByElement.java
@@ -53,7 +53,7 @@ public class OrderByElement {
     expr_ = other.expr_.clone();
     isAsc_ = other.isAsc_;
     if (other.nullsFirstParam_ != null) {
-      nullsFirstParam_ = new Boolean(other.nullsFirstParam_.booleanValue());
+      nullsFirstParam_ = 
Boolean.valueOf(other.nullsFirstParam_.booleanValue());
     } else {
       nullsFirstParam_ = null;
     }
diff --git a/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java 
b/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
index daa3ca937..1b530473b 100644
--- a/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
+++ b/fe/src/main/java/org/apache/impala/analysis/SelectStmt.java
@@ -184,12 +184,12 @@ public class SelectStmt extends QueryStmt {
         return null;
       }
       if (hasLimit()) {
-        return new Pair<>(new Boolean(true), getLimit());
+        return new Pair<>(Boolean.valueOf(true), getLimit());
       } else {
         // even if this SELECT statement does not have a LIMIT, it is a
         // simple select which may be an inline view and eligible for a
         // limit pushdown from an outer block, so we return a non-null value
-        return new Pair<>(new Boolean(false), null);
+        return new Pair<>(Boolean.valueOf(false), null);
       }
     }
     return null;
diff --git a/fe/src/main/java/org/apache/impala/catalog/ColumnStats.java 
b/fe/src/main/java/org/apache/impala/catalog/ColumnStats.java
index fb5fb6b02..b0cee02ae 100644
--- a/fe/src/main/java/org/apache/impala/catalog/ColumnStats.java
+++ b/fe/src/main/java/org/apache/impala/catalog/ColumnStats.java
@@ -423,7 +423,7 @@ public class ColumnStats {
     if (!longStats.isSetLowValue()) {
       lowValue_ = null;
     } else {
-      Long value = new Long(longStats.getLowValue());
+      Long value = Long.valueOf(longStats.getLowValue());
       lowValue_ = new TColumnValue();
       switch (type) {
         case TINYINT:
@@ -451,7 +451,7 @@ public class ColumnStats {
     if (!longStats.isSetHighValue()) {
       highValue_ = null;
     } else {
-      Long value = new Long(longStats.getHighValue());
+      Long value = Long.valueOf(longStats.getHighValue());
       highValue_ = new TColumnValue();
       switch (type) {
         case TINYINT:
@@ -766,10 +766,10 @@ public class ColumnStats {
           Long lowValue = null;
           Long highValue = null;
           if (isLowValueSet && colStats.low_value.isSetByte_val()) {
-            lowValue = new Long(colStats.low_value.getByte_val());
+            lowValue = Long.valueOf(colStats.low_value.getByte_val());
           }
           if (isHighValueSet && colStats.high_value.isSetByte_val()) {
-            highValue = new Long(colStats.high_value.getByte_val());
+            highValue = Long.valueOf(colStats.high_value.getByte_val());
           }
           updateLowAndHighForHiveColumnStatsData(lowValue, highValue, 
longColStatsData);
           colStatsData.setLongStats(longColStatsData);
@@ -783,10 +783,10 @@ public class ColumnStats {
           Long lowValue = null;
           Long highValue = null;
           if (isLowValueSet && colStats.low_value.isSetShort_val()) {
-            lowValue = new Long(colStats.low_value.getShort_val());
+            lowValue = Long.valueOf(colStats.low_value.getShort_val());
           }
           if (isHighValueSet && colStats.high_value.isSetShort_val()) {
-            highValue = new Long(colStats.high_value.getShort_val());
+            highValue = Long.valueOf(colStats.high_value.getShort_val());
           }
           updateLowAndHighForHiveColumnStatsData(lowValue, highValue, 
longColStatsData);
 
@@ -801,10 +801,10 @@ public class ColumnStats {
           Long lowValue = null;
           Long highValue = null;
           if (isLowValueSet && colStats.low_value.isSetInt_val()) {
-            lowValue = new Long(colStats.low_value.getInt_val());
+            lowValue = Long.valueOf(colStats.low_value.getInt_val());
           }
           if (isHighValueSet && colStats.high_value.isSetInt_val()) {
-            highValue = new Long(colStats.high_value.getInt_val());
+            highValue = Long.valueOf(colStats.high_value.getInt_val());
           }
           updateLowAndHighForHiveColumnStatsData(lowValue, highValue, 
longColStatsData);
 
@@ -836,10 +836,10 @@ public class ColumnStats {
           Long lowValue = null;
           Long highValue = null;
           if (isLowValueSet && colStats.low_value.isSetLong_val()) {
-            lowValue = new Long(colStats.low_value.getLong_val());
+            lowValue = Long.valueOf(colStats.low_value.getLong_val());
           }
           if (isHighValueSet && colStats.high_value.isSetLong_val()) {
-            highValue = new Long(colStats.high_value.getLong_val());
+            highValue = Long.valueOf(colStats.high_value.getLong_val());
           }
           updateLowAndHighForHiveColumnStatsData(lowValue, highValue, 
longColStatsData);
 
@@ -858,10 +858,10 @@ public class ColumnStats {
           Double lowValue = null;
           Double highValue = null;
           if (isLowValueSet && colStats.low_value.isSetDouble_val()) {
-            lowValue = new Double(colStats.low_value.getDouble_val());
+            lowValue = Double.valueOf(colStats.low_value.getDouble_val());
           }
           if (isHighValueSet && colStats.high_value.isSetDouble_val()) {
-            highValue = new Double(colStats.high_value.getDouble_val());
+            highValue = Double.valueOf(colStats.high_value.getDouble_val());
           }
           updateLowAndHighForHiveColumnStatsData(lowValue, highValue, 
doubleColStatsData);
 
diff --git a/fe/src/main/java/org/apache/impala/hive/executor/UdfExecutor.java 
b/fe/src/main/java/org/apache/impala/hive/executor/UdfExecutor.java
index 61021696b..21c75078e 100644
--- a/fe/src/main/java/org/apache/impala/hive/executor/UdfExecutor.java
+++ b/fe/src/main/java/org/apache/impala/hive/executor/UdfExecutor.java
@@ -36,7 +36,7 @@ import org.apache.log4j.Logger;
 // See the comments in be/src/exprs/hive-udf-call.h for more details.
 // TODO: should we cache loaded jars and classes?
 @SuppressWarnings("restriction")
-public class UdfExecutor {
+public class UdfExecutor implements AutoCloseable {
   private static final Logger LOG = Logger.getLogger(UdfExecutor.class);
 
   private final static TBinaryProtocol.Factory PROTOCOL_FACTORY =
@@ -76,11 +76,6 @@ public class UdfExecutor {
   }
 
   @Override
-  protected void finalize() throws Throwable {
-    close();
-    super.finalize();
-  }
-
   public void close() {
     hiveUdfExecutor_.close();
     udfLoader_.close();
diff --git a/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java 
b/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
index 0fc8b333f..17b2d4e7f 100644
--- a/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
+++ b/fe/src/main/java/org/apache/impala/planner/AnalyticPlanner.java
@@ -402,10 +402,10 @@ public class AnalyticPlanner {
       List<Expr> sortExprs = Lists.newArrayList(partitionByExprs);
       // for PB exprs use ASC, NULLS LAST to match the behavior of the default
       // order-by and to ensure that limit pushdown works correctly
-      List<Boolean> isAsc =
-          Lists.newArrayList(Collections.nCopies(sortExprs.size(), new 
Boolean(true)));
-      List<Boolean> nullsFirst =
-          Lists.newArrayList(Collections.nCopies(sortExprs.size(), new 
Boolean(false)));
+      List<Boolean> isAsc = Lists.newArrayList(
+          Collections.nCopies(sortExprs.size(), Boolean.valueOf(true)));
+      List<Boolean> nullsFirst = Lists.newArrayList(
+          Collections.nCopies(sortExprs.size(), Boolean.valueOf(false)));
 
       // then sort on orderByExprs
       for (OrderByElement orderByElement: sortGroup.orderByElements) {
diff --git a/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java 
b/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java
index ebfbff32b..388d08094 100644
--- a/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java
+++ b/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java
@@ -493,7 +493,7 @@ public class SingleNodePlanner {
       if (plan.getCardinality() == -1) {
         // use 0 for the size to avoid it becoming the leftmost input
         // TODO: Consider raw size of scanned partitions in the absence of 
stats.
-        candidates.add(new Pair<TableRef, Long>(ref, new Long(0)));
+        candidates.add(new Pair<TableRef, Long>(ref, Long.valueOf(0)));
         if (LOG.isTraceEnabled()) {
           LOG.trace("candidate " + ref.getUniqueAlias() + ": 0");
         }
@@ -502,7 +502,7 @@ public class SingleNodePlanner {
       Preconditions.checkState(ref.isAnalyzed());
       long materializedSize =
           (long) Math.ceil(plan.getAvgRowSize() * (double) 
plan.getCardinality());
-      candidates.add(new Pair<TableRef, Long>(ref, new 
Long(materializedSize)));
+      candidates.add(new Pair<TableRef, Long>(ref, 
Long.valueOf(materializedSize)));
       if (LOG.isTraceEnabled()) {
         LOG.trace(
             "candidate " + ref.getUniqueAlias() + ": " + 
Long.toString(materializedSize));
@@ -1360,7 +1360,7 @@ public class SingleNodePlanner {
     // if the view already has a limit, we leave it as-is otherwise we
     // apply the outer limit
     if (viewStatus != null && !viewStatus.first) {
-      inlineViewRef.getAnalyzer().setSimpleLimitStatus(new Pair<>(new 
Boolean(true),
+      inlineViewRef.getAnalyzer().setSimpleLimitStatus(new 
Pair<>(Boolean.valueOf(true),
           outerStatus.second));
     }
   }
diff --git a/fe/src/main/java/org/apache/impala/service/Frontend.java 
b/fe/src/main/java/org/apache/impala/service/Frontend.java
index 01e568149..d51e34897 100644
--- a/fe/src/main/java/org/apache/impala/service/Frontend.java
+++ b/fe/src/main/java/org/apache/impala/service/Frontend.java
@@ -1098,7 +1098,7 @@ public class Frontend {
 
     @Override
     public Boolean call() throws Exception {
-      return new Boolean(isAccessibleToUser(dbName_, tblName_, owner_, user_));
+      return Boolean.valueOf(isAccessibleToUser(dbName_, tblName_, owner_, 
user_));
     }
   }
 
diff --git a/fe/src/main/jflex/sql-scanner.flex 
b/fe/src/main/jflex/sql-scanner.flex
index 418334be1..2102e0d1b 100644
--- a/fe/src/main/jflex/sql-scanner.flex
+++ b/fe/src/main/jflex/sql-scanner.flex
@@ -102,7 +102,7 @@ import org.apache.impala.thrift.TReservedWordsVersion;
     keywordMap.put("copy", SqlParserSymbols.KW_COPY);
     keywordMap.put("create", SqlParserSymbols.KW_CREATE);
     keywordMap.put("cross", SqlParserSymbols.KW_CROSS);
-    keywordMap.put("cube", new Integer(SqlParserSymbols.KW_CUBE));
+    keywordMap.put("cube", Integer.valueOf(SqlParserSymbols.KW_CUBE));
     keywordMap.put("current", SqlParserSymbols.KW_CURRENT);
     keywordMap.put("data", SqlParserSymbols.KW_DATA);
     keywordMap.put("database", SqlParserSymbols.KW_DATABASE);
@@ -149,7 +149,7 @@ import org.apache.impala.thrift.TReservedWordsVersion;
     keywordMap.put("functions", SqlParserSymbols.KW_FUNCTIONS);
     keywordMap.put("grant", SqlParserSymbols.KW_GRANT);
     keywordMap.put("group", SqlParserSymbols.KW_GROUP);
-    keywordMap.put("grouping", new Integer(SqlParserSymbols.KW_GROUPING));
+    keywordMap.put("grouping", Integer.valueOf(SqlParserSymbols.KW_GROUPING));
     keywordMap.put("hash", SqlParserSymbols.KW_HASH);
     keywordMap.put("having", SqlParserSymbols.KW_HAVING);
     keywordMap.put("hudiparquet", SqlParserSymbols.KW_HUDIPARQUET);
@@ -233,7 +233,7 @@ import org.apache.impala.thrift.TReservedWordsVersion;
     keywordMap.put("rlike", SqlParserSymbols.KW_RLIKE);
     keywordMap.put("role", SqlParserSymbols.KW_ROLE);
     keywordMap.put("roles", SqlParserSymbols.KW_ROLES);
-    keywordMap.put("rollup", new Integer(SqlParserSymbols.KW_ROLLUP));
+    keywordMap.put("rollup", Integer.valueOf(SqlParserSymbols.KW_ROLLUP));
     keywordMap.put("row", SqlParserSymbols.KW_ROW);
     keywordMap.put("rows", SqlParserSymbols.KW_ROWS);
     keywordMap.put("rwstorage", SqlParserSymbols.KW_RWSTORAGE);
@@ -245,7 +245,7 @@ import org.apache.impala.thrift.TReservedWordsVersion;
     keywordMap.put("serdeproperties", SqlParserSymbols.KW_SERDEPROPERTIES);
     keywordMap.put("serialize_fn", SqlParserSymbols.KW_SERIALIZE_FN);
     keywordMap.put("set", SqlParserSymbols.KW_SET);
-    keywordMap.put("sets", new Integer(SqlParserSymbols.KW_SETS));
+    keywordMap.put("sets", Integer.valueOf(SqlParserSymbols.KW_SETS));
     keywordMap.put("show", SqlParserSymbols.KW_SHOW);
     keywordMap.put("smallint", SqlParserSymbols.KW_SMALLINT);
     keywordMap.put("sort", SqlParserSymbols.KW_SORT);
diff --git 
a/fe/src/test/java/org/apache/impala/hive/executor/UdfExecutorTest.java 
b/fe/src/test/java/org/apache/impala/hive/executor/UdfExecutorTest.java
index 16f4debda..7756293c1 100644
--- a/fe/src/test/java/org/apache/impala/hive/executor/UdfExecutorTest.java
+++ b/fe/src/test/java/org/apache/impala/hive/executor/UdfExecutorTest.java
@@ -245,7 +245,7 @@ public class UdfExecutorTest {
     for (Object originalArg: originalArgs) {
       Preconditions.checkNotNull(originalArg);
       Type argType = getType(originalArg);
-      inputByteOffsets.add(new Integer(inputBufferSize));
+      inputByteOffsets.add(Integer.valueOf(inputBufferSize));
       inputBufferSize += argType.getSlotSize();
       argTypes.add(argType);
     }
@@ -277,43 +277,44 @@ public class UdfExecutorTest {
   void TestUdfImpl(String jarFile, Class<?> c, Object expectedValue,
       Type expectedType, boolean validate, Object[] originalArgs, Object[] 
args)
     throws ImpalaException, MalformedURLException, TException {
-    UdfExecutor e = createUdfExecutor(
-        jarFile, c.getName(), expectedType, originalArgs, args);
-    Method method = e.getMethod();
-    Object[] inputArgs = new Object[args.length];
-    for (int i = 0; i < args.length; ++i) {
-      validateArgType(args[i]);
-      if (args[i] != null && args[i] instanceof String) {
-        // For authoring the test, we'll just pass string and make the proper
-        // object here.
-        if (method != null && method.getParameterTypes()[i] == Text.class) {
-          inputArgs[i] = createText((String)args[i]);
+    try (UdfExecutor e = createUdfExecutor(
+        jarFile, c.getName(), expectedType, originalArgs, args)) {
+      Method method = e.getMethod();
+      Object[] inputArgs = new Object[args.length];
+      for (int i = 0; i < args.length; ++i) {
+        validateArgType(args[i]);
+        if (args[i] != null && args[i] instanceof String) {
+          // For authoring the test, we'll just pass string and make the proper
+          // object here.
+          if (method != null && method.getParameterTypes()[i] == Text.class) {
+            inputArgs[i] = createText((String)args[i]);
+          } else {
+            inputArgs[i] = createBytes((String)args[i]);
+          }
         } else {
-          inputArgs[i] = createBytes((String)args[i]);
+          inputArgs[i] = args[i];
         }
-      } else {
-        inputArgs[i] = args[i];
       }
-    }
 
-    // Run the executor a few times to make sure nothing gets messed up
-    // between runs.
-    for (int i = 0; i < 10; ++i) {
-      long r = e.evaluateForTesting(inputArgs);
-      if (!validate) continue;
-      // Check if there was a mismatch and print a detailed error log.
-      List<String> errMsgs = Lists.newArrayList();
-      ValidateReturnPtr(r, expectedValue, expectedType, errMsgs);
-      if (!errMsgs.isEmpty()) {
-        errMsgs.add("Eval iteration:  " + i);
-        errMsgs.add("Return type:     " + expectedType.toSql());
-        List<String> argTypeStrs = Lists.newArrayList();
-        for (Object arg: args) argTypeStrs.add(arg.getClass().getSimpleName());
-        errMsgs.add("Argument types:  " + Joiner.on(",").join(argTypeStrs));
-        if (e.getMethod() != null) {
-          errMsgs.add("Resolved method: " + e.getMethod().toGenericString());
+      // Run the executor a few times to make sure nothing gets messed up
+      // between runs.
+      for (int i = 0; i < 10; ++i) {
+        long r = e.evaluateForTesting(inputArgs);
+        if (!validate) continue;
+        // Check if there was a mismatch and print a detailed error log.
+        List<String> errMsgs = Lists.newArrayList();
+        ValidateReturnPtr(r, expectedValue, expectedType, errMsgs);
+        if (!errMsgs.isEmpty()) {
+          errMsgs.add("Eval iteration:  " + i);
+          errMsgs.add("Return type:     " + expectedType.toSql());
+          List<String> argTypeStrs = Lists.newArrayList();
+          for (Object arg: args) 
argTypeStrs.add(arg.getClass().getSimpleName());
+          errMsgs.add("Argument types:  " + Joiner.on(",").join(argTypeStrs));
+          if (e.getMethod() != null) {
+            errMsgs.add("Resolved method: " + e.getMethod().toGenericString());
+          }
+          Assert.fail("\n" + Joiner.on("\n").join(errMsgs));
         }
-        Assert.fail("\n" + Joiner.on("\n").join(errMsgs));
       }
     }
   }
diff --git 
a/java/datagenerator/src/main/java/org/apache/impala/datagenerator/RandomNestedDataGenerator.java
 
b/java/datagenerator/src/main/java/org/apache/impala/datagenerator/RandomNestedDataGenerator.java
index 5cf65d281..9a3cb7894 100644
--- 
a/java/datagenerator/src/main/java/org/apache/impala/datagenerator/RandomNestedDataGenerator.java
+++ 
b/java/datagenerator/src/main/java/org/apache/impala/datagenerator/RandomNestedDataGenerator.java
@@ -237,11 +237,11 @@ public class RandomNestedDataGenerator {
         }
         return m;
       }
-      case BOOLEAN: return new Boolean(getRandomBoolean());
-      case DOUBLE: return new Double(getRandomDouble());
-      case FLOAT: return new Float(getRandomFloat());
-      case INT: return new Integer(getRandomInt());
-      case LONG: return new Long(getRandomLong());
+      case BOOLEAN: return Boolean.valueOf(getRandomBoolean());
+      case DOUBLE: return Double.valueOf(getRandomDouble());
+      case FLOAT: return Float.valueOf(getRandomFloat());
+      case INT: return Integer.valueOf(getRandomInt());
+      case LONG: return Long.valueOf(getRandomLong());
       case STRING: return getRandomString();
       // TODO: Decimal
       // TODO: Timestamp
@@ -256,8 +256,8 @@ public class RandomNestedDataGenerator {
       System.exit(1);
     }
     String schemaFile = args[0];
-    int numElements = new Integer(args[1]);
-    numListItems = new Integer(args[2]);
+    int numElements = Integer.valueOf(args[1]);
+    numListItems = Integer.valueOf(args[2]);
     String outputFile = args[3];
 
     generateDataToFile(schemaFile, numElements, outputFile);

Reply via email to