Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,6 @@
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.InformationSchemaTableScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.NonAlignedAggregationTreeDeviceViewScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.TreeAlignedDeviceViewScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.TreeDeviceViewScanNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.TreeNonAlignedDeviceViewScanNode;
Expand Down Expand Up @@ -646,10 +645,6 @@ default R visitPipeOperateSchemaQueueNode(PipeOperateSchemaQueueNode node, C con

// =============================== Used for Table Model ====================================

default R visitTableScan(TableScanNode node, C context) {
return visitPlan(node, context);
}

default R visitDeviceTableScan(DeviceTableScanNode node, C context) {
return visitTableScan(node, context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

import static org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.TAG;
import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode.combineAggregationAndTableScan;
import static org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.Util.split;

Expand Down Expand Up @@ -190,7 +193,7 @@ private PushDownLevel calculatePushDownLevel(
return PushDownLevel.NOOP;
} else if (singleDeviceEntry
|| ImmutableSet.copyOf(groupingKeys)
.containsAll(tableScanNode.getIdColumnsInTableStore(metadata, session))) {
.containsAll(getIdColumnsInTableStore(tableScanNode, metadata, session))) {
// If all ID columns appear in groupingKeys and no Measurement column appears, we can push
// down completely.
return PushDownLevel.COMPLETE;
Expand All @@ -199,6 +202,17 @@ private PushDownLevel calculatePushDownLevel(
}
}

private List<Symbol> getIdColumnsInTableStore(
DeviceTableScanNode tableScanNode, Metadata metadata, SessionInfo session) {
return Objects.requireNonNull(
metadata.getTableSchema(session, tableScanNode.getQualifiedObjectName()).orElse(null))
.getColumns()
.stream()
.filter(columnSchema -> columnSchema.getColumnCategory() == TAG)
.map(columnSchema -> Symbol.of(columnSchema.getName()))
.collect(Collectors.toList());
}

private boolean isDateBinFunctionOfTime(
Expression expression,
List<FunctionCall> dateBinFunctionsOfTime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import org.apache.iotdb.commons.queryengine.plan.relational.planner.node.ValueFillNode;
import org.apache.iotdb.commons.queryengine.plan.relational.planner.node.ValuesNode;
import org.apache.iotdb.commons.queryengine.plan.relational.planner.node.WindowNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;

public interface ICoreQueryPlanVisitor<R, C> extends IPlanVisitor<R, C> {

Expand Down Expand Up @@ -90,6 +91,10 @@ default R visitMultiChildProcess(MultiChildProcessNode node, C context) {
}

// =============================== Used for Table Model ====================================
default R visitTableScan(TableScanNode node, C context) {
return visitPlan(node, context);
}

default R visitFilter(FilterNode node, C context) {
return visitSingleChildProcess(node, context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,9 @@

import org.apache.iotdb.commons.exception.SemanticException;
import org.apache.iotdb.commons.queryengine.common.SessionInfo;
import org.apache.iotdb.commons.queryengine.plan.relational.metadata.ColumnMetadata;
import org.apache.iotdb.commons.queryengine.plan.relational.sql.ast.QualifiedName;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.apache.tsfile.read.common.type.Type;

import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -88,52 +84,4 @@ public static QualifiedObjectName createQualifiedObjectName(

return new QualifiedObjectName(databaseName, objectName);
}

public static boolean tableExists(Metadata metadata, SessionInfo session, String table) {
if (!session.getDatabaseName().isPresent()) {
return false;
}
QualifiedObjectName name = new QualifiedObjectName(session.getDatabaseName().get(), table);
return metadata.tableExists(name);
}

public static class TableMetadataBuilder {
public static TableMetadataBuilder tableMetadataBuilder(String tableName) {
return new TableMetadataBuilder(tableName);
}

private final String tableName;
private final ImmutableList.Builder<ColumnMetadata> columns = ImmutableList.builder();
private final ImmutableMap.Builder<String, Object> properties = ImmutableMap.builder();
private final Optional<String> comment;

private TableMetadataBuilder(String tableName) {
this(tableName, Optional.empty());
}

private TableMetadataBuilder(String tableName, Optional<String> comment) {
this.tableName = tableName;
this.comment = comment;
}

public TableMetadataBuilder column(String columnName, Type type) {
columns.add(new ColumnMetadata(columnName, type));
return this;
}

public TableMetadataBuilder hiddenColumn(String columnName, Type type) {
columns.add(
ColumnMetadata.builder().setName(columnName).setType(type).setHidden(true).build());
return this;
}

public TableMetadataBuilder property(String name, Object value) {
properties.put(name, value);
return this;
}

public TableMetadata build() {
return new TableMetadata(tableName, columns.build(), properties.buildOrThrow(), comment);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,6 @@ public String getObjectName() {
return objectName;
}

public QualifiedTablePrefix asQualifiedTablePrefix() {
return new QualifiedTablePrefix(dbName, objectName);
}

@Override
public boolean equals(Object obj) {
if (obj == this) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,14 @@
package org.apache.iotdb.db.queryengine.plan.relational.planner.node;

import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.queryengine.common.SessionInfo;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.ICoreQueryPlanVisitor;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.IPlanVisitor;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.source.SourceNode;
import org.apache.iotdb.commons.queryengine.plan.relational.metadata.ColumnSchema;
import org.apache.iotdb.commons.queryengine.plan.relational.planner.Symbol;
import org.apache.iotdb.commons.queryengine.plan.relational.sql.ast.Expression;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;

import com.google.common.collect.ImmutableList;
Expand Down Expand Up @@ -107,8 +104,9 @@ public TableScanNode(
protected TableScanNode() {}

@Override
@SuppressWarnings("unchecked")
public <R, C> R accept(IPlanVisitor<R, C> visitor, C context) {
return ((PlanVisitor<R, C>) visitor).visitTableScan(this, context);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

visitTableScan should not stay in datanode PlanVisitor after TableScanNode is moved to node-commons

return ((ICoreQueryPlanVisitor<R, C>) visitor).visitSourceNode(this, context);
}

@Override
Expand All @@ -129,16 +127,6 @@ public List<String> getOutputColumnNames() {
return outputSymbols.stream().map(Symbol::getName).collect(Collectors.toList());
}

public List<Symbol> getIdColumnsInTableStore(Metadata metadata, SessionInfo session) {
return Objects.requireNonNull(
metadata.getTableSchema(session, qualifiedObjectName).orElse(null))
.getColumns()
.stream()
.filter(columnSchema -> columnSchema.getColumnCategory() == TsTableColumnCategory.TAG)
.map(columnSchema -> Symbol.of(columnSchema.getName()))
.collect(Collectors.toList());
}

public boolean isMeasurementOrTimeColumn(Symbol symbol) {
ColumnSchema columnSchema = assignments.get(symbol);
return columnSchema != null
Expand Down
Loading