Skip to content

Commit 36c2c32

Browse files
committed
Remove old duplicate methods in CalciteLogicalIndexScan
Signed-off-by: Songkan Tang <songkant@amazon.com>
1 parent f6a85a7 commit 36c2c32

1 file changed

Lines changed: 0 additions & 108 deletions

File tree

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/CalciteLogicalIndexScan.java

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,10 @@
55

66
package org.opensearch.sql.opensearch.storage.scan;
77

8-
import static org.opensearch.sql.opensearch.storage.serde.ScriptParameterHelper.MISSING_MAX;
9-
108
import com.google.common.collect.ImmutableList;
11-
import java.util.ArrayList;
12-
import java.util.LinkedHashMap;
139
import java.util.List;
1410
import java.util.Map;
1511
import java.util.Objects;
16-
import java.util.function.Supplier;
1712
import java.util.stream.Collectors;
1813
import lombok.Getter;
1914
import org.apache.calcite.plan.Convention;
@@ -26,7 +21,6 @@
2621
import org.apache.calcite.rel.RelCollation;
2722
import org.apache.calcite.rel.RelCollations;
2823
import org.apache.calcite.rel.RelFieldCollation;
29-
import org.apache.calcite.rel.RelFieldCollation.Direction;
3024
import org.apache.calcite.rel.core.Aggregate;
3125
import org.apache.calcite.rel.core.Filter;
3226
import org.apache.calcite.rel.core.Project;
@@ -37,19 +31,13 @@
3731
import org.apache.calcite.rel.type.RelDataTypeFactory;
3832
import org.apache.calcite.rel.type.RelDataTypeField;
3933
import org.apache.calcite.rex.RexBuilder;
40-
import org.apache.calcite.rex.RexCall;
4134
import org.apache.calcite.rex.RexNode;
4235
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
43-
import org.apache.calcite.sql.type.SqlTypeName;
4436
import org.apache.commons.lang3.tuple.Pair;
4537
import org.apache.logging.log4j.LogManager;
4638
import org.apache.logging.log4j.Logger;
4739
import org.opensearch.search.aggregations.AggregationBuilder;
4840
import org.opensearch.search.aggregations.bucket.composite.CompositeAggregationBuilder;
49-
import org.opensearch.search.sort.ScriptSortBuilder.ScriptSortType;
50-
import org.opensearch.search.sort.SortBuilder;
51-
import org.opensearch.search.sort.SortBuilders;
52-
import org.opensearch.search.sort.SortOrder;
5341
import org.opensearch.sql.ast.expression.Argument;
5442
import org.opensearch.sql.calcite.utils.OpenSearchTypeFactory;
5543
import org.opensearch.sql.common.setting.Settings;
@@ -60,7 +48,6 @@
6048
import org.opensearch.sql.opensearch.planner.rules.EnumerableIndexScanRule;
6149
import org.opensearch.sql.opensearch.planner.rules.OpenSearchIndexRules;
6250
import org.opensearch.sql.opensearch.request.AggregateAnalyzer;
63-
import org.opensearch.sql.opensearch.request.OpenSearchRequestBuilder.PushDownUnSupportedException;
6451
import org.opensearch.sql.opensearch.request.PredicateAnalyzer;
6552
import org.opensearch.sql.opensearch.request.PredicateAnalyzer.QueryExpression;
6653
import org.opensearch.sql.opensearch.response.agg.OpenSearchAggregationResponseParser;
@@ -74,7 +61,6 @@
7461
import org.opensearch.sql.opensearch.storage.scan.context.PushDownContext;
7562
import org.opensearch.sql.opensearch.storage.scan.context.PushDownType;
7663
import org.opensearch.sql.opensearch.storage.scan.context.RareTopDigest;
77-
import org.opensearch.sql.opensearch.storage.scan.context.SortExprDigest;
7864

7965
/** The logical relational operator representing a scan of an OpenSearchIndex type. */
8066
@Getter
@@ -440,98 +426,4 @@ public AbstractRelNode pushDownLimit(LogicalSort sort, Integer limit, Integer of
440426
}
441427
return null;
442428
}
443-
444-
/**
445-
* Push down sort expressions to OpenSearch level. Supports mixed RexCall and field sort
446-
* expressions.
447-
*
448-
* @param sortExprDigests List of SortExprDigest with expressions and collation information
449-
* @return CalciteLogicalIndexScan with sort expressions pushed down, or null if pushdown fails
450-
*/
451-
public CalciteLogicalIndexScan pushdownSortExpr(List<SortExprDigest> sortExprDigests) {
452-
try {
453-
if (sortExprDigests == null || sortExprDigests.isEmpty()) {
454-
return null;
455-
}
456-
457-
CalciteLogicalIndexScan newScan =
458-
new CalciteLogicalIndexScan(
459-
getCluster(),
460-
traitSet,
461-
hints,
462-
table,
463-
osIndex,
464-
getRowType(),
465-
pushDownContext.cloneWithoutSort());
466-
467-
List<Supplier<SortBuilder<?>>> sortBuilderSuppliers = new ArrayList<>();
468-
for (SortExprDigest digest : sortExprDigests) {
469-
SortOrder order =
470-
Direction.DESCENDING.equals(digest.getDirection()) ? SortOrder.DESC : SortOrder.ASC;
471-
472-
if (digest.isSimpleFieldReference()) {
473-
String missing =
474-
switch (digest.getNullDirection()) {
475-
case FIRST -> "_first";
476-
case LAST -> "_last";
477-
default -> null;
478-
};
479-
sortBuilderSuppliers.add(
480-
() -> SortBuilders.fieldSort(digest.getFieldName()).order(order).missing(missing));
481-
continue;
482-
}
483-
RexNode sortExpr = digest.getExpression();
484-
assert sortExpr instanceof RexCall : "sort expression should be RexCall";
485-
Map<String, Object> missingValueParams =
486-
new LinkedHashMap<>() {
487-
{
488-
put(MISSING_MAX, digest.isMissingMax());
489-
}
490-
};
491-
// Complex expression - use ScriptQueryExpression to generate script for sort
492-
PredicateAnalyzer.ScriptQueryExpression scriptExpr =
493-
new PredicateAnalyzer.ScriptQueryExpression(
494-
digest.getExpression(),
495-
rowType,
496-
osIndex.getAllFieldTypes(),
497-
getCluster(),
498-
missingValueParams);
499-
// Determine the correct ScriptSortType based on the expression's return type
500-
ScriptSortType sortType = getScriptSortType(sortExpr.getType());
501-
502-
sortBuilderSuppliers.add(
503-
() -> SortBuilders.scriptSort(scriptExpr.getScript(), sortType).order(order));
504-
}
505-
506-
// Create action to push down sort expressions to OpenSearch
507-
OSRequestBuilderAction action =
508-
requestBuilder -> requestBuilder.pushDownSortSuppliers(sortBuilderSuppliers);
509-
510-
newScan.pushDownContext.add(PushDownType.SORT_EXPR, sortExprDigests, action);
511-
return newScan;
512-
} catch (Exception e) {
513-
if (LOG.isDebugEnabled()) {
514-
LOG.debug("Cannot pushdown sort expressions: {}", sortExprDigests, e);
515-
}
516-
}
517-
return null;
518-
}
519-
520-
/**
521-
* Determine the appropriate ScriptSortType based on the expression's return type.
522-
*
523-
* @param relDataType the return type of the expression
524-
* @return the appropriate ScriptSortType
525-
*/
526-
private ScriptSortType getScriptSortType(RelDataType relDataType) {
527-
if (SqlTypeName.CHAR_TYPES.contains(relDataType.getSqlTypeName())) {
528-
return ScriptSortType.STRING;
529-
} else if (SqlTypeName.INT_TYPES.contains(relDataType.getSqlTypeName())
530-
|| SqlTypeName.APPROX_TYPES.contains(relDataType.getSqlTypeName())) {
531-
return ScriptSortType.NUMBER;
532-
} else {
533-
throw new PushDownUnSupportedException(
534-
"Unsupported type for sort expression pushdown: " + relDataType);
535-
}
536-
}
537429
}

0 commit comments

Comments
 (0)