[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);