This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch vector-index-dev
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/vector-index-dev by this push:
new 6798572f973 [opt](vector) refactor some scan code
6798572f973 is described below
commit 6798572f973b21b3ab99ef80df76da7df76c4950
Author: morrySnow <[email protected]>
AuthorDate: Mon May 19 12:16:02 2025 +0800
[opt](vector) refactor some scan code
---
.../trees/copier/LogicalPlanDeepCopier.java | 30 +++++++++-
.../plans/logical/LogicalCatalogRelation.java | 68 ++++++++++++++++++++--
.../nereids/trees/plans/logical/LogicalEsScan.java | 22 +++++--
.../trees/plans/logical/LogicalFileScan.java | 40 +++++++------
.../trees/plans/logical/LogicalHudiScan.java | 45 +++++++-------
.../trees/plans/logical/LogicalJdbcScan.java | 22 ++++---
.../trees/plans/logical/LogicalOdbcScan.java | 18 +++---
.../trees/plans/logical/LogicalOlapScan.java | 18 +-----
.../trees/plans/logical/LogicalSchemaScan.java | 59 +++++++++++--------
9 files changed, 216 insertions(+), 106 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/LogicalPlanDeepCopier.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/LogicalPlanDeepCopier.java
index 89490e38cd6..a8b468aa78a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/LogicalPlanDeepCopier.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/LogicalPlanDeepCopier.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.trees.copier;
import org.apache.doris.nereids.exceptions.AnalysisException;
import org.apache.doris.nereids.properties.OrderKey;
+import org.apache.doris.nereids.trees.expressions.Alias;
import org.apache.doris.nereids.trees.expressions.ExprId;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.MarkJoinSlotReference;
@@ -36,6 +37,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalAssertNumRows;
import org.apache.doris.nereids.trees.plans.logical.LogicalCTEAnchor;
import org.apache.doris.nereids.trees.plans.logical.LogicalCTEConsumer;
import org.apache.doris.nereids.trees.plans.logical.LogicalCTEProducer;
+import org.apache.doris.nereids.trees.plans.logical.LogicalCatalogRelation;
import
org.apache.doris.nereids.trees.plans.logical.LogicalDeferMaterializeOlapScan;
import
org.apache.doris.nereids.trees.plans.logical.LogicalDeferMaterializeTopN;
import org.apache.doris.nereids.trees.plans.logical.LogicalEmptyRelation;
@@ -94,7 +96,33 @@ public class LogicalPlanDeepCopier extends
DefaultPlanRewriter<DeepCopierContext
return newRelation;
}
- // TODO update scan
+ @Override
+ public Plan visitLogicalCatalogRelation(LogicalCatalogRelation
catalogRelation, DeepCopierContext context) {
+ if
(context.getRelationReplaceMap().containsKey(catalogRelation.getRelationId())) {
+ return
context.getRelationReplaceMap().get(catalogRelation.getRelationId());
+ }
+ LogicalCatalogRelation newRelation =
+
catalogRelation.withRelationId(StatementScopeIdGenerator.newRelationId());
+ updateReplaceMapWithOutput(catalogRelation, newRelation,
context.exprIdReplaceMap);
+ List<NamedExpression> virtualColumns =
catalogRelation.getVirtualColumns().stream()
+ .map(e -> {
+ if (e instanceof Alias) {
+ return new Alias(((Alias) e).child(), e.getName());
+ }
+ return e;
+ })
+ .collect(ImmutableList.toImmutableList());
+ for (int i = 0; i < virtualColumns.size(); i++) {
+
context.exprIdReplaceMap.put(catalogRelation.getVirtualColumns().get(i).getExprId(),
+ virtualColumns.get(i).getExprId());
+ }
+ virtualColumns = virtualColumns.stream()
+ .map(o -> (NamedExpression)
ExpressionDeepCopier.INSTANCE.deepCopy(o, context))
+ .collect(ImmutableList.toImmutableList());
+ newRelation = newRelation.withVirtualColumns(virtualColumns);
+ context.putRelation(catalogRelation.getRelationId(), newRelation);
+ return newRelation;
+ }
@Override
public Plan visitLogicalEmptyRelation(LogicalEmptyRelation emptyRelation,
DeepCopierContext context) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
index d6e90804830..e30aab816e2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
@@ -31,6 +31,7 @@ import org.apache.doris.nereids.properties.FdFactory;
import org.apache.doris.nereids.properties.FdItem;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.TableFdItem;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.trees.plans.PlanType;
@@ -41,6 +42,7 @@ import org.apache.doris.qe.ConnectContext;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableSet;
import java.util.Collection;
@@ -60,22 +62,40 @@ public abstract class LogicalCatalogRelation extends
LogicalRelation implements
protected final ImmutableList<Slot> operativeSlots;
+ // use for virtual slot
+ protected final List<NamedExpression> virtualColumns;
+
public LogicalCatalogRelation(RelationId relationId, PlanType type,
TableIf table, List<String> qualifier) {
this(relationId, type, table, qualifier, Optional.empty(),
Optional.empty());
}
public LogicalCatalogRelation(RelationId relationId, PlanType type,
TableIf table, List<String> qualifier,
Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
- this(relationId, type, table, qualifier, groupExpression,
logicalProperties, ImmutableList.of());
+ this(relationId, type, table, qualifier, ImmutableList.of(),
ImmutableList.of(),
+ groupExpression, logicalProperties);
}
+ /**
+ * Constructs a LogicalCatalogRelation with specified parameters.
+ *
+ * @param relationId Unique identifier for this relation
+ * @param type Plan type
+ * @param table Table object associated with this relation
+ * @param qualifier List of qualifiers, typically [catalogName,
databaseName]
+ * @param operativeSlots Collection of operative slots
+ * @param virtualColumns List of virtual columns
+ * @param groupExpression Optional group expression
+ * @param logicalProperties Optional logical properties
+ */
public LogicalCatalogRelation(RelationId relationId, PlanType type,
TableIf table, List<String> qualifier,
- Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties,
- Collection<Slot> operativeSlots) {
+ Collection<Slot> operativeSlots, List<NamedExpression>
virtualColumns,
+ Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
super(relationId, type, groupExpression, logicalProperties);
this.table = Objects.requireNonNull(table, "table can not be null");
this.qualifier =
ImmutableList.copyOf(Objects.requireNonNull(qualifier, "qualifier can not be
null"));
this.operativeSlots = ImmutableList.copyOf(operativeSlots);
+ this.virtualColumns =
Utils.fastToImmutableList(Objects.requireNonNull(virtualColumns,
+ "virtualColumns can not be null"));
}
@Override
@@ -108,10 +128,16 @@ public abstract class LogicalCatalogRelation extends
LogicalRelation implements
@Override
public List<Slot> computeOutput() {
- return table.getBaseSchema()
+ Builder<Slot> slots = ImmutableList.builder();
+ table.getBaseSchema()
.stream()
.map(col -> SlotReference.fromColumn(table, col, qualified()))
- .collect(ImmutableList.toImmutableList());
+ .forEach(slots::add);
+ // add virtual slots
+ for (NamedExpression virtualColumn : virtualColumns) {
+ slots.add(virtualColumn.toSlot());
+ }
+ return slots.build();
}
public List<String> getQualifier() {
@@ -132,6 +158,15 @@ public abstract class LogicalCatalogRelation extends
LogicalRelation implements
return Utils.qualifiedName(qualifier, table.getName());
}
+ @Override
+ public List<Slot> getOperativeSlots() {
+ return operativeSlots;
+ }
+
+ public List<NamedExpression> getVirtualColumns() {
+ return virtualColumns;
+ }
+
@Override
public void computeUnique(DataTrait.Builder builder) {
Set<Slot> outputSet = Utils.fastToImmutableSet(getOutputSet());
@@ -205,4 +240,27 @@ public abstract class LogicalCatalogRelation extends
LogicalRelation implements
// don't generate any equal pair
}
+ public LogicalCatalogRelation withVirtualColumns(List<NamedExpression>
virtualColumns) {
+ return this;
+ }
+
+ public abstract LogicalCatalogRelation withRelationId(RelationId
relationId);
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+ LogicalCatalogRelation that = (LogicalCatalogRelation) o;
+ return Objects.equals(operativeSlots, that.operativeSlots)
+ && Objects.equals(virtualColumns, that.virtualColumns);
+ }
+
+ @Override
+ public int hashCode() {
+ return super.hashCode();
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
index 8fb916b8a5e..2835c8e69cf 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
@@ -20,12 +20,15 @@ package org.apache.doris.nereids.trees.plans.logical;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.RelationId;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.Utils;
+import com.google.common.collect.ImmutableList;
+
import java.util.List;
import java.util.Optional;
@@ -38,13 +41,15 @@ public class LogicalEsScan extends LogicalCatalogRelation {
* Constructor for LogicalEsScan.
*/
public LogicalEsScan(RelationId id, TableIf table, List<String> qualifier,
+ List<NamedExpression> virtualColumns,
Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
- super(id, PlanType.LOGICAL_ES_SCAN, table, qualifier, groupExpression,
logicalProperties);
+ super(id, PlanType.LOGICAL_ES_SCAN, table, qualifier,
+ ImmutableList.of(), virtualColumns, groupExpression,
logicalProperties);
}
public LogicalEsScan(RelationId id, TableIf table, List<String> qualifier)
{
- this(id, table, qualifier, Optional.empty(), Optional.empty());
+ this(id, table, qualifier, ImmutableList.of(), Optional.empty(),
Optional.empty());
}
@Override
@@ -57,19 +62,24 @@ public class LogicalEsScan extends LogicalCatalogRelation {
@Override
public LogicalEsScan withGroupExpression(Optional<GroupExpression>
groupExpression) {
- return new LogicalEsScan(relationId, table, qualifier, groupExpression,
- Optional.of(getLogicalProperties()));
+ return new LogicalEsScan(relationId, table, qualifier, virtualColumns,
+ groupExpression, Optional.of(getLogicalProperties()));
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
- return new LogicalEsScan(relationId, table, qualifier,
groupExpression, logicalProperties);
+ return new LogicalEsScan(relationId, table, qualifier, virtualColumns,
groupExpression, logicalProperties);
}
@Override
public LogicalEsScan withRelationId(RelationId relationId) {
- return new LogicalEsScan(relationId, table, qualifier,
Optional.empty(), Optional.empty());
+ return new LogicalEsScan(relationId, table, qualifier, virtualColumns,
Optional.empty(), Optional.empty());
+ }
+
+ @Override
+ public LogicalEsScan withVirtualColumns(List<NamedExpression>
virtualColumns) {
+ return new LogicalEsScan(relationId, table, qualifier, virtualColumns,
Optional.empty(), Optional.empty());
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
index 1f5f71f7baf..a6d22688543 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
@@ -24,6 +24,7 @@ import org.apache.doris.datasource.mvcc.MvccUtil;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.trees.TableSample;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.RelationId;
@@ -31,6 +32,7 @@ import
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.List;
@@ -47,26 +49,26 @@ public class LogicalFileScan extends LogicalCatalogRelation
{
protected final Optional<TableSample> tableSample;
protected final Optional<TableSnapshot> tableSnapshot;
+ public LogicalFileScan(RelationId id, ExternalTable table, List<String>
qualifier,
+ Optional<TableSample> tableSample, Optional<TableSnapshot>
tableSnapshot) {
+ this(id, table, qualifier,
table.initSelectedPartitions(MvccUtil.getSnapshotFromContext(table)),
+ tableSample, tableSnapshot, ImmutableList.of(),
Optional.empty(), Optional.empty());
+ }
+
/**
* Constructor for LogicalFileScan.
*/
protected LogicalFileScan(RelationId id, ExternalTable table, List<String>
qualifier,
- Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties,
SelectedPartitions selectedPartitions, Optional<TableSample>
tableSample,
- Optional<TableSnapshot> tableSnapshot) {
- super(id, PlanType.LOGICAL_FILE_SCAN, table, qualifier,
groupExpression, logicalProperties);
+ Optional<TableSnapshot> tableSnapshot, List<NamedExpression>
virtualColumns,
+ Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
+ super(id, PlanType.LOGICAL_FILE_SCAN, table, qualifier,
ImmutableList.of(), virtualColumns,
+ groupExpression, logicalProperties);
this.selectedPartitions = selectedPartitions;
this.tableSample = tableSample;
this.tableSnapshot = tableSnapshot;
}
- public LogicalFileScan(RelationId id, ExternalTable table, List<String>
qualifier,
- Optional<TableSample> tableSample, Optional<TableSnapshot>
tableSnapshot) {
- this(id, table, qualifier, Optional.empty(), Optional.empty(),
-
table.initSelectedPartitions(MvccUtil.getSnapshotFromContext(table)),
- tableSample, tableSnapshot);
- }
-
public SelectedPartitions getSelectedPartitions() {
return selectedPartitions;
}
@@ -96,26 +98,30 @@ public class LogicalFileScan extends LogicalCatalogRelation
{
@Override
public LogicalFileScan withGroupExpression(Optional<GroupExpression>
groupExpression) {
- return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier, groupExpression,
- Optional.of(getLogicalProperties()), selectedPartitions,
tableSample, tableSnapshot);
+ return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier,
+ selectedPartitions, tableSample, tableSnapshot,
virtualColumns, groupExpression,
+ Optional.of(getLogicalProperties()));
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier,
- groupExpression, logicalProperties, selectedPartitions,
tableSample, tableSnapshot);
+ selectedPartitions, tableSample, tableSnapshot, virtualColumns,
+ groupExpression, logicalProperties);
}
public LogicalFileScan withSelectedPartitions(SelectedPartitions
selectedPartitions) {
- return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier, Optional.empty(),
- Optional.of(getLogicalProperties()), selectedPartitions,
tableSample, tableSnapshot);
+ return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier,
+ selectedPartitions, tableSample, tableSnapshot, virtualColumns,
+ Optional.empty(), Optional.of(getLogicalProperties()));
}
@Override
public LogicalFileScan withRelationId(RelationId relationId) {
- return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier, Optional.empty(),
- Optional.empty(), selectedPartitions, tableSample,
tableSnapshot);
+ return new LogicalFileScan(relationId, (ExternalTable) table,
qualifier,
+ selectedPartitions, tableSample, tableSnapshot, virtualColumns,
+ Optional.empty(), Optional.empty());
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java
index b742142093b..f53703353c4 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHudiScan.java
@@ -35,6 +35,7 @@ import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.GreaterThan;
import org.apache.doris.nereids.trees.expressions.GreaterThanEqual;
import org.apache.doris.nereids.trees.expressions.LessThanEqual;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.trees.expressions.literal.StringLiteral;
@@ -43,6 +44,7 @@ import org.apache.doris.nereids.trees.plans.RelationId;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.Utils;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.apache.hudi.common.table.HoodieTableMetaClient;
import org.apache.logging.log4j.LogManager;
@@ -69,12 +71,13 @@ public class LogicalHudiScan extends LogicalFileScan {
* Constructor for LogicalHudiScan.
*/
protected LogicalHudiScan(RelationId id, ExternalTable table, List<String>
qualifier,
- Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties,
SelectedPartitions selectedPartitions, Optional<TableSample>
tableSample,
Optional<TableSnapshot> tableSnapshot,
- Optional<TableScanParams> scanParams,
Optional<IncrementalRelation> incrementalRelation) {
- super(id, table, qualifier, groupExpression, logicalProperties,
- selectedPartitions, tableSample, tableSnapshot);
+ Optional<TableScanParams> scanParams,
Optional<IncrementalRelation> incrementalRelation,
+ List<NamedExpression> virtualColumns,
+ Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
+ super(id, table, qualifier, selectedPartitions, tableSample,
tableSnapshot, virtualColumns,
+ groupExpression, logicalProperties);
Objects.requireNonNull(scanParams, "scanParams should not null");
Objects.requireNonNull(incrementalRelation, "incrementalRelation
should not null");
this.scanParams = scanParams;
@@ -83,9 +86,9 @@ public class LogicalHudiScan extends LogicalFileScan {
public LogicalHudiScan(RelationId id, ExternalTable table, List<String>
qualifier,
Optional<TableSample> tableSample, Optional<TableSnapshot>
tableSnapshot) {
- this(id, table, qualifier, Optional.empty(), Optional.empty(),
- ((HMSExternalTable)
table).initHudiSelectedPartitions(tableSnapshot), tableSample, tableSnapshot,
- Optional.empty(), Optional.empty());
+ this(id, table, qualifier, ((HMSExternalTable)
table).initHudiSelectedPartitions(tableSnapshot), tableSample,
+ tableSnapshot, Optional.empty(), Optional.empty(),
+ ImmutableList.of(), Optional.empty(), Optional.empty());
}
public Optional<TableScanParams> getScanParams() {
@@ -134,30 +137,30 @@ public class LogicalHudiScan extends LogicalFileScan {
@Override
public LogicalHudiScan withGroupExpression(Optional<GroupExpression>
groupExpression) {
- return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier, groupExpression,
- Optional.of(getLogicalProperties()), selectedPartitions,
tableSample, tableSnapshot,
- scanParams, incrementalRelation);
+ return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier,
+ selectedPartitions, tableSample, tableSnapshot, scanParams,
incrementalRelation, virtualColumns,
+ groupExpression, Optional.of(getLogicalProperties()));
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier,
- groupExpression, logicalProperties, selectedPartitions,
tableSample, tableSnapshot,
- scanParams, incrementalRelation);
+ selectedPartitions, tableSample, tableSnapshot, scanParams,
incrementalRelation, virtualColumns,
+ groupExpression, logicalProperties);
}
public LogicalHudiScan withSelectedPartitions(SelectedPartitions
selectedPartitions) {
- return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier, Optional.empty(),
- Optional.of(getLogicalProperties()), selectedPartitions,
tableSample, tableSnapshot,
- scanParams, incrementalRelation);
+ return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier,
+ selectedPartitions, tableSample, tableSnapshot, scanParams,
incrementalRelation, virtualColumns,
+ Optional.empty(), Optional.of(getLogicalProperties()));
}
@Override
public LogicalHudiScan withRelationId(RelationId relationId) {
- return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier, Optional.empty(),
- Optional.empty(), selectedPartitions, tableSample,
tableSnapshot,
- scanParams, incrementalRelation);
+ return new LogicalHudiScan(relationId, (ExternalTable) table,
qualifier,
+ selectedPartitions, tableSample, tableSnapshot, scanParams,
incrementalRelation, virtualColumns,
+ Optional.empty(), Optional.empty());
}
@Override
@@ -214,8 +217,8 @@ public class LogicalHudiScan extends LogicalFileScan {
}
}
newScanParams = Optional.ofNullable(scanParams);
- return new LogicalHudiScan(relationId, table, qualifier,
Optional.empty(),
- Optional.empty(), selectedPartitions, tableSample,
tableSnapshot,
- newScanParams, newIncrementalRelation);
+ return new LogicalHudiScan(relationId, table, qualifier,
+ selectedPartitions, tableSample, tableSnapshot, newScanParams,
newIncrementalRelation, virtualColumns,
+ Optional.empty(), Optional.empty());
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
index 53176f72c53..13491ea76f9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
@@ -22,6 +22,7 @@ import org.apache.doris.catalog.TableIf;
import org.apache.doris.datasource.ExternalTable;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.RelationId;
@@ -29,6 +30,7 @@ import
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Optional;
@@ -41,14 +43,14 @@ public class LogicalJdbcScan extends LogicalCatalogRelation
{
/**
* Constructor for LogicalJdbcScan.
*/
- public LogicalJdbcScan(RelationId id, TableIf table, List<String>
qualifier,
- Optional<GroupExpression> groupExpression,
- Optional<LogicalProperties> logicalProperties) {
- super(id, PlanType.LOGICAL_JDBC_SCAN, table, qualifier,
groupExpression, logicalProperties);
+ public LogicalJdbcScan(RelationId id, TableIf table, List<String>
qualifier, List<NamedExpression> virtualColumns,
+ Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
+ super(id, PlanType.LOGICAL_JDBC_SCAN, table, qualifier,
ImmutableList.of(), virtualColumns,
+ groupExpression, logicalProperties);
}
public LogicalJdbcScan(RelationId id, TableIf table, List<String>
qualifier) {
- this(id, table, qualifier, Optional.empty(), Optional.empty());
+ this(id, table, qualifier, ImmutableList.of(), Optional.empty(),
Optional.empty());
}
@Override
@@ -68,19 +70,21 @@ public class LogicalJdbcScan extends LogicalCatalogRelation
{
@Override
public LogicalJdbcScan withGroupExpression(Optional<GroupExpression>
groupExpression) {
- return new LogicalJdbcScan(relationId, table, qualifier,
groupExpression,
- Optional.of(getLogicalProperties()));
+ return new LogicalJdbcScan(relationId, table, qualifier,
virtualColumns,
+ groupExpression, Optional.of(getLogicalProperties()));
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
- return new LogicalJdbcScan(relationId, table, qualifier,
groupExpression, logicalProperties);
+ return new LogicalJdbcScan(relationId, table, qualifier,
virtualColumns,
+ groupExpression, logicalProperties);
}
@Override
public LogicalJdbcScan withRelationId(RelationId relationId) {
- return new LogicalJdbcScan(relationId, table, qualifier,
Optional.empty(), Optional.empty());
+ return new LogicalJdbcScan(relationId, table, qualifier,
virtualColumns,
+ Optional.empty(), Optional.empty());
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOdbcScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOdbcScan.java
index 3ce9b8d7403..f63585d099f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOdbcScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOdbcScan.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.OdbcTable;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.RelationId;
@@ -28,6 +29,7 @@ import
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.Utils;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Optional;
@@ -37,14 +39,14 @@ import java.util.Optional;
*/
public class LogicalOdbcScan extends LogicalCatalogRelation {
- public LogicalOdbcScan(RelationId id, TableIf table, List<String>
qualifier,
- Optional<GroupExpression> groupExpression,
- Optional<LogicalProperties> logicalProperties) {
- super(id, PlanType.LOGICAL_ODBC_SCAN, table, qualifier,
groupExpression, logicalProperties);
+ public LogicalOdbcScan(RelationId id, TableIf table, List<String>
qualifier, List<NamedExpression> virtualColumns,
+ Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
+ super(id, PlanType.LOGICAL_ODBC_SCAN, table, qualifier,
+ ImmutableList.of(), virtualColumns, groupExpression,
logicalProperties);
}
public LogicalOdbcScan(RelationId id, TableIf table, List<String>
qualifier) {
- this(id, table, qualifier, Optional.empty(), Optional.empty());
+ this(id, table, qualifier, ImmutableList.of(), Optional.empty(),
Optional.empty());
}
@Override
@@ -64,19 +66,19 @@ public class LogicalOdbcScan extends LogicalCatalogRelation
{
@Override
public LogicalOdbcScan withGroupExpression(Optional<GroupExpression>
groupExpression) {
- return new LogicalOdbcScan(relationId, table, qualifier,
groupExpression,
+ return new LogicalOdbcScan(relationId, table, qualifier,
virtualColumns, groupExpression,
Optional.of(getLogicalProperties()));
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
- return new LogicalOdbcScan(relationId, table, qualifier,
groupExpression, logicalProperties);
+ return new LogicalOdbcScan(relationId, table, qualifier,
virtualColumns, groupExpression, logicalProperties);
}
@Override
public LogicalOdbcScan withRelationId(RelationId relationId) {
- return new LogicalOdbcScan(relationId, table, qualifier,
Optional.empty(), Optional.empty());
+ return new LogicalOdbcScan(relationId, table, qualifier,
virtualColumns, Optional.empty(), Optional.empty());
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
index 686e1c65c67..f02e1c42dd3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
@@ -141,9 +141,6 @@ public class LogicalOlapScan extends LogicalCatalogRelation
implements OlapScan
private final Map<String, Set<List<String>>> colToSubPathsMap;
private final Map<Slot, Map<List<String>, SlotReference>> subPathToSlotMap;
- // use for virtual slot
- private final List<NamedExpression> virtualColumns;
-
// use for ann push down
private final List<OrderKey> annOrderKeys;
private final Optional<Long> annLimit;
@@ -211,7 +208,7 @@ public class LogicalOlapScan extends LogicalCatalogRelation
implements OlapScan
Collection<Slot> operativeSlots, List<NamedExpression>
virtualColumns,
List<OrderKey> annOrderKeys, Optional<Long> annLimit) {
super(id, PlanType.LOGICAL_OLAP_SCAN, table, qualifier,
- groupExpression, logicalProperties, operativeSlots);
+ operativeSlots, virtualColumns, groupExpression,
logicalProperties);
Preconditions.checkArgument(selectedPartitionIds != null,
"selectedPartitionIds can not be null");
this.selectedTabletIds = Utils.fastToImmutableList(selectedTabletIds);
@@ -241,7 +238,6 @@ public class LogicalOlapScan extends LogicalCatalogRelation
implements OlapScan
this.directMvScan = directMvScan;
this.colToSubPathsMap = colToSubPathsMap;
this.subPathToSlotMap = Maps.newHashMap();
- this.virtualColumns = Utils.fastToImmutableList(virtualColumns);
this.annOrderKeys = Utils.fastToImmutableList(annOrderKeys);
this.annLimit = annLimit;
}
@@ -380,6 +376,7 @@ public class LogicalOlapScan extends LogicalCatalogRelation
implements OlapScan
* @param virtualColumns generated virtual columns
* @return scan with virtual columns
*/
+ @Override
public LogicalOlapScan withVirtualColumns(List<NamedExpression>
virtualColumns) {
LogicalProperties logicalProperties = getLogicalProperties();
List<Slot> output = Lists.newArrayList(logicalProperties.getOutput());
@@ -554,10 +551,6 @@ public class LogicalOlapScan extends
LogicalCatalogRelation implements OlapScan
return preAggStatus.isUnset();
}
- public List<NamedExpression> getVirtualColumns() {
- return virtualColumns;
- }
-
public List<OrderKey> getAnnOrderKeys() {
return annOrderKeys;
}
@@ -728,7 +721,7 @@ public class LogicalOlapScan extends LogicalCatalogRelation
implements OlapScan
manuallySpecifiedTabletIds, operativeSlots, virtualColumns,
annOrderKeys, annLimit);
}
- Map<Slot, Slot> constructReplaceMap(MTMV mtmv) {
+ private Map<Slot, Slot> constructReplaceMap(MTMV mtmv) {
Map<Slot, Slot> replaceMap = new HashMap<>();
// Need remove invisible column, and then mapping them
List<Slot> originOutputs = new ArrayList<>();
@@ -758,10 +751,6 @@ public class LogicalOlapScan extends
LogicalCatalogRelation implements OlapScan
return replaceMap;
}
- public List<Slot> getOperativeSlots() {
- return operativeSlots;
- }
-
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -782,7 +771,6 @@ public class LogicalOlapScan extends LogicalCatalogRelation
implements OlapScan
&& Objects.equals(selectedPartitionIds,
that.selectedPartitionIds)
&& Objects.equals(hints, that.hints)
&& Objects.equals(tableSample, that.tableSample)
- && Objects.equals(virtualColumns, that.virtualColumns)
&& Objects.equals(annOrderKeys, that.annOrderKeys)
&& Objects.equals(annLimit, that.annLimit);
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
index d969f505a4c..6e5e62da092 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
@@ -20,12 +20,15 @@ package org.apache.doris.nereids.trees.plans.logical;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.RelationId;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.nereids.util.Utils;
+import com.google.common.collect.ImmutableList;
+
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -41,18 +44,31 @@ public class LogicalSchemaScan extends
LogicalCatalogRelation {
private final Optional<String> schemaTable;
public LogicalSchemaScan(RelationId id, TableIf table, List<String>
qualifier) {
- super(id, PlanType.LOGICAL_SCHEMA_SCAN, table, qualifier);
- this.filterPushed = false;
- this.schemaCatalog = Optional.empty();
- this.schemaDatabase = Optional.empty();
- this.schemaTable = Optional.empty();
+ this(id, table, qualifier, false,
+ Optional.empty(), Optional.empty(), Optional.empty(),
ImmutableList.of(),
+ Optional.empty(), Optional.empty());
}
- public LogicalSchemaScan(RelationId id, TableIf table, List<String>
qualifier,
- Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties,
- boolean filterPushed, Optional<String> schemaCatalog,
Optional<String> schemaDatabase,
- Optional<String> schemaTable) {
- super(id, PlanType.LOGICAL_SCHEMA_SCAN, table, qualifier,
groupExpression, logicalProperties);
+ /**
+ * Constructs a LogicalSchemaScan with the specified parameters.
+ *
+ * @param id Unique identifier for this relation
+ * @param table The table interface representing the underlying data source
+ * @param qualifier The qualifier list representing the path to this table
+ * @param filterPushed Whether filter has been pushed down to this scan
operation
+ * @param schemaCatalog Optional catalog name in the schema
+ * @param schemaDatabase Optional database name in the schema
+ * @param schemaTable Optional table name in the schema
+ * @param virtualColumns List of virtual columns to be included in the scan
+ * @param groupExpression Optional group expression for memo representation
+ * @param logicalProperties Optional logical properties for this plan node
+ */
+ public LogicalSchemaScan(RelationId id, TableIf table, List<String>
qualifier, boolean filterPushed,
+ Optional<String> schemaCatalog, Optional<String> schemaDatabase,
Optional<String> schemaTable,
+ List<NamedExpression> virtualColumns,
+ Optional<GroupExpression> groupExpression,
Optional<LogicalProperties> logicalProperties) {
+ super(id, PlanType.LOGICAL_SCHEMA_SCAN, table, qualifier,
ImmutableList.of(), virtualColumns,
+ groupExpression, logicalProperties);
this.filterPushed = filterPushed;
this.schemaCatalog = schemaCatalog;
this.schemaDatabase = schemaDatabase;
@@ -75,11 +91,6 @@ public class LogicalSchemaScan extends
LogicalCatalogRelation {
return schemaTable;
}
- @Override
- public TableIf getTable() {
- return table;
- }
-
@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitLogicalSchemaScan(this, context);
@@ -87,28 +98,28 @@ public class LogicalSchemaScan extends
LogicalCatalogRelation {
@Override
public Plan withGroupExpression(Optional<GroupExpression> groupExpression)
{
- return new LogicalSchemaScan(relationId, table, qualifier,
- groupExpression, Optional.of(getLogicalProperties()),
filterPushed,
- schemaCatalog, schemaDatabase, schemaTable);
+ return new LogicalSchemaScan(relationId, table, qualifier,
filterPushed,
+ schemaCatalog, schemaDatabase, schemaTable, virtualColumns,
+ groupExpression, Optional.of(getLogicalProperties()));
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
- return new LogicalSchemaScan(relationId, table, qualifier,
groupExpression, logicalProperties, filterPushed,
- schemaCatalog, schemaDatabase, schemaTable);
+ return new LogicalSchemaScan(relationId, table, qualifier,
filterPushed,
+ schemaCatalog, schemaDatabase, schemaTable, virtualColumns,
groupExpression, logicalProperties);
}
@Override
public LogicalSchemaScan withRelationId(RelationId relationId) {
- return new LogicalSchemaScan(relationId, table, qualifier,
Optional.empty(), Optional.empty(), filterPushed,
- schemaCatalog, schemaDatabase, schemaTable);
+ return new LogicalSchemaScan(relationId, table, qualifier,
filterPushed,
+ schemaCatalog, schemaDatabase, schemaTable, virtualColumns,
Optional.empty(), Optional.empty());
}
public LogicalSchemaScan withSchemaIdentifier(Optional<String>
schemaCatalog, Optional<String> schemaDatabase,
Optional<String> schemaTable) {
- return new LogicalSchemaScan(relationId, table, qualifier,
Optional.empty(),
- Optional.of(getLogicalProperties()), true, schemaCatalog,
schemaDatabase, schemaTable);
+ return new LogicalSchemaScan(relationId, table, qualifier, true,
schemaCatalog, schemaDatabase, schemaTable,
+ virtualColumns, Optional.empty(),
Optional.of(getLogicalProperties()));
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]