This is an automated email from the ASF dual-hosted git repository. rong pushed a commit to branch iotdb-1400 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b2149206be32dd82f0d4d2bbcbaace968aaa3365 Author: Steve Yurong Su <[email protected]> AuthorDate: Thu May 27 17:12:46 2021 +0800 ArithmeticNegationTransformer --- .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 4 +- ...inusExpression.java => NegationExpression.java} | 8 +-- .../transformer/ArithmeticNegationTransformer.java | 67 ++++++++++++++++++++++ 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java index 132fdba..9d110f7 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java @@ -221,7 +221,7 @@ import org.apache.iotdb.db.query.expression.binary.ModuloExpression; import org.apache.iotdb.db.query.expression.binary.MultiplicationExpression; import org.apache.iotdb.db.query.expression.binary.SubtractionExpression; import org.apache.iotdb.db.query.expression.unary.FunctionExpression; -import org.apache.iotdb.db.query.expression.unary.MinusExpression; +import org.apache.iotdb.db.query.expression.unary.NegationExpression; import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; @@ -1053,7 +1053,7 @@ public class IoTDBSqlVisitor extends SqlBaseBaseVisitor<Operator> { } if (context.unary != null) { return context.MINUS() != null - ? new MinusExpression(parseExpression(context.expression(0))) + ? new NegationExpression(parseExpression(context.expression(0))) : parseExpression(context.expression(0)); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/MinusExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java similarity index 90% rename from server/src/main/java/org/apache/iotdb/db/query/expression/unary/MinusExpression.java rename to server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java index afd0017..ea63365 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/MinusExpression.java +++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java @@ -30,11 +30,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -public class MinusExpression implements Expression { +public class NegationExpression implements Expression { protected Expression expression; - public MinusExpression(Expression expression) { + public NegationExpression(Expression expression) { this.expression = expression; } @@ -52,7 +52,7 @@ public class MinusExpression implements Expression { List<Expression> resultExpressionsForRecursion = new ArrayList<>(); expression.concat(prefixPaths, resultExpressionsForRecursion); for (Expression resultExpression : resultExpressionsForRecursion) { - resultExpressions.add(new MinusExpression(resultExpression)); + resultExpressions.add(new NegationExpression(resultExpression)); } } @@ -62,7 +62,7 @@ public class MinusExpression implements Expression { List<Expression> resultExpressionsForRecursion = new ArrayList<>(); expression.removeWildcards(wildcardsRemover, resultExpressionsForRecursion); for (Expression resultExpression : resultExpressionsForRecursion) { - resultExpressions.add(new MinusExpression(resultExpression)); + resultExpressions.add(new NegationExpression(resultExpression)); } } diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java new file mode 100644 index 0000000..5052032 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java @@ -0,0 +1,67 @@ +/* + * 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.db.query.udf.core.transformer; + +import org.apache.iotdb.db.exception.query.QueryProcessException; +import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader; +import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; + +import java.io.IOException; + +public class ArithmeticNegationTransformer extends Transformer { + + private final LayerPointReader layerPointReader; + + public ArithmeticNegationTransformer(LayerPointReader layerPointReader) { + this.layerPointReader = layerPointReader; + } + + @Override + protected boolean cacheValue() throws QueryProcessException, IOException { + if (!layerPointReader.next()) { + return false; + } + cachedTime = layerPointReader.currentTime(); + switch (layerPointReader.getDataType()) { + case INT32: + cachedInt = -layerPointReader.currentInt(); + break; + case INT64: + cachedLong = -layerPointReader.currentLong(); + break; + case FLOAT: + cachedFloat = -layerPointReader.currentFloat(); + break; + case DOUBLE: + cachedDouble = -layerPointReader.currentDouble(); + break; + default: + throw new UnSupportedDataTypeException(layerPointReader.toString()); + } + layerPointReader.readyForNext(); + return true; + } + + @Override + public TSDataType getDataType() { + return layerPointReader.getDataType(); + } +}
