@@ -1987,6 +1987,10 @@ public RelNode visitChart(Chart node, CalcitePlanContext context) {
19871987 Optional .ofNullable (argMap .get ("limit" )).map (l -> (Integer ) l .getValue ()).orElse (10 );
19881988 Boolean top =
19891989 Optional .ofNullable (argMap .get ("top" )).map (t -> (Boolean ) t .getValue ()).orElse (true );
1990+ Boolean useOther =
1991+ Optional .ofNullable (argMap .get ("useother" )).map (u -> (Boolean ) u .getValue ()).orElse (true );
1992+ String otherStr =
1993+ Optional .ofNullable (argMap .get ("otherstr" )).map (o -> (String ) o .getValue ()).orElse ("OTHER" );
19901994 if (node .getRowSplit () == null || node .getColumnSplit () == null || Objects .equals (limit , 0 )) {
19911995 return aggregated .getLeft ();
19921996 }
@@ -2022,18 +2026,29 @@ public RelNode visitChart(Chart node, CalcitePlanContext context) {
20222026 // on column-split = group key
20232027 relBuilder .join (
20242028 JoinRelType .INNER , relBuilder .equals (relBuilder .field (2 , 0 , 2 ), relBuilder .field (2 , 1 , 0 )));
2025- RexNode caseExpr =
2026- relBuilder .alias (
2027- relBuilder .call (
2028- SqlStdOperatorTable .CASE ,
2029- relBuilder .call (
2030- SqlStdOperatorTable .LESS_THAN_OR_EQUAL ,
2031- relBuilder .field ("__row_number__" ),
2032- relBuilder .literal (limit )),
2033- relBuilder .field (2 ),
2034- relBuilder .literal ("OTHER" )),
2035- columSplitName );
2036- relBuilder .project (relBuilder .field (0 ), relBuilder .field (1 ), caseExpr );
2029+
2030+ RexNode condition =
2031+ relBuilder .call (
2032+ SqlStdOperatorTable .LESS_THAN_OR_EQUAL ,
2033+ relBuilder .field ("__row_number__" ),
2034+ relBuilder .literal (limit ));
2035+ RexNode columnSplitExpr ;
2036+ if (useOther ) {
2037+ columnSplitExpr =
2038+ relBuilder .call (
2039+ SqlStdOperatorTable .CASE ,
2040+ condition ,
2041+ relBuilder .field (2 ),
2042+ relBuilder .literal (otherStr ));
2043+ } else {
2044+ relBuilder .filter (condition );
2045+ columnSplitExpr = relBuilder .field (2 );
2046+ }
2047+
2048+ relBuilder .project (
2049+ relBuilder .field (0 ),
2050+ relBuilder .field (1 ),
2051+ relBuilder .alias (columnSplitExpr , columSplitName ));
20372052 return relBuilder .peek ();
20382053 }
20392054
0 commit comments