This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ty/ChangeTsFileVersion
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/ChangeTsFileVersion by this
push:
new f224ff16849 Try fix MeasurementPath Problem
f224ff16849 is described below
commit f224ff16849dc09b92a724ee0539365bc18395a3
Author: JackieTien97 <[email protected]>
AuthorDate: Tue Aug 6 18:56:23 2024 +0800
Try fix MeasurementPath Problem
---
.../iotdb/confignode/manager/ConfigManager.java | 49 ++++++++++------------
.../impl/schema/SetTemplateProcedure.java | 5 +--
.../queryengine/plan/analyze/AnalyzeVisitor.java | 3 +-
.../plan/analyze/ExpressionTypeAnalyzer.java | 2 +-
.../queryengine/plan/analyze/ExpressionUtils.java | 8 ++++
.../plan/analyze/TemplatedAggregationAnalyze.java | 7 +++-
.../queryengine/plan/analyze/TemplatedAnalyze.java | 7 +++-
.../db/queryengine/plan/analyze/TemplatedInfo.java | 4 +-
.../plan/expression/leaf/TimeSeriesOperand.java | 14 +++++--
.../BindTypeForTimeSeriesOperandVisitor.java | 5 ++-
.../visitor/ExpressionNormalizeVisitor.java | 2 +-
.../visitor/GetMeasurementExpressionVisitor.java | 22 +++++-----
.../visitor/RemoveRootPrefixVisitor.java | 2 +-
.../visitor/ReplaceLogicalViewVisitor.java | 17 ++++----
.../visitor/ReplaceSubTreeWithViewVisitor.java | 3 +-
.../plan/planner/LogicalPlanBuilder.java | 5 ++-
.../org/apache/iotdb/db/utils/SchemaUtils.java | 5 +--
.../apache/iotdb/db/utils/TypeInferenceUtils.java | 4 +-
.../org/apache/iotdb/db/utils/SchemaUtilsTest.java | 10 ++---
19 files changed, 96 insertions(+), 78 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 4a7a6144b5d..086e61cee6a 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -39,9 +39,9 @@ import org.apache.iotdb.commons.cluster.NodeType;
import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.ConfigurationFileUtils;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.path.PathPatternUtil;
@@ -682,30 +682,27 @@ public class ConfigManager implements IManager {
}
private List<TSeriesPartitionSlot> calculateRelatedSlot(PartialPath path,
PartialPath database) {
- // // The path contains `**`
- // if
(path.getFullPath().contains(IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD)) {
- // return new ArrayList<>();
- // }
- // // with database = root.sg, path = root.*.d1
- // // convert path = root.sg.d1
- // List<PartialPath> innerPathList = path.alterPrefixPath(database);
- // if (innerPathList.isEmpty()) {
- // return new ArrayList<>();
- // }
- // PartialPath innerPath = innerPathList.get(0);
- // // root.sg1.*.d1
- // // root.sg1.a1.*
- // // The innerPath contains `*` and the only `*` is not in last level
- // if
(innerPath.toString().contains(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD)) {
- // return new ArrayList<>();
- // }
- // return Collections.singletonList(
- //
getPartitionManager().getSeriesPartitionSlot(innerPath.getIDeviceID()));
-
- // the previous code has an issue, it cannot be known that whether "path"
is a full path,
- // so it is meaningless to call getIDeviceID()
- // TODO: how to determine and filter
- return Collections.emptyList();
+ // The path contains `**`
+ if (path.getFullPath().contains(IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD)) {
+ return new ArrayList<>();
+ }
+ // with database = root.sg, path = root.*.d1
+ // convert path = root.sg.d1
+ List<PartialPath> innerPathList = path.alterPrefixPath(database);
+ if (innerPathList.isEmpty()) {
+ return new ArrayList<>();
+ }
+ String[] devicePath =
+ Arrays.copyOf(innerPathList.get(0).getNodes(),
innerPathList.get(0).getNodeLength() - 1);
+ // root.sg1.*.d1
+ for (String node : devicePath) {
+ if (node.equals(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD)) {
+ return Collections.emptyList();
+ }
+ }
+ return Collections.singletonList(
+ getPartitionManager()
+
.getSeriesPartitionSlot(IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath)));
}
@Override
@@ -720,7 +717,7 @@ public class ConfigManager implements IManager {
// Build GetSchemaPartitionPlan
Map<String, Set<TSeriesPartitionSlot>> partitionSlotsMap = new HashMap<>();
- List<MeasurementPath> relatedPaths = patternTree.getAllPathPatterns(true);
+ List<PartialPath> relatedPaths = patternTree.getAllPathPatterns();
List<String> allDatabases = getClusterSchemaManager().getDatabaseNames();
List<PartialPath> allDatabasePaths = new ArrayList<>();
for (String database : allDatabases) {
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
index cbfb234dadd..1e69d8339d9 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
@@ -260,14 +260,13 @@ public class SetTemplateProcedure
private void validateTimeSeriesExistence(ConfigNodeProcedureEnv env) {
PathPatternTree patternTree = new PathPatternTree();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- DataOutputStream dataOutputStream = new
DataOutputStream(byteArrayOutputStream);
PartialPath path = null;
try {
path = new PartialPath(templateSetPath);
patternTree.appendPathPattern(path);
patternTree.appendPathPattern(path.concatAsMeasurementPath(MULTI_LEVEL_PATH_WILDCARD));
- patternTree.serialize(dataOutputStream);
- } catch (IllegalPathException | IOException ignored) {
+ patternTree.constructTree();
+ } catch (IllegalPathException ignored) {
}
ByteBuffer patternTreeBytes =
ByteBuffer.wrap(byteArrayOutputStream.toByteArray());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index 2f1eda9dc47..6a9f2b0c159 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -1083,8 +1083,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
.add(rawExpression);
Map<String, String> tagMap =
- ((MeasurementPath)
- ((TimeSeriesOperand)
measurementExpression.getExpressions().get(0)).getPath())
+ ((MeasurementPath) ((TimeSeriesOperand)
rawExpression.getExpressions().get(0)).getPath())
.getTagMap();
List<String> tagValues = new ArrayList<>();
for (String tagKey : tagKeys) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
index f5dbad88a82..69db828f991 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
@@ -375,7 +375,7 @@ public class ExpressionTypeAnalyzer {
timeSeriesOperand,
context.get(timeSeriesOperand.getOutputSymbol()).getType());
}
- return setExpressionType(timeSeriesOperand,
timeSeriesOperand.getPath().getSeriesType());
+ return setExpressionType(timeSeriesOperand, timeSeriesOperand.getType());
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionUtils.java
index fc9d3a0aa51..a9ad3fad40b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionUtils.java
@@ -52,6 +52,8 @@ import
org.apache.iotdb.db.queryengine.plan.expression.unary.NegationExpression;
import org.apache.iotdb.db.queryengine.plan.expression.unary.RegularExpression;
import org.apache.iotdb.db.queryengine.plan.expression.unary.UnaryExpression;
+import org.apache.tsfile.enums.TSDataType;
+
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -82,6 +84,12 @@ public class ExpressionUtils {
return cloneCommonFields(rawExpression, resultExpression);
}
+ public static Expression reconstructTimeSeriesOperand(
+ TimeSeriesOperand rawExpression, PartialPath actualPath, TSDataType
dataType) {
+ Expression resultExpression = new TimeSeriesOperand(actualPath, dataType);
+ return cloneCommonFields(rawExpression, resultExpression);
+ }
+
public static List<Expression> reconstructFunctionExpressionsWithMemoryCheck(
final FunctionExpression expression,
final List<List<Expression>> childExpressionsList,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
index 79f8ba0a8c1..ba4bdf4255c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
@@ -41,6 +41,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static
org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant.ENDTIME;
@@ -167,13 +168,15 @@ public class TemplatedAggregationAnalyze {
&&
"*".equalsIgnoreCase(selectExpression.getExpressions().get(0).getOutputSymbol()))
{
subExpressions = new ArrayList<>();
FunctionExpression functionExpression = (FunctionExpression)
selectExpression;
- for (String measurement : template.getSchemaMap().keySet()) {
+ for (Map.Entry<String, IMeasurementSchema> entry :
template.getSchemaMap().entrySet()) {
FunctionExpression subFunctionExpression =
new FunctionExpression(
functionExpression.getFunctionName(),
functionExpression.getFunctionAttributes(),
Collections.singletonList(
- new TimeSeriesOperand(new PartialPath(new String[]
{measurement}))));
+ new TimeSeriesOperand(
+ new PartialPath(new String[] {entry.getKey()}),
+ entry.getValue().getType())));
subFunctionExpression.setFunctionType(functionExpression.getFunctionType());
subExpressions.add(subFunctionExpression);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
index 9622d2a6e16..d3bf070d2be 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java
@@ -130,7 +130,8 @@ public class TemplatedAnalyze {
} else if (paginationController.hasCurLimit()) {
String measurementName = entry.getKey();
TimeSeriesOperand measurementPath =
- new TimeSeriesOperand(new PartialPath(new String[]
{measurementName}));
+ new TimeSeriesOperand(
+ new PartialPath(new String[] {measurementName}),
entry.getValue().getType());
// reserve memory for this expression
context.reserveMemoryForFrontEnd(measurementPath.ramBytesUsed());
outputExpressions.add(new Pair<>(measurementPath, null));
@@ -151,7 +152,9 @@ public class TemplatedAnalyze {
paginationController.consumeOffset();
} else if (paginationController.hasCurLimit()) {
TimeSeriesOperand measurementPath =
- new TimeSeriesOperand(new PartialPath(new String[]
{measurementName}));
+ new TimeSeriesOperand(
+ new PartialPath(new String[] {measurementName}),
+ template.getSchemaMap().get(measurementName).getType());
// reserve memory for this expression
context.reserveMemoryForFrontEnd(measurementPath.ramBytesUsed());
outputExpressions.add(new Pair<>(measurementPath,
resultColumn.getAlias()));
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
index 919efa8970c..5a4beb851ee 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedInfo.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.queryengine.plan.analyze;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.queryengine.plan.expression.Expression;
import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
@@ -199,8 +198,7 @@ public class TemplatedInfo {
for (int i = 0; i < measurementList.size(); i++) {
projectExpressions[i] =
new TimeSeriesOperand(
- new MeasurementPath(
- new PartialPath(new String[] {measurementList.get(i)}),
schemaList.get(i)));
+ new PartialPath(new String[] {measurementList.get(i)}),
schemaList.get(i).getType());
}
return projectExpressions;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/leaf/TimeSeriesOperand.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/leaf/TimeSeriesOperand.java
index f063605dfa4..96e7b9db097 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/leaf/TimeSeriesOperand.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/leaf/TimeSeriesOperand.java
@@ -43,25 +43,33 @@ public class TimeSeriesOperand extends LeafOperand {
private PartialPath path;
+ // if path is MeasurementPath or AlignedPath, this type is null
+ private transient TSDataType type;
+
public TimeSeriesOperand(PartialPath path) {
this.path = path;
}
+ public TimeSeriesOperand(PartialPath path, TSDataType dataType) {
+ this.path = path;
+ this.type = dataType;
+ }
+
public TimeSeriesOperand(ByteBuffer byteBuffer) {
path = (PartialPath) PathDeserializeUtil.deserialize(byteBuffer);
}
public static TimeSeriesOperand constructColumnHeaderExpression(
String columnName, TSDataType dataType) {
- return new TimeSeriesOperand(new PartialPath(columnName, false));
+ return new TimeSeriesOperand(new PartialPath(columnName, false), dataType);
}
public PartialPath getPath() {
return path;
}
- public void setPath(PartialPath path) {
- this.path = path;
+ public TSDataType getType() {
+ return type != null ? type : path.getSeriesType();
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/BindTypeForTimeSeriesOperandVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/BindTypeForTimeSeriesOperandVisitor.java
index 4aecb34e0bb..662e4b8f54d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/BindTypeForTimeSeriesOperandVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/BindTypeForTimeSeriesOperandVisitor.java
@@ -20,7 +20,7 @@
package org.apache.iotdb.db.queryengine.plan.expression.visitor;
import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.path.MeasurementPath;
+import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.queryengine.common.header.ColumnHeader;
import org.apache.iotdb.db.queryengine.plan.expression.Expression;
@@ -44,7 +44,8 @@ public class BindTypeForTimeSeriesOperandVisitor extends
ReconstructVisitor<List
try {
return reconstructTimeSeriesOperand(
predicate,
- new MeasurementPath(columnHeader.getColumnName(),
columnHeader.getColumnType()));
+ new PartialPath(columnHeader.getColumnName()),
+ columnHeader.getColumnType());
} catch (IllegalPathException e) {
throw new SemanticException(e);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ExpressionNormalizeVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ExpressionNormalizeVisitor.java
index 642b3a3b617..59868395c39 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ExpressionNormalizeVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ExpressionNormalizeVisitor.java
@@ -61,7 +61,7 @@ public class ExpressionNormalizeVisitor extends
ReconstructVisitor<Void> {
if (newPath.isMeasurementAliasExists()) {
((MeasurementPath) newPath).removeMeasurementAlias();
}
- TimeSeriesOperand newOperand = new TimeSeriesOperand(newPath);
+ TimeSeriesOperand newOperand = new TimeSeriesOperand(newPath,
timeSeriesOperand.getType());
if (timeSeriesOperand.isViewExpression()) {
newOperand.setViewPath(timeSeriesOperand.getViewPath());
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/GetMeasurementExpressionVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/GetMeasurementExpressionVisitor.java
index 53361f522d7..0395c3bc047 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/GetMeasurementExpressionVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/GetMeasurementExpressionVisitor.java
@@ -42,15 +42,17 @@ public class GetMeasurementExpressionVisitor extends
ReconstructVisitor<Analysis
@Override
public Expression visitTimeSeriesOperand(TimeSeriesOperand
timeSeriesOperand, Analysis analysis) {
- MeasurementPath rawPath = (MeasurementPath) timeSeriesOperand.getPath();
- String measurementName =
- rawPath.isMeasurementAliasExists()
- ? rawPath.getMeasurementAlias()
- : rawPath.getMeasurement();
- MeasurementPath measurementPath =
- new MeasurementPath(
- new PartialPath(measurementName, false),
rawPath.getMeasurementSchema());
- measurementPath.setTagMap(rawPath.getTagMap());
- return new TimeSeriesOperand(measurementPath);
+ if (timeSeriesOperand.getPath() instanceof MeasurementPath) {
+ MeasurementPath rawPath = (MeasurementPath) timeSeriesOperand.getPath();
+ String measurementName =
+ rawPath.isMeasurementAliasExists()
+ ? rawPath.getMeasurementAlias()
+ : rawPath.getMeasurement();
+ return new TimeSeriesOperand(
+ new PartialPath(measurementName, false),
rawPath.getMeasurementSchema().getType());
+ } else {
+ return new TimeSeriesOperand(
+ new PartialPath(timeSeriesOperand.getPath().getNodes()),
timeSeriesOperand.getType());
+ }
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/RemoveRootPrefixVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/RemoveRootPrefixVisitor.java
index ada5d3c89ca..57b2b65a529 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/RemoveRootPrefixVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/RemoveRootPrefixVisitor.java
@@ -40,6 +40,6 @@ public class RemoveRootPrefixVisitor extends
ReconstructVisitor<Void> {
String[] newPartialNodes = new String[newPartialNodesLength];
System.arraycopy(rawPartialNodes, 1, newPartialNodes, 0,
newPartialNodesLength);
- return new TimeSeriesOperand(new PartialPath(newPartialNodes));
+ return new TimeSeriesOperand(new PartialPath(newPartialNodes),
timeSeriesOperand.getType());
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceLogicalViewVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceLogicalViewVisitor.java
index 23a00a0ff4f..39fe3c637c9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceLogicalViewVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceLogicalViewVisitor.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.queryengine.plan.expression.visitor;
+import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
@@ -173,13 +174,15 @@ public class ReplaceLogicalViewVisitor extends
ExpressionVisitor<Expression, Lis
TimeSeriesOperand timeSeriesOperand, List<PartialPath> context) {
PartialPath path = timeSeriesOperand.getPath();
try {
- IMeasurementSchema measurementSchema = path.getMeasurementSchema();
- if (measurementSchema.isLogicalView()) {
- ViewExpression viewExpression = ((LogicalViewSchema)
measurementSchema).getExpression();
- Expression result = this.transform(viewExpression);
- // record paths in this viewExpression
- context.addAll(this.collectSourcePaths(viewExpression));
- return result;
+ if (path instanceof MeasurementPath) {
+ IMeasurementSchema measurementSchema = path.getMeasurementSchema();
+ if (measurementSchema.isLogicalView()) {
+ ViewExpression viewExpression = ((LogicalViewSchema)
measurementSchema).getExpression();
+ Expression result = this.transform(viewExpression);
+ // record paths in this viewExpression
+ context.addAll(this.collectSourcePaths(viewExpression));
+ return result;
+ }
}
} catch (Exception e) {
throw new RuntimeException(e);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceSubTreeWithViewVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceSubTreeWithViewVisitor.java
index 7d20546722b..49702ff5528 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceSubTreeWithViewVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ReplaceSubTreeWithViewVisitor.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.queryengine.plan.expression.visitor;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
import org.apache.iotdb.db.queryengine.plan.expression.Expression;
import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
@@ -32,7 +31,7 @@ public class ReplaceSubTreeWithViewVisitor extends
ReconstructVisitor<Analysis>
public Expression process(Expression expression, Analysis analysis) {
if (expression.isViewExpression()) {
TSDataType dataType = analysis.getType(expression);
- return new TimeSeriesOperand(new
MeasurementPath(expression.getViewPath(), dataType));
+ return new TimeSeriesOperand(expression.getViewPath(), dataType);
}
return expression.accept(this, analysis);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
index 8871329765a..7064441962f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
@@ -464,7 +464,10 @@ public class LogicalPlanBuilder {
for (String partialAggregationName : partialAggregationsNames) {
typeProvider.setTreeModelType(
String.format("%s(%s)", partialAggregationName,
path.getFullPath()),
- SchemaUtils.getSeriesTypeByPath(path, partialAggregationName));
+ SchemaUtils.getSeriesTypeByPath(
+ ((TimeSeriesOperand)
aggregationDescriptor.getOutputExpressions().get(0))
+ .getType(),
+ partialAggregationName));
}
}
} else {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
index 52946580a60..74d753da9d5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
@@ -20,7 +20,6 @@ package org.apache.iotdb.db.utils;
import org.apache.iotdb.common.rpc.thrift.TAggregationType;
import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
import org.apache.iotdb.db.utils.constant.SqlConstant;
@@ -105,12 +104,12 @@ public class SchemaUtils {
return measurementDataType;
}
- public static TSDataType getSeriesTypeByPath(PartialPath path, String
aggregation) {
+ public static TSDataType getSeriesTypeByPath(TSDataType seriesType, String
aggregation) {
TSDataType dataType = getBuiltinAggregationTypeByFuncName(aggregation);
if (dataType != null) {
return dataType;
} else {
- return path.getSeriesType();
+ return seriesType;
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
index 8167a603844..78eac5f6776 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.utils;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.sql.SemanticException;
@@ -267,8 +266,7 @@ public class TypeInferenceUtils {
ExpressionUtils.reconstructBinaryExpression(
keepExpression,
new TimeSeriesOperand(
- new MeasurementPath(
- ((TimeSeriesOperand)
leftExpression).getPath(), TSDataType.INT64)),
+ ((TimeSeriesOperand) leftExpression).getPath(),
TSDataType.INT64),
rightExpression)));
return;
} else {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java
index 818117cb8bc..85a10c7aaf3 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java
@@ -18,9 +18,7 @@
*/
package org.apache.iotdb.db.utils;
-import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.commons.path.MeasurementPath;
import org.apache.iotdb.db.utils.constant.SqlConstant;
import org.apache.tsfile.enums.TSDataType;
@@ -58,12 +56,12 @@ public class SchemaUtilsTest {
}
@Test
- public void getSeriesTypeByPath() throws IllegalPathException {
- MeasurementPath measurementPath = new MeasurementPath("s1",
TSDataType.INT64);
+ public void getSeriesTypeByPath() {
Assert.assertEquals(
- TSDataType.DOUBLE, SchemaUtils.getSeriesTypeByPath(measurementPath,
SqlConstant.SUM));
+ TSDataType.DOUBLE, SchemaUtils.getSeriesTypeByPath(TSDataType.INT64,
SqlConstant.SUM));
Assert.assertEquals(
- TSDataType.INT64, SchemaUtils.getSeriesTypeByPath(measurementPath,
SqlConstant.LAST_VALUE));
+ TSDataType.INT64,
+ SchemaUtils.getSeriesTypeByPath(TSDataType.INT64,
SqlConstant.LAST_VALUE));
}
@Test