Skip to content

Commit 99580ff

Browse files
committed
Address comments
Signed-off-by: Songkan Tang <[email protected]>
1 parent 0492cdf commit 99580ff

20 files changed

+794
-224
lines changed

core/src/main/java/org/opensearch/sql/calcite/utils/PlanUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,13 @@ static boolean sortByFieldsOnly(Sort sort) {
535535
return !sort.getCollation().getFieldCollations().isEmpty() && sort.fetch == null;
536536
}
537537

538+
/**
539+
* Check if the sort collation points to non field project expression.
540+
*
541+
* @param sort the sort operator adding sort order over project
542+
* @param project project operation that may contain non field expressions
543+
* @return flag to indicate whether non field project expression will be sorted
544+
*/
538545
static boolean sortReferencesExpr(Sort sort, Project project) {
539546
if (sort.getCollation().getFieldCollations().isEmpty()) {
540547
return false;

integ-test/src/test/java/org/opensearch/sql/calcite/remote/CalciteExplainIT.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,51 @@ public void testComplexSortExpressionPushDownWithoutExprProjected() throws Excep
899899
assertYamlEqualsIgnoreId(expected, result);
900900
}
901901

902+
@Test
903+
public void testComplexSortExpressionProjectThenSort() throws Exception {
904+
String query =
905+
"source=opensearch-sql_test_index_bank| eval age2 = age + balance | fields age, age2 | sort"
906+
+ " age2";
907+
var result = explainQueryYaml(query);
908+
String expected = loadExpectedPlan("explain_complex_sort_expr_project_then_sort.yaml");
909+
assertYamlEqualsIgnoreId(expected, result);
910+
}
911+
912+
/*
913+
* TODO: A potential optimization is to leverage RexSimplify to simplify -(+($10, $7), $10) to $7
914+
* Above simplification can only work when $10 is nonnull and there is no precision loss of
915+
* expression calculation
916+
*/
917+
@Test
918+
public void testSortNestedComplexExpression() throws Exception {
919+
String query =
920+
"source=opensearch-sql_test_index_bank| eval age2 = age + balance, age3 = age2 - age | sort"
921+
+ " age3";
922+
var result = explainQueryYaml(query);
923+
String expected = loadExpectedPlan("explain_complex_sort_nested_expr.yaml");
924+
assertYamlEqualsIgnoreId(expected, result);
925+
}
926+
927+
@Test
928+
public void testSortComplexExpressionThenSortField() throws Exception {
929+
String query =
930+
"source=opensearch-sql_test_index_bank| eval age2 = age + balance | sort age2, age | eval"
931+
+ " balance2 = abs(balance) | sort age";
932+
var result = explainQueryYaml(query);
933+
String expected = loadExpectedPlan("explain_complex_sort_then_field_sort.yaml");
934+
assertYamlEqualsIgnoreId(expected, result);
935+
}
936+
937+
@Test
938+
public void testSortComplexExprMixedWithSimpleExpr() throws Exception {
939+
String query =
940+
"source=opensearch-sql_test_index_bank| eval age2 = age + balance, balance2 = balance + 1 |"
941+
+ " sort age2, balance2 ";
942+
var result = explainQueryYaml(query);
943+
String expected = loadExpectedPlan("explain_sort_complex_and_simple_expr.yaml");
944+
assertYamlEqualsIgnoreId(expected, result);
945+
}
946+
902947
@Test
903948
public void testRexExplain() throws IOException {
904949
String query =

integ-test/src/test/java/org/opensearch/sql/calcite/remote/CalciteSortCommandIT.java

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package org.opensearch.sql.calcite.remote;
77

88
import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_BANK;
9-
import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_BANK_WITH_NULL_VALUES;
109
import static org.opensearch.sql.util.MatcherUtils.rows;
1110
import static org.opensearch.sql.util.MatcherUtils.schema;
1211
import static org.opensearch.sql.util.MatcherUtils.verifyOrder;
@@ -103,80 +102,4 @@ public void testPushdownSortCastToDoubleExpression() throws IOException {
103102
verifySchema(result, schema("age", "int"), schema("age2", "double"));
104103
verifyOrder(result, rows(28, 28d), rows(32, 32d));
105104
}
106-
107-
@Test
108-
public void testPushdownSortStringExpression() throws IOException {
109-
String ppl =
110-
String.format(
111-
"source=%s | eval firstname2 = substring(firstname, 0, 3) | sort firstname2 | fields"
112-
+ " firstname2, firstname",
113-
TEST_INDEX_BANK_WITH_NULL_VALUES);
114-
if (!isPushdownDisabled()) {
115-
String explained = explainQueryToString(ppl);
116-
assertTrue(explained.contains("SORT_EXPR->[SUBSTRING($0, 0, 3) ASCENDING NULLS_FIRST]"));
117-
}
118-
119-
JSONObject result = executeQuery(ppl);
120-
verifySchema(result, schema("firstname2", "string"), schema("firstname", "string"));
121-
verifyOrder(
122-
result,
123-
rows("Am", "Amber JOHnny"),
124-
rows("Da", "Dale"),
125-
rows("Di", "Dillard"),
126-
rows("El", "Elinor"),
127-
rows("Ha", "Hattie"),
128-
rows("Na", "Nanette"),
129-
rows("Vi", "Virginia"));
130-
}
131-
132-
@Test
133-
public void testPushdownSortExpressionContainsNull() throws IOException {
134-
String ppl =
135-
String.format(
136-
"source=%s | eval balance2 = abs(balance) | sort -balance2 | fields balance, balance2",
137-
TEST_INDEX_BANK_WITH_NULL_VALUES);
138-
if (!isPushdownDisabled()) {
139-
String explained = explainQueryToString(ppl);
140-
assertTrue(explained.contains("SORT_EXPR->[ABS($0) DESCENDING NULLS_LAST]"));
141-
}
142-
143-
JSONObject result = executeQuery(ppl);
144-
verifySchema(result, schema("balance", "bigint"), schema("balance2", "bigint"));
145-
verifyOrder(
146-
result,
147-
rows(48086, 48086),
148-
rows(39225, 39225),
149-
rows(32838, 32838),
150-
rows(4180, 4180),
151-
rows(null, null),
152-
rows(null, null),
153-
rows(null, null));
154-
}
155-
156-
@Test
157-
public void testPushdownSortExpressionWithMixedFieldSort() throws IOException {
158-
String ppl =
159-
String.format(
160-
"source=%s | eval balance2 = abs(balance) | sort -balance2, account_number | fields"
161-
+ " balance2, account_number",
162-
TEST_INDEX_BANK_WITH_NULL_VALUES);
163-
if (!isPushdownDisabled()) {
164-
String explained = explainQueryToString(ppl);
165-
assertTrue(
166-
explained.contains(
167-
"SORT_EXPR->[ABS($1) DESCENDING NULLS_LAST, account_number ASCENDING NULLS_FIRST]"));
168-
}
169-
170-
JSONObject result = executeQuery(ppl);
171-
verifySchema(result, schema("balance2", "bigint"), schema("account_number", "bigint"));
172-
verifyOrder(
173-
result,
174-
rows(48086, 32),
175-
rows(39225, 1),
176-
rows(32838, 13),
177-
rows(4180, 18),
178-
rows(null, 6),
179-
rows(null, 20),
180-
rows(null, 25));
181-
}
182105
}

integ-test/src/test/java/org/opensearch/sql/ppl/SortCommandIT.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_DOG;
1111
import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_WEBLOGS;
1212
import static org.opensearch.sql.util.MatcherUtils.rows;
13+
import static org.opensearch.sql.util.MatcherUtils.schema;
1314
import static org.opensearch.sql.util.MatcherUtils.verifyOrder;
15+
import static org.opensearch.sql.util.MatcherUtils.verifySchema;
1416

1517
import java.io.IOException;
1618
import java.util.ArrayList;
@@ -350,4 +352,66 @@ public void testSortComplexExpressionThenHead() throws IOException {
350352
TEST_INDEX_BANK));
351353
verifyOrder(result, rows(33, 4180, 4213), rows(36, 5686, 5722));
352354
}
355+
356+
@Test
357+
public void testPushdownSortStringExpression() throws IOException {
358+
String ppl =
359+
String.format(
360+
"source=%s | eval firstname2 = substring(firstname, 1, 3) | sort firstname2 | fields"
361+
+ " firstname2, firstname",
362+
TEST_INDEX_BANK_WITH_NULL_VALUES);
363+
364+
JSONObject result = executeQuery(ppl);
365+
verifySchema(result, schema("firstname2", "string"), schema("firstname", "string"));
366+
verifyOrder(
367+
result,
368+
rows("Amb", "Amber JOHnny"),
369+
rows("Dal", "Dale"),
370+
rows("Dil", "Dillard"),
371+
rows("Eli", "Elinor"),
372+
rows("Hat", "Hattie"),
373+
rows("Nan", "Nanette"),
374+
rows("Vir", "Virginia"));
375+
}
376+
377+
@Test
378+
public void testPushdownSortExpressionContainsNull() throws IOException {
379+
String ppl =
380+
String.format(
381+
"source=%s | eval balance2 = abs(balance) | sort -balance2 | fields balance, balance2",
382+
TEST_INDEX_BANK_WITH_NULL_VALUES);
383+
384+
JSONObject result = executeQuery(ppl);
385+
verifySchema(result, schema("balance", "bigint"), schema("balance2", "bigint"));
386+
verifyOrder(
387+
result,
388+
rows(48086, 48086),
389+
rows(39225, 39225),
390+
rows(32838, 32838),
391+
rows(4180, 4180),
392+
rows(null, null),
393+
rows(null, null),
394+
rows(null, null));
395+
}
396+
397+
@Test
398+
public void testPushdownSortExpressionWithMixedFieldSort() throws IOException {
399+
String ppl =
400+
String.format(
401+
"source=%s | eval balance2 = abs(balance) | sort -balance2, account_number | fields"
402+
+ " balance2, account_number",
403+
TEST_INDEX_BANK_WITH_NULL_VALUES);
404+
405+
JSONObject result = executeQuery(ppl);
406+
verifySchema(result, schema("balance2", "bigint"), schema("account_number", "bigint"));
407+
verifyOrder(
408+
result,
409+
rows(48086, 32),
410+
rows(39225, 1),
411+
rows(32838, 13),
412+
rows(4180, 18),
413+
rows(null, 6),
414+
rows(null, 20),
415+
rows(null, 25));
416+
}
353417
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$1], dir0=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalSort(sort0=[$1], dir0=[ASC-nulls-first])
5+
LogicalProject(age=[$10], age2=[+($10, $7)])
6+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]])
7+
physical: |
8+
EnumerableCalc(expr#0..1=[{inputs}], expr#2=[+($t0, $t1)], age=[$t0], $f1=[$t2])
9+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]], PushDownContext=[[PROJECT->[age, balance], SORT_EXPR->[+($0, $1) ASCENDING NULLS_FIRST], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["age","balance"],"excludes":[]},"sort":[{"_script":{"script":{"source":"{\"langType\":\"calcite\",\"script\":\"rO0ABXNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAADdwQAAAAGdAAHcm93VHlwZXQA0HsKICAiZmllbGRzIjogWwogICAgewogICAgICAidHlwZSI6ICJJTlRFR0VSIiwKICAgICAgIm51bGxhYmxlIjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiYWdlIgogICAgfSwKICAgIHsKICAgICAgInR5cGUiOiAiQklHSU5UIiwKICAgICAgIm51bGxhYmxlIjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiYmFsYW5jZSIKICAgIH0KICBdLAogICJudWxsYWJsZSI6IGZhbHNlCn10AARleHBydADFewogICJvcCI6IHsKICAgICJuYW1lIjogIisiLAogICAgImtpbmQiOiAiUExVUyIsCiAgICAic3ludGF4IjogIkJJTkFSWSIKICB9LAogICJvcGVyYW5kcyI6IFsKICAgIHsKICAgICAgImlucHV0IjogMCwKICAgICAgIm5hbWUiOiAiJDAiCiAgICB9LAogICAgewogICAgICAiaW5wdXQiOiAxLAogICAgICAibmFtZSI6ICIkMSIKICAgIH0KICBdCn10AApmaWVsZFR5cGVzc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAADHcIAAAAEAAAAAJ0AAdiYWxhbmNlfnIAKW9yZy5vcGVuc2VhcmNoLnNxbC5kYXRhLnR5cGUuRXhwckNvcmVUeXBlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAETE9OR3QAA2FnZX5xAH4ACnQAB0lOVEVHRVJ4eA==\"}","lang":"opensearch_compounded_script","params":{"NULL_DIRECTION":"FIRST","utcTimestamp": 0,"DIRECTION":"ASCENDING"}},"type":"number","order":"asc"}}]}, requestedTotalSize=10000, pageSize=null, startFrom=0)])
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$14], dir0=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], age2=[$19], age3=[$20])
5+
LogicalSort(sort0=[$20], dir0=[ASC-nulls-first])
6+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], _id=[$13], _index=[$14], _score=[$15], _maxscore=[$16], _sort=[$17], _routing=[$18], age2=[+($10, $7)], age3=[-(+($10, $7), $10)])
7+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]])
8+
physical: |
9+
EnumerableCalc(expr#0..12=[{inputs}], expr#13=[+($t10, $t7)], expr#14=[-($t13, $t10)], proj#0..14=[{exprs}])
10+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]], PushDownContext=[[PROJECT->[account_number, firstname, address, birthdate, gender, city, lastname, balance, employer, state, age, email, male], SORT_EXPR->[-(+($10, $7), $10) ASCENDING NULLS_FIRST], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","birthdate","gender","city","lastname","balance","employer","state","age","email","male"],"excludes":[]},"sort":[{"_script":{"script":{"source":"{\"langType\":\"calcite\",\"script\":\"rO0ABXNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAADdwQAAAAGdAAHcm93VHlwZXQA0HsKICAiZmllbGRzIjogWwogICAgewogICAgICAidHlwZSI6ICJJTlRFR0VSIiwKICAgICAgIm51bGxhYmxlIjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiYWdlIgogICAgfSwKICAgIHsKICAgICAgInR5cGUiOiAiQklHSU5UIiwKICAgICAgIm51bGxhYmxlIjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiYmFsYW5jZSIKICAgIH0KICBdLAogICJudWxsYWJsZSI6IGZhbHNlCn10AARleHBydAHbewogICJvcCI6IHsKICAgICJuYW1lIjogIi0iLAogICAgImtpbmQiOiAiTUlOVVMiLAogICAgInN5bnRheCI6ICJCSU5BUlkiCiAgfSwKICAib3BlcmFuZHMiOiBbCiAgICB7CiAgICAgICJvcCI6IHsKICAgICAgICAibmFtZSI6ICIrIiwKICAgICAgICAia2luZCI6ICJQTFVTIiwKICAgICAgICAic3ludGF4IjogIkJJTkFSWSIKICAgICAgfSwKICAgICAgIm9wZXJhbmRzIjogWwogICAgICAgIHsKICAgICAgICAgICJpbnB1dCI6IDAsCiAgICAgICAgICAibmFtZSI6ICIkMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpbnB1dCI6IDEsCiAgICAgICAgICAibmFtZSI6ICIkMSIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJpbnB1dCI6IDAsCiAgICAgICJuYW1lIjogIiQwIgogICAgfQogIF0sCiAgInR5cGUiOiB7CiAgICAidHlwZSI6ICJCSUdJTlQiLAogICAgIm51bGxhYmxlIjogdHJ1ZQogIH0KfXQACmZpZWxkVHlwZXNzcgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4cD9AAAAAAAAMdwgAAAAQAAAAAnQAB2JhbGFuY2V+cgApb3JnLm9wZW5zZWFyY2guc3FsLmRhdGEudHlwZS5FeHByQ29yZVR5cGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AARMT05HdAADYWdlfnEAfgAKdAAHSU5URUdFUnh4\"}","lang":"opensearch_compounded_script","params":{"NULL_DIRECTION":"FIRST","utcTimestamp": 0,"DIRECTION":"ASCENDING"}},"type":"number","order":"asc"}}]}, requestedTotalSize=10000, pageSize=null, startFrom=0)])
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$10], dir0=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], age2=[$19], balance2=[$20])
5+
LogicalSort(sort0=[$10], dir0=[ASC-nulls-first])
6+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], _id=[$13], _index=[$14], _score=[$15], _maxscore=[$16], _sort=[$17], _routing=[$18], age2=[$19], balance2=[ABS($7)])
7+
LogicalSort(sort0=[$19], sort1=[$10], dir0=[ASC-nulls-first], dir1=[ASC-nulls-first])
8+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], _id=[$13], _index=[$14], _score=[$15], _maxscore=[$16], _sort=[$17], _routing=[$18], age2=[+($10, $7)])
9+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]])
10+
physical: |
11+
EnumerableCalc(expr#0..12=[{inputs}], expr#13=[+($t10, $t7)], expr#14=[ABS($t7)], proj#0..14=[{exprs}])
12+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]], PushDownContext=[[PROJECT->[account_number, firstname, address, birthdate, gender, city, lastname, balance, employer, state, age, email, male], SORT->[{
13+
"age" : {
14+
"order" : "asc",
15+
"missing" : "_first"
16+
}
17+
}], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","birthdate","gender","city","lastname","balance","employer","state","age","email","male"],"excludes":[]},"sort":[{"age":{"order":"asc","missing":"_first"}}]}, requestedTotalSize=10000, pageSize=null, startFrom=0)])
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$13], sort1=[$14], dir0=[ASC-nulls-first], dir1=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], age2=[$19], balance2=[$20])
5+
LogicalSort(sort0=[$19], sort1=[$20], dir0=[ASC-nulls-first], dir1=[ASC-nulls-first])
6+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], birthdate=[$3], gender=[$4], city=[$5], lastname=[$6], balance=[$7], employer=[$8], state=[$9], age=[$10], email=[$11], male=[$12], _id=[$13], _index=[$14], _score=[$15], _maxscore=[$16], _sort=[$17], _routing=[$18], age2=[+($10, $7)], balance2=[+($7, 1)])
7+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]])
8+
physical: |
9+
EnumerableCalc(expr#0..12=[{inputs}], expr#13=[+($t10, $t7)], expr#14=[1], expr#15=[+($t7, $t14)], proj#0..13=[{exprs}], $f14=[$t15])
10+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]], PushDownContext=[[PROJECT->[account_number, firstname, address, birthdate, gender, city, lastname, balance, employer, state, age, email, male], SORT_EXPR->[+($10, $7) ASCENDING NULLS_FIRST, balance ASCENDING NULLS_FIRST], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","birthdate","gender","city","lastname","balance","employer","state","age","email","male"],"excludes":[]},"sort":[{"_script":{"script":{"source":"{\"langType\":\"calcite\",\"script\":\"rO0ABXNyABFqYXZhLnV0aWwuQ29sbFNlcleOq7Y6G6gRAwABSQADdGFneHAAAAADdwQAAAAGdAAHcm93VHlwZXQA0HsKICAiZmllbGRzIjogWwogICAgewogICAgICAidHlwZSI6ICJJTlRFR0VSIiwKICAgICAgIm51bGxhYmxlIjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiYWdlIgogICAgfSwKICAgIHsKICAgICAgInR5cGUiOiAiQklHSU5UIiwKICAgICAgIm51bGxhYmxlIjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiYmFsYW5jZSIKICAgIH0KICBdLAogICJudWxsYWJsZSI6IGZhbHNlCn10AARleHBydADFewogICJvcCI6IHsKICAgICJuYW1lIjogIisiLAogICAgImtpbmQiOiAiUExVUyIsCiAgICAic3ludGF4IjogIkJJTkFSWSIKICB9LAogICJvcGVyYW5kcyI6IFsKICAgIHsKICAgICAgImlucHV0IjogMCwKICAgICAgIm5hbWUiOiAiJDAiCiAgICB9LAogICAgewogICAgICAiaW5wdXQiOiAxLAogICAgICAibmFtZSI6ICIkMSIKICAgIH0KICBdCn10AApmaWVsZFR5cGVzc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAADHcIAAAAEAAAAAJ0AAdiYWxhbmNlfnIAKW9yZy5vcGVuc2VhcmNoLnNxbC5kYXRhLnR5cGUuRXhwckNvcmVUeXBlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAETE9OR3QAA2FnZX5xAH4ACnQAB0lOVEVHRVJ4eA==\"}","lang":"opensearch_compounded_script","params":{"NULL_DIRECTION":"FIRST","utcTimestamp": 0,"DIRECTION":"ASCENDING"}},"type":"number","order":"asc"}},{"balance":{"order":"asc","missing":"_first"}}]}, requestedTotalSize=10000, pageSize=null, startFrom=0)])
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$1], dir0=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalSort(sort0=[$1], dir0=[ASC-nulls-first])
5+
LogicalProject(age=[$10], age2=[+($10, $7)])
6+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]])
7+
physical: |
8+
EnumerableLimit(fetch=[10000])
9+
EnumerableSort(sort0=[$1], dir0=[ASC-nulls-first])
10+
EnumerableCalc(expr#0..18=[{inputs}], expr#19=[+($t10, $t7)], age=[$t10], age2=[$t19])
11+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_bank]])

0 commit comments

Comments
 (0)