Skip to content

Commit 47ab15f

Browse files
committed
Revert "Route pushDownSort count through LIMIT > k validation"
This reverts commit e0564e0.
1 parent e0564e0 commit 47ab15f

2 files changed

Lines changed: 7 additions & 35 deletions

File tree

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

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,13 @@ public boolean pushDownFilter(LogicalFilter filter) {
8989

9090
@Override
9191
public boolean pushDownLimit(LogicalLimit limit) {
92-
validateLimitWithinK(limit.getLimit());
92+
if (options.containsKey("k")) {
93+
int k = Integer.parseInt(options.get("k"));
94+
if (limit.getLimit() > k) {
95+
throw new ExpressionEvaluationException(
96+
String.format("LIMIT %d exceeds k=%d in top-k vector search", limit.getLimit(), k));
97+
}
98+
}
9399
limitPushed = true;
94100
return super.pushDownLimit(limit);
95101
}
@@ -117,23 +123,11 @@ public boolean pushDownSort(LogicalSort sort) {
117123
// Preserve the parent's sort.getCount() → limit pushdown contract: SQL always sets count=0,
118124
// but PPL or future callers may set a non-zero count to combine sort+limit in one node.
119125
if (sort.getCount() != 0) {
120-
validateLimitWithinK(sort.getCount());
121126
requestBuilder.pushDownLimit(sort.getCount(), 0);
122127
}
123128
return true;
124129
}
125130

126-
/** Validates that the requested limit does not exceed k in top-k mode. */
127-
private void validateLimitWithinK(int limit) {
128-
if (options.containsKey("k")) {
129-
int k = Integer.parseInt(options.get("k"));
130-
if (limit > k) {
131-
throw new ExpressionEvaluationException(
132-
String.format("LIMIT %d exceeds k=%d in top-k vector search", limit, k));
133-
}
134-
}
135-
}
136-
137131
@Override
138132
public OpenSearchRequestBuilder build() {
139133
if (filterTypeExplicit && !filterPushed) {

opensearch/src/test/java/org/opensearch/sql/opensearch/storage/scan/VectorSearchQueryBuilderTest.java

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -183,28 +183,6 @@ void pushDownSortPreservesSortCountAsLimit() {
183183
"sort.getCount() should be pushed down as request size");
184184
}
185185

186-
@Test
187-
void pushDownSortCountExceedingKRejects() {
188-
var requestBuilder = createRequestBuilder();
189-
var knnQuery = new WrapperQueryBuilder("{\"knn\":{}}");
190-
var builder = new VectorSearchQueryBuilder(requestBuilder, knnQuery, Map.of("k", "5"));
191-
192-
var dummyChild = new LogicalValues(Collections.emptyList());
193-
// LogicalSort with count=10 exceeds k=5 — should be rejected
194-
var sort =
195-
new org.opensearch.sql.planner.logical.LogicalSort(
196-
dummyChild,
197-
10,
198-
List.of(
199-
org.apache.commons.lang3.tuple.ImmutablePair.of(
200-
org.opensearch.sql.ast.tree.Sort.SortOption.DEFAULT_DESC,
201-
new ReferenceExpression("_score", ExprCoreType.FLOAT))));
202-
203-
ExpressionEvaluationException ex =
204-
assertThrows(ExpressionEvaluationException.class, () -> builder.pushDownSort(sort));
205-
assertTrue(ex.getMessage().contains("LIMIT 10 exceeds k=5"));
206-
}
207-
208186
@Test
209187
void pushDownSortNonScoreFieldRejected() {
210188
var requestBuilder = createRequestBuilder();

0 commit comments

Comments
 (0)