[opt](vector) add score function push down
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownVirtualColumnsIntoOlapScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownVirtualColumnsIntoOlapScan.java
index 0d25d8b..47dc710 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownVirtualColumnsIntoOlapScan.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownVirtualColumnsIntoOlapScan.java
@@ -24,6 +24,7 @@
import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.functions.scalar.InnerProductApproximate;
import org.apache.doris.nereids.trees.expressions.functions.scalar.L2DistanceApproximate;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.Score;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
@@ -72,14 +73,14 @@
Map<Expression, Expression> replaceMap = Maps.newHashMap();
ImmutableList.Builder<NamedExpression> virtualColumnsBuilder = ImmutableList.builder();
for (Expression conjunct : filter.getConjuncts()) {
- Set<Expression> distanceFunctions = conjunct.collect(
- e -> e instanceof L2DistanceApproximate || e instanceof InnerProductApproximate);
- for (Expression distanceFunction : distanceFunctions) {
- if (replaceMap.containsKey(distanceFunction)) {
+ Set<Expression> needPushDownFunctions = conjunct.collect(e -> e instanceof L2DistanceApproximate
+ || e instanceof InnerProductApproximate || e instanceof Score);
+ for (Expression needPushDownFunction : needPushDownFunctions) {
+ if (replaceMap.containsKey(needPushDownFunction)) {
continue;
}
- Alias alias = new Alias(distanceFunction);
- replaceMap.put(distanceFunction, alias.toSlot());
+ Alias alias = new Alias(needPushDownFunction);
+ replaceMap.put(needPushDownFunction, alias.toSlot());
virtualColumnsBuilder.add(alias);
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/InnerProductApproximate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/InnerProductApproximate.java
index 8c66e39..6c85455 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/InnerProductApproximate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/InnerProductApproximate.java
@@ -23,7 +23,6 @@
import org.apache.doris.nereids.trees.expressions.functions.ComputePrecisionForArrayItemAgg;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
-import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.ArrayType;
import org.apache.doris.nereids.types.DoubleType;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Score.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Score.java
index e80e95a..b414d53 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Score.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Score.java
@@ -64,4 +64,4 @@
public boolean isDeterministic() {
return false;
}
-}
\ No newline at end of file
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java
index 2950936..c55f1d9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java
@@ -128,7 +128,7 @@
}
}
if (indexDef.getIndexType() == IndexDef.IndexType.ANN
- && ((OlapTable) table).getKeysType() != KeysType.DUP_KEYS) {
+ && ((OlapTable) table).getKeysType() != KeysType.DUP_KEYS) {
throw new AnalysisException("ANN index can only be built on DUP KEYS tables");
}
indexDef.validate();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java
index f0b4999..2da6d05 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java
@@ -87,7 +87,7 @@
tableName.analyze(ctx);
}
DatabaseIf<Table> db = Env.getCurrentEnv().getCatalogMgr().getInternalCatalog()
- .getDb(tableName.getDb()).orElse(null);
+ .getDb(tableName.getDb()).orElse(null);
if (db == null) {
throw new AnalysisException("Database[" + tableName.getDb() + "] is not exist");
}
@@ -100,7 +100,7 @@
throw new AnalysisException("Only olap table support create index");
}
if (indexDef.getIndexType() == IndexDef.IndexType.ANN
- && ((OlapTable) table).getKeysType() != KeysType.DUP_KEYS) {
+ && ((OlapTable) table).getKeysType() != KeysType.DUP_KEYS) {
throw new AnalysisException("ANN index can only be built on DUP KEYS tables");
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index 843df2f..8f5c031 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -1567,7 +1567,7 @@
columnsDesc.add(tColumn);
}
}
-
+
// Add virtual column to ColumnsDesc so that backend could
// get correct table_schema.
for (SlotDescriptor slot : desc.getSlots()) {
@@ -1912,15 +1912,15 @@
computeNumNodes();
computeStatsForNereids();
// Update SlotDescriptor before construction of thrift message.
- int virtual_column_idx = 0;
+ int virtualColumnIdx = 0;
for (SlotDescriptor slot : desc.getSlots()) {
if (slot.getVirtualColumn() != null) {
- virtual_column_idx++;
+ virtualColumnIdx++;
Column column = new Column();
// Set the name of virtual column to be unique.
- column.setName("__DORIS_VIRTUAL_COL__" + virtual_column_idx);
+ column.setName("__DORIS_VIRTUAL_COL__" + virtualColumnIdx);
// Just make sure the unique id is not conflict with other columns.
- column.setUniqueId(Integer.MAX_VALUE - virtual_column_idx);
+ column.setUniqueId(Integer.MAX_VALUE - virtualColumnIdx);
column.setType(slot.getType());
column.setIsAllowNull(slot.getIsNullable());
slot.setColumn(column);