This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 044a00b83b9 Remove UDTFJexl from built-in function (#11365)
044a00b83b9 is described below
commit 044a00b83b90b5cdae7480a32f524e9d47460461
Author: Liao Lanyu <[email protected]>
AuthorDate: Tue Oct 24 12:15:14 2023 +0800
Remove UDTFJexl from built-in function (#11365)
---
.../BuiltinTimeSeriesGeneratingFunctionEnum.java | 1 -
.../fragment/FragmentInstanceContext.java | 1 +
.../schedule/DriverTaskTimeoutSentinelThread.java | 2 +-
iotdb-core/node-commons/pom.xml | 4 -
.../BuiltinTimeSeriesGeneratingFunction.java | 1 -
.../apache/iotdb/commons/udf/builtin/UDTFJexl.java | 348 ---------------------
6 files changed, 2 insertions(+), 355 deletions(-)
diff --git
a/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java
b/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java
index fa0c5b5b148..e269f1af701 100644
---
a/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java
+++
b/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java
@@ -72,7 +72,6 @@ public enum BuiltinTimeSeriesGeneratingFunctionEnum {
EQUAL_SIZE_BUCKET_AGG_SAMPLE("EQUAL_SIZE_BUCKET_AGG_SAMPLE"),
EQUAL_SIZE_BUCKET_M4_SAMPLE("EQUAL_SIZE_BUCKET_M4_SAMPLE"),
EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE("EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE"),
- JEXL("JEXL"),
MASTER_REPAIR("MASTER_REPAIR"),
M4("M4");
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index 9da3e51c1b0..9969e97f2d8 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -409,6 +409,7 @@ public class FragmentInstanceContext extends QueryContext {
allDriversClosed.await();
break;
} catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
LOGGER.warn(
"Interrupted when await on allDriversClosed, FragmentInstance Id
is {}", this.getId());
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
index f7bbfab725d..9fb4e59dda2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
@@ -31,7 +31,7 @@ public class DriverTaskTimeoutSentinelThread extends
AbstractDriverThread {
private static final Logger LOGGER =
LoggerFactory.getLogger(DriverTaskTimeoutSentinelThread.class);
- private final long SLEEP_BOUND = 5 * 1000L;
+ private static final long SLEEP_BOUND = 5 * 1000L;
public DriverTaskTimeoutSentinelThread(
String workerId,
diff --git a/iotdb-core/node-commons/pom.xml b/iotdb-core/node-commons/pom.xml
index 5f1850291c2..9c807ad4d1b 100644
--- a/iotdb-core/node-commons/pom.xml
+++ b/iotdb-core/node-commons/pom.xml
@@ -141,10 +141,6 @@
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-jexl3</artifactId>
- </dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java
index ece0e3104a6..25bf548c6c4 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java
@@ -88,7 +88,6 @@ public enum BuiltinTimeSeriesGeneratingFunction {
EQUAL_SIZE_BUCKET_M4_SAMPLE("EQUAL_SIZE_BUCKET_M4_SAMPLE",
UDTFEqualSizeBucketM4Sample.class),
EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE(
"EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE",
UDTFEqualSizeBucketOutlierSample.class),
- JEXL("JEXL", UDTFJexl.class),
MASTER_REPAIR("MASTER_REPAIR", UDTFMasterRepair.class),
M4("M4", UDTFM4.class);
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/UDTFJexl.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/UDTFJexl.java
deleted file mode 100644
index 042aa92b977..00000000000
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/UDTFJexl.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.commons.udf.builtin;
-
-import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.udf.utils.UDFDataTypeTransformer;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.udf.api.UDTF;
-import org.apache.iotdb.udf.api.access.Row;
-import org.apache.iotdb.udf.api.collector.PointCollector;
-import org.apache.iotdb.udf.api.customizer.config.UDTFConfigurations;
-import org.apache.iotdb.udf.api.customizer.parameter.UDFParameterValidator;
-import org.apache.iotdb.udf.api.customizer.parameter.UDFParameters;
-import org.apache.iotdb.udf.api.customizer.strategy.RowByRowAccessStrategy;
-import org.apache.iotdb.udf.api.exception.UDFException;
-import
org.apache.iotdb.udf.api.exception.UDFInputSeriesDataTypeNotValidException;
-import
org.apache.iotdb.udf.api.exception.UDFOutputSeriesDataTypeNotValidException;
-import org.apache.iotdb.udf.api.type.Type;
-
-import org.apache.commons.jexl3.JexlBuilder;
-import org.apache.commons.jexl3.JexlEngine;
-import org.apache.commons.jexl3.JexlScript;
-
-import java.io.IOException;
-import java.util.HashMap;
-
-public class UDTFJexl implements UDTF {
-
- private int inputSeriesNumber;
- private TSDataType[] inputDataType;
- private TSDataType outputDataType;
- private JexlScript script;
- private Evaluator evaluator;
-
- @Override
- public void validate(UDFParameterValidator validator) throws UDFException {
- inputSeriesNumber = validator.getParameters().getChildExpressionsSize();
- for (int i = 0; i < inputSeriesNumber; i++) {
- validator.validateInputSeriesDataType(
- i, Type.INT32, Type.INT64, Type.FLOAT, Type.DOUBLE, Type.TEXT,
Type.BOOLEAN);
- }
- validator.validateRequiredAttribute("expr");
- }
-
- @Override
- public void beforeStart(UDFParameters parameters, UDTFConfigurations
configurations)
- throws UDFInputSeriesDataTypeNotValidException,
UDFOutputSeriesDataTypeNotValidException,
- MetadataException {
- String expr = parameters.getString("expr");
- JexlEngine jexl = new JexlBuilder().create();
- script = jexl.createScript(expr);
-
- inputDataType = new TSDataType[inputSeriesNumber];
- for (int i = 0; i < inputSeriesNumber; i++) {
- inputDataType[i] =
UDFDataTypeTransformer.transformToTsDataType(parameters.getDataType(i));
- }
- outputDataType = probeOutputDataType();
-
- if (inputSeriesNumber == 1) {
- switch (inputDataType[0]) {
- case INT32:
- evaluator = new EvaluatorIntInput();
- break;
- case INT64:
- evaluator = new EvaluatorLongInput();
- break;
- case FLOAT:
- evaluator = new EvaluatorFloatInput();
- break;
- case DOUBLE:
- evaluator = new EvaluatorDoubleInput();
- break;
- case TEXT:
- evaluator = new EvaluatorStringInput();
- break;
- case BOOLEAN:
- evaluator = new EvaluatorBooleanInput();
- break;
- default:
- throw new UDFInputSeriesDataTypeNotValidException(
- 0,
- UDFDataTypeTransformer.transformToUDFDataType(inputDataType[0]),
- Type.INT32,
- Type.INT64,
- Type.FLOAT,
- Type.DOUBLE,
- Type.TEXT,
- Type.BOOLEAN);
- }
- } else {
- evaluator = new EvaluatorMulInput();
- }
-
- configurations
- .setAccessStrategy(new RowByRowAccessStrategy())
-
.setOutputDataType(UDFDataTypeTransformer.transformToUDFDataType(outputDataType));
- }
-
- // 23, 23L, 23f, 23d, "string", true are hard codes for probing
- private HashMap<TSDataType, Object> initialMap() {
- HashMap<TSDataType, Object> map = new HashMap<>();
- map.put(TSDataType.INT32, 23);
- map.put(TSDataType.INT64, 23L);
- map.put(TSDataType.FLOAT, 23f);
- map.put(TSDataType.DOUBLE, 23d);
- map.put(TSDataType.TEXT, "string");
- map.put(TSDataType.BOOLEAN, true);
- return map;
- }
-
- private TSDataType probeOutputDataType() throws
UDFOutputSeriesDataTypeNotValidException {
- // initial inputHardCodes to probe OutputDataType
- HashMap<TSDataType, Object> map = initialMap();
- Object[] inputHardCodes = new Object[inputSeriesNumber];
- for (int i = 0; i < inputSeriesNumber; i++) {
- inputHardCodes[i] = map.get(inputDataType[i]);
- }
-
- Object o = script.execute(null, inputHardCodes);
-
- if (o instanceof Number) {
- return TSDataType.DOUBLE;
- } else if (o instanceof String) {
- return TSDataType.TEXT;
- } else if (o instanceof Boolean) {
- return TSDataType.BOOLEAN;
- } else {
- throw new UDFOutputSeriesDataTypeNotValidException(0, "[Number, String,
Boolean]");
- }
- }
-
- @Override
- public void transform(Row row, PointCollector collector)
- throws IOException, UDFOutputSeriesDataTypeNotValidException,
- UDFInputSeriesDataTypeNotValidException {
- switch (outputDataType) {
- case DOUBLE:
- evaluator.evaluateDouble(row, collector);
- break;
- case TEXT:
- evaluator.evaluateText(row, collector);
- break;
- case BOOLEAN:
- evaluator.evaluateBoolean(row, collector);
- break;
- default:
- // This will not happen.
- throw new UDFOutputSeriesDataTypeNotValidException(0, "[Number,
String, Boolean]");
- }
- }
-
- private interface Evaluator {
- void evaluateDouble(Row row, PointCollector collector)
- throws IOException, UDFInputSeriesDataTypeNotValidException;
-
- void evaluateText(Row row, PointCollector collector)
- throws IOException, UDFInputSeriesDataTypeNotValidException;
-
- void evaluateBoolean(Row row, PointCollector collector)
- throws IOException, UDFInputSeriesDataTypeNotValidException;
- }
-
- private class EvaluatorIntInput implements Evaluator {
- @Override
- public void evaluateDouble(Row row, PointCollector collector) throws
IOException {
- collector.putDouble(
- row.getTime(), ((Number) script.execute(null,
row.getInt(0))).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector) throws
IOException {
- collector.putString(row.getTime(), (String) script.execute(null,
row.getInt(0)));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector) throws
IOException {
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
row.getInt(0)));
- }
- }
-
- private class EvaluatorLongInput implements Evaluator {
- @Override
- public void evaluateDouble(Row row, PointCollector collector) throws
IOException {
- collector.putDouble(
- row.getTime(), ((Number) script.execute(null,
row.getLong(0))).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector) throws
IOException {
- collector.putString(row.getTime(), (String) script.execute(null,
row.getLong(0)));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector) throws
IOException {
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
row.getLong(0)));
- }
- }
-
- private class EvaluatorFloatInput implements Evaluator {
- @Override
- public void evaluateDouble(Row row, PointCollector collector) throws
IOException {
- collector.putDouble(
- row.getTime(), ((Number) script.execute(null,
row.getFloat(0))).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector) throws
IOException {
- collector.putString(row.getTime(), (String) script.execute(null,
row.getFloat(0)));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector) throws
IOException {
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
row.getFloat(0)));
- }
- }
-
- private class EvaluatorDoubleInput implements Evaluator {
- @Override
- public void evaluateDouble(Row row, PointCollector collector) throws
IOException {
- collector.putDouble(
- row.getTime(), ((Number) script.execute(null,
row.getDouble(0))).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector) throws
IOException {
- collector.putString(row.getTime(), (String) script.execute(null,
row.getDouble(0)));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector) throws
IOException {
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
row.getDouble(0)));
- }
- }
-
- private class EvaluatorStringInput implements Evaluator {
- @Override
- public void evaluateDouble(Row row, PointCollector collector) throws
IOException {
- collector.putDouble(
- row.getTime(), ((Number) script.execute(null,
row.getString(0))).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector) throws
IOException {
- collector.putString(row.getTime(), (String) script.execute(null,
row.getString(0)));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector) throws
IOException {
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
row.getString(0)));
- }
- }
-
- private class EvaluatorBooleanInput implements Evaluator {
- @Override
- public void evaluateDouble(Row row, PointCollector collector) throws
IOException {
- collector.putDouble(
- row.getTime(), ((Number) script.execute(null,
row.getBoolean(0))).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector) throws
IOException {
- collector.putString(row.getTime(), (String) script.execute(null,
row.getBoolean(0)));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector) throws
IOException {
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
row.getBoolean(0)));
- }
- }
-
- private class EvaluatorMulInput implements Evaluator {
-
- Object[] values = new Object[inputSeriesNumber];
-
- @Override
- public void evaluateDouble(Row row, PointCollector collector)
- throws IOException, UDFInputSeriesDataTypeNotValidException {
- getValues(row);
- collector.putDouble(row.getTime(), ((Number) script.execute(null,
values)).doubleValue());
- }
-
- @Override
- public void evaluateText(Row row, PointCollector collector)
- throws IOException, UDFInputSeriesDataTypeNotValidException {
- getValues(row);
- collector.putString(row.getTime(), (String) script.execute(null,
values));
- }
-
- @Override
- public void evaluateBoolean(Row row, PointCollector collector)
- throws IOException, UDFInputSeriesDataTypeNotValidException {
- getValues(row);
- collector.putBoolean(row.getTime(), (Boolean) script.execute(null,
values));
- }
-
- public void getValues(Row row) throws IOException,
UDFInputSeriesDataTypeNotValidException {
- for (int i = 0; i < inputSeriesNumber; i++) {
- switch (inputDataType[i]) {
- case INT32:
- values[i] = row.getInt(i);
- break;
- case INT64:
- values[i] = row.getLong(i);
- break;
- case FLOAT:
- values[i] = row.getFloat(i);
- break;
- case DOUBLE:
- values[i] = row.getDouble(i);
- break;
- case TEXT:
- values[i] = row.getString(i);
- break;
- case BOOLEAN:
- values[i] = row.getBoolean(i);
- break;
- default:
- throw new UDFInputSeriesDataTypeNotValidException(
- i,
-
UDFDataTypeTransformer.transformToUDFDataType(inputDataType[i]),
- Type.INT32,
- Type.INT64,
- Type.FLOAT,
- Type.DOUBLE,
- Type.TEXT,
- Type.BOOLEAN);
- }
- }
- }
- }
-}