Skip to content

Commit 004355b

Browse files
committed
Add double reverse explain
Signed-off-by: Kai Huang <[email protected]>
1 parent 0246535 commit 004355b

File tree

7 files changed

+120
-0
lines changed

7 files changed

+120
-0
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,31 @@ public void testExplainWithReversePushdownMultipleFields() throws IOException {
433433
assertYamlEqualsIgnoreId(expected, result);
434434
}
435435

436+
@Test
437+
public void testExplainWithDoubleReverse() throws IOException {
438+
String query = "source=opensearch-sql_test_index_account | reverse | reverse";
439+
var result = explainQueryYaml(query);
440+
String expected = loadExpectedPlan("explain_double_reverse_fallback.yaml");
441+
assertYamlEqualsIgnoreId(expected, result);
442+
}
443+
444+
@Test
445+
public void testExplainWithDoubleReversePushdown() throws IOException {
446+
String query = "source=opensearch-sql_test_index_account | sort - age | reverse | reverse";
447+
var result = explainQueryYaml(query);
448+
String expected = loadExpectedPlan("explain_double_reverse_pushdown_single.yaml");
449+
assertYamlEqualsIgnoreId(expected, result);
450+
}
451+
452+
@Test
453+
public void testExplainWithDoubleReversePushdownMultipleFields() throws IOException {
454+
String query =
455+
"source=opensearch-sql_test_index_account | sort - age, + firstname | reverse | reverse";
456+
var result = explainQueryYaml(query);
457+
String expected = loadExpectedPlan("explain_double_reverse_pushdown_multiple.yaml");
458+
assertYamlEqualsIgnoreId(expected, result);
459+
}
460+
436461
@Test
437462
public void testExplainWithTimechartAvg() throws IOException {
438463
var result = explainQueryYaml("source=events | timechart span=1m avg(cpu_usage) by host");
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10])
5+
LogicalSort(sort0=[$17], dir0=[DESC])
6+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10], _id=[$11], _index=[$12], _score=[$13], _maxscore=[$14], _sort=[$15], _routing=[$16], __reverse_row_num__=[ROW_NUMBER() OVER ()])
7+
LogicalSort(sort0=[$17], dir0=[DESC])
8+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10], _id=[$11], _index=[$12], _score=[$13], _maxscore=[$14], _sort=[$15], _routing=[$16], __reverse_row_num__=[ROW_NUMBER() OVER ()])
9+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
10+
physical: |
11+
EnumerableCalc(expr#0..18=[{inputs}], proj#0..10=[{exprs}])
12+
EnumerableLimit(fetch=[10000])
13+
EnumerableSort(sort0=[$18], dir0=[DESC])
14+
EnumerableWindow(window#0=[window(rows between UNBOUNDED PRECEDING and CURRENT ROW aggs [ROW_NUMBER()])])
15+
EnumerableSort(sort0=[$17], dir0=[DESC])
16+
EnumerableWindow(window#0=[window(rows between UNBOUNDED PRECEDING and CURRENT ROW aggs [ROW_NUMBER()])])
17+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10])
5+
LogicalSort(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first])
6+
LogicalSort(sort0=[$8], sort1=[$1], dir0=[ASC-nulls-first], dir1=[DESC-nulls-last])
7+
LogicalSort(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first])
8+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
9+
physical: |
10+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]], PushDownContext=[[PROJECT->[account_number, firstname, address, balance, gender, city, employer, state, age, email, lastname], SORT->[{
11+
"age" : {
12+
"order" : "desc",
13+
"missing" : "_last"
14+
}
15+
}, {
16+
"firstname.keyword" : {
17+
"order" : "asc",
18+
"missing" : "_first"
19+
}
20+
}], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","balance","gender","city","employer","state","age","email","lastname"],"excludes":[]},"sort":[{"age":{"order":"desc","missing":"_last"}},{"firstname.keyword":{"order":"asc","missing":"_first"}}]}, requestedTotalSize=10000, pageSize=null, startFrom=0)])
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$8], dir0=[DESC-nulls-last], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10])
5+
LogicalSort(sort0=[$8], dir0=[DESC-nulls-last])
6+
LogicalSort(sort0=[$8], dir0=[ASC-nulls-first])
7+
LogicalSort(sort0=[$8], dir0=[DESC-nulls-last])
8+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
9+
physical: |
10+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]], PushDownContext=[[PROJECT->[account_number, firstname, address, balance, gender, city, employer, state, age, email, lastname], SORT->[{
11+
"age" : {
12+
"order" : "desc",
13+
"missing" : "_last"
14+
}
15+
}], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","balance","gender","city","employer","state","age","email","lastname"],"excludes":[]},"sort":[{"age":{"order":"desc","missing":"_last"}}]}, 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(fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10])
5+
LogicalSort(sort0=[$17], dir0=[DESC])
6+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10], _id=[$11], _index=[$12], _score=[$13], _maxscore=[$14], _sort=[$15], _routing=[$16], __reverse_row_num__=[ROW_NUMBER() OVER ()])
7+
LogicalSort(sort0=[$17], dir0=[DESC])
8+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10], _id=[$11], _index=[$12], _score=[$13], _maxscore=[$14], _sort=[$15], _routing=[$16], __reverse_row_num__=[ROW_NUMBER() OVER ()])
9+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
10+
physical: |
11+
EnumerableCalc(expr#0..18=[{inputs}], proj#0..10=[{exprs}])
12+
EnumerableLimit(fetch=[10000])
13+
EnumerableSort(sort0=[$18], dir0=[DESC])
14+
EnumerableWindow(window#0=[window(rows between UNBOUNDED PRECEDING and CURRENT ROW aggs [ROW_NUMBER()])])
15+
EnumerableSort(sort0=[$17], dir0=[DESC])
16+
EnumerableWindow(window#0=[window(rows between UNBOUNDED PRECEDING and CURRENT ROW aggs [ROW_NUMBER()])])
17+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10])
5+
LogicalSort(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first])
6+
LogicalSort(sort0=[$8], sort1=[$1], dir0=[ASC-nulls-first], dir1=[DESC-nulls-last])
7+
LogicalSort(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first])
8+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
9+
physical: |
10+
EnumerableLimit(fetch=[10000])
11+
EnumerableSort(sort0=[$8], sort1=[$1], dir0=[DESC-nulls-last], dir1=[ASC-nulls-first])
12+
EnumerableCalc(expr#0..16=[{inputs}], proj#0..10=[{exprs}])
13+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
calcite:
2+
logical: |
3+
LogicalSystemLimit(sort0=[$8], dir0=[DESC-nulls-last], fetch=[10000], type=[QUERY_SIZE_LIMIT])
4+
LogicalProject(account_number=[$0], firstname=[$1], address=[$2], balance=[$3], gender=[$4], city=[$5], employer=[$6], state=[$7], age=[$8], email=[$9], lastname=[$10])
5+
LogicalSort(sort0=[$8], dir0=[DESC-nulls-last])
6+
LogicalSort(sort0=[$8], dir0=[ASC-nulls-first])
7+
LogicalSort(sort0=[$8], dir0=[DESC-nulls-last])
8+
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
9+
physical: |
10+
EnumerableLimit(fetch=[10000])
11+
EnumerableSort(sort0=[$8], dir0=[DESC-nulls-last])
12+
EnumerableCalc(expr#0..16=[{inputs}], proj#0..10=[{exprs}])
13+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])

0 commit comments

Comments
 (0)