blob: 1c1317ee94a6b86ac3c1c95218cd0e4f3045d945 [file] [log] [blame]
/*
* 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.pipe.receiver.visitor;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.ActivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.AlterTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.BatchActivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.CreateAlignedTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.CreateMultiTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.CreateTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.InternalBatchActivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.InternalCreateMultiTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.InternalCreateTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.MeasurementGroup;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.CreateLogicalViewNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.crud.DeleteDataStatement;
import org.apache.iotdb.db.queryengine.plan.statement.internal.InternalCreateMultiTimeSeriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.internal.InternalCreateTimeSeriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.AlterTimeSeriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateAlignedTimeSeriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateMultiTimeSeriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateTimeSeriesStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ActivateTemplateStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.BatchActivateTemplateStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.CreateLogicalViewStatement;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class PipePlanToStatementVisitor extends PlanVisitor<Statement, Void> {
@Override
public Statement visitPlan(PlanNode node, Void context) {
throw new UnsupportedOperationException(
String.format(
"PipePlanToStatementVisitor does not support visiting general plan, PlanNode: %s",
node));
}
@Override
public CreateTimeSeriesStatement visitCreateTimeSeries(CreateTimeSeriesNode node, Void context) {
CreateTimeSeriesStatement statement = new CreateTimeSeriesStatement();
statement.setPath(node.getPath());
statement.setDataType(node.getDataType());
statement.setEncoding(node.getEncoding());
statement.setCompressor(node.getCompressor());
statement.setProps(node.getProps());
statement.setAttributes(node.getAttributes());
statement.setAlias(node.getAlias());
statement.setTags(node.getTags());
return statement;
}
@Override
public CreateAlignedTimeSeriesStatement visitCreateAlignedTimeSeries(
CreateAlignedTimeSeriesNode node, Void context) {
CreateAlignedTimeSeriesStatement statement = new CreateAlignedTimeSeriesStatement();
statement.setDataTypes(node.getDataTypes());
statement.setCompressors(node.getCompressors());
statement.setEncodings(node.getEncodings());
statement.setAttributesList(node.getAttributesList());
statement.setAliasList(node.getAliasList());
statement.setDevicePath(node.getDevicePath());
statement.setMeasurements(node.getMeasurements());
statement.setTagsList(node.getTagsList());
return statement;
}
@Override
public CreateMultiTimeSeriesStatement visitCreateMultiTimeSeries(
CreateMultiTimeSeriesNode node, Void context) {
CreateMultiTimeSeriesStatement statement = new CreateMultiTimeSeriesStatement();
List<PartialPath> paths = new ArrayList<>();
List<TSDataType> dataTypes = new ArrayList<>();
List<TSEncoding> encodings = new ArrayList<>();
List<CompressionType> compressors = new ArrayList<>();
List<Map<String, String>> propsList = new ArrayList<>();
List<String> aliasList = new ArrayList<>();
List<Map<String, String>> tagsList = new ArrayList<>();
List<Map<String, String>> attributesList = new ArrayList<>();
for (Map.Entry<PartialPath, MeasurementGroup> path2Group :
node.getMeasurementGroupMap().entrySet()) {
MeasurementGroup group = path2Group.getValue();
dataTypes.addAll(
Objects.nonNull(group.getDataTypes()) ? group.getDataTypes() : new ArrayList<>());
encodings.addAll(
Objects.nonNull(group.getEncodings()) ? group.getEncodings() : new ArrayList<>());
compressors.addAll(
Objects.nonNull(group.getCompressors()) ? group.getCompressors() : new ArrayList<>());
propsList.addAll(
Objects.nonNull(group.getPropsList()) ? group.getPropsList() : new ArrayList<>());
aliasList.addAll(
Objects.nonNull(group.getAliasList()) ? group.getAliasList() : new ArrayList<>());
tagsList.addAll(
Objects.nonNull(group.getTagsList()) ? group.getTagsList() : new ArrayList<>());
attributesList.addAll(
Objects.nonNull(group.getAttributesList())
? group.getAttributesList()
: new ArrayList<>());
if (Objects.nonNull(group.getMeasurements())) {
for (int i = 0; i < group.getMeasurements().size(); ++i) {
paths.add(path2Group.getKey().concatNode(group.getMeasurements().get(i)));
}
}
}
statement.setPaths(paths);
statement.setDataTypes(dataTypes);
statement.setEncodings(encodings);
statement.setCompressors(compressors);
statement.setPropsList(propsList.isEmpty() ? null : propsList);
statement.setAliasList(aliasList.isEmpty() ? null : aliasList);
statement.setTagsList(tagsList.isEmpty() ? null : tagsList);
statement.setAttributesList(attributesList.isEmpty() ? null : attributesList);
return statement;
}
@Override
public AlterTimeSeriesStatement visitAlterTimeSeries(AlterTimeSeriesNode node, Void context) {
AlterTimeSeriesStatement statement = new AlterTimeSeriesStatement();
statement.setAlterMap(node.getAlterMap());
statement.setAlterType(node.getAlterType());
statement.setAttributesMap(node.getAttributesMap());
statement.setAlias(node.getAlias());
statement.setTagsMap(node.getTagsMap());
statement.setPath(node.getPath());
return statement;
}
@Override
public InternalCreateTimeSeriesStatement visitInternalCreateTimeSeries(
InternalCreateTimeSeriesNode node, Void context) {
return new InternalCreateTimeSeriesStatement(
node.getDevicePath(),
node.getMeasurementGroup().getMeasurements(),
node.getMeasurementGroup().getDataTypes(),
node.getMeasurementGroup().getEncodings(),
node.getMeasurementGroup().getCompressors(),
node.isAligned());
}
@Override
public ActivateTemplateStatement visitActivateTemplate(ActivateTemplateNode node, Void context) {
ActivateTemplateStatement statement = new ActivateTemplateStatement();
statement.setPath(node.getActivatePath());
return statement;
}
@Override
public BatchActivateTemplateStatement visitInternalBatchActivateTemplate(
InternalBatchActivateTemplateNode node, Void context) {
return new BatchActivateTemplateStatement(
new ArrayList<>(node.getTemplateActivationMap().keySet()));
}
@Override
public InternalCreateMultiTimeSeriesStatement visitInternalCreateMultiTimeSeries(
InternalCreateMultiTimeSeriesNode node, Void context) {
return new InternalCreateMultiTimeSeriesStatement(node.getDeviceMap());
}
@Override
public BatchActivateTemplateStatement visitBatchActivateTemplate(
BatchActivateTemplateNode node, Void context) {
return new BatchActivateTemplateStatement(
new ArrayList<>(node.getTemplateActivationMap().keySet()));
}
@Override
public CreateLogicalViewStatement visitCreateLogicalView(
CreateLogicalViewNode node, Void context) {
CreateLogicalViewStatement statement = new CreateLogicalViewStatement();
statement.setTargetFullPaths(node.getViewPathList());
statement.setViewExpressions(new ArrayList<>(node.getViewPathToSourceExpressionMap().values()));
return statement;
}
// We do not support AlterLogicalViewNode parsing and use direct rpc instead
@Override
public DeleteDataStatement visitDeleteData(DeleteDataNode node, Void context) {
DeleteDataStatement statement = new DeleteDataStatement();
statement.setDeleteEndTime(node.getDeleteEndTime());
statement.setDeleteStartTime(node.getDeleteStartTime());
statement.setPathList(node.getPathList());
return statement;
}
}