1515import static org .opensearch .sql .ast .tree .Sort .SortOrder .ASC ;
1616import static org .opensearch .sql .ast .tree .Sort .SortOrder .DESC ;
1717import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_FOR_DEDUP ;
18- import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_NAME_MAIN ;
19- import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_NAME_SUBSEARCH ;
20- import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_NAME_TOP_RARE ;
18+ import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_FOR_MAIN ;
19+ import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_FOR_RARE_TOP ;
20+ import static org .opensearch .sql .calcite .utils .PlanUtils .ROW_NUMBER_COLUMN_FOR_SUBSEARCH ;
2121import static org .opensearch .sql .calcite .utils .PlanUtils .getRelation ;
2222import static org .opensearch .sql .calcite .utils .PlanUtils .getRexCall ;
2323import static org .opensearch .sql .calcite .utils .PlanUtils .transformPlanToAttachChild ;
@@ -1643,7 +1643,7 @@ public RelNode visitAppendCol(AppendCol node, CalcitePlanContext context) {
16431643 List .of (),
16441644 WindowFrame .toCurrentRow ());
16451645 context .relBuilder .projectPlus (
1646- context .relBuilder .alias (mainRowNumber , ROW_NUMBER_COLUMN_NAME_MAIN ));
1646+ context .relBuilder .alias (mainRowNumber , ROW_NUMBER_COLUMN_FOR_MAIN ));
16471647
16481648 // 3. build subsearch tree (attach relation to subsearch)
16491649 UnresolvedPlan relation = getRelation (node );
@@ -1661,7 +1661,7 @@ public RelNode visitAppendCol(AppendCol node, CalcitePlanContext context) {
16611661 List .of (),
16621662 WindowFrame .toCurrentRow ());
16631663 context .relBuilder .projectPlus (
1664- context .relBuilder .alias (subsearchRowNumber , ROW_NUMBER_COLUMN_NAME_SUBSEARCH ));
1664+ context .relBuilder .alias (subsearchRowNumber , ROW_NUMBER_COLUMN_FOR_SUBSEARCH ));
16651665
16661666 List <String > subsearchFields = context .relBuilder .peek ().getRowType ().getFieldNames ();
16671667 List <String > mainFields = context .relBuilder .peek (1 ).getRowType ().getFieldNames ();
@@ -1675,17 +1675,17 @@ public RelNode visitAppendCol(AppendCol node, CalcitePlanContext context) {
16751675 // 7. join with condition `_row_number_main_ = _row_number_subsearch_`
16761676 RexNode joinCondition =
16771677 context .relBuilder .equals (
1678- context .relBuilder .field (2 , 0 , ROW_NUMBER_COLUMN_NAME_MAIN ),
1679- context .relBuilder .field (2 , 1 , ROW_NUMBER_COLUMN_NAME_SUBSEARCH ));
1678+ context .relBuilder .field (2 , 0 , ROW_NUMBER_COLUMN_FOR_MAIN ),
1679+ context .relBuilder .field (2 , 1 , ROW_NUMBER_COLUMN_FOR_SUBSEARCH ));
16801680 context .relBuilder .join (
16811681 JoinAndLookupUtils .translateJoinType (Join .JoinType .FULL ), joinCondition );
16821682
16831683 if (!node .isOverride ()) {
16841684 // 8. if override = false, drop both _row_number_ columns
16851685 context .relBuilder .projectExcept (
16861686 List .of (
1687- context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_MAIN ),
1688- context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_SUBSEARCH )));
1687+ context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_MAIN ),
1688+ context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_SUBSEARCH )));
16891689 return context .relBuilder .peek ();
16901690 } else {
16911691 // 9. if override = true, override the duplicated columns in main by subsearch values
@@ -1697,11 +1697,11 @@ public RelNode visitAppendCol(AppendCol node, CalcitePlanContext context) {
16971697 mainFields .stream ().filter (subsearchFields ::contains ).collect (Collectors .toSet ());
16981698 RexNode caseCondition =
16991699 context .relBuilder .equals (
1700- context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_MAIN ),
1701- context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_SUBSEARCH ));
1700+ context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_MAIN ),
1701+ context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_SUBSEARCH ));
17021702 for (int mainFieldIndex = 0 ; mainFieldIndex < mainFields .size (); mainFieldIndex ++) {
17031703 String mainFieldName = mainFields .get (mainFieldIndex );
1704- if (mainFieldName .equals (ROW_NUMBER_COLUMN_NAME_MAIN )) {
1704+ if (mainFieldName .equals (ROW_NUMBER_COLUMN_FOR_MAIN )) {
17051705 continue ;
17061706 }
17071707 finalFieldNames .add (mainFieldName );
@@ -1726,7 +1726,7 @@ public RelNode visitAppendCol(AppendCol node, CalcitePlanContext context) {
17261726 subsearchFieldIndex < subsearchFields .size ();
17271727 subsearchFieldIndex ++) {
17281728 String subsearchFieldName = subsearchFields .get (subsearchFieldIndex );
1729- if (subsearchFieldName .equals (ROW_NUMBER_COLUMN_NAME_SUBSEARCH )) {
1729+ if (subsearchFieldName .equals (ROW_NUMBER_COLUMN_FOR_SUBSEARCH )) {
17301730 continue ;
17311731 }
17321732 if (!duplicatedFields .contains (subsearchFieldName )) {
@@ -1887,14 +1887,15 @@ public RelNode visitRareTopN(RareTopN node, CalcitePlanContext context) {
18871887 addIgnoreNullBucketHintToAggregate (context );
18881888 }
18891889
1890- // 2. add a window column
1890+ // 2. add count() column with sort direction
18911891 List <RexNode > partitionKeys = rexVisitor .analyze (node .getGroupExprList (), context );
18921892 RexNode countField ;
18931893 if (node .getCommandType () == RareTopN .CommandType .TOP ) {
18941894 countField = context .relBuilder .desc (context .relBuilder .field (countFieldName ));
18951895 } else {
18961896 countField = context .relBuilder .field (countFieldName );
18971897 }
1898+
18981899 RexNode rowNumberWindowOver =
18991900 PlanUtils .makeOver (
19001901 context ,
@@ -1905,22 +1906,22 @@ public RelNode visitRareTopN(RareTopN node, CalcitePlanContext context) {
19051906 List .of (countField ),
19061907 WindowFrame .toCurrentRow ());
19071908 context .relBuilder .projectPlus (
1908- context .relBuilder .alias (rowNumberWindowOver , ROW_NUMBER_COLUMN_NAME_TOP_RARE ));
1909+ context .relBuilder .alias (rowNumberWindowOver , ROW_NUMBER_COLUMN_FOR_RARE_TOP ));
19091910
19101911 // 3. filter row_number() <= k in each partition
19111912 int k = node .getNoOfResults ();
19121913 context .relBuilder .filter (
19131914 context .relBuilder .lessThanOrEqual (
1914- context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_TOP_RARE ),
1915+ context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_RARE_TOP ),
19151916 context .relBuilder .literal (k )));
19161917
19171918 // 4. project final output. the default output is group by list + field list
19181919 Boolean showCount = (Boolean ) argumentMap .get (RareTopN .Option .showCount .name ()).getValue ();
19191920 if (showCount ) {
1920- context .relBuilder .projectExcept (context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_TOP_RARE ));
1921+ context .relBuilder .projectExcept (context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_RARE_TOP ));
19211922 } else {
19221923 context .relBuilder .projectExcept (
1923- context .relBuilder .field (ROW_NUMBER_COLUMN_NAME_TOP_RARE ),
1924+ context .relBuilder .field (ROW_NUMBER_COLUMN_FOR_RARE_TOP ),
19241925 context .relBuilder .field (countFieldName ));
19251926 }
19261927 return context .relBuilder .peek ();
0 commit comments