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);