@@ -407,16 +407,7 @@ private ReplacePair buildReplacePair(OpenSearchPPLParser.ReplacePairContext ctx)
407407 /** Stats command. */
408408 @ Override
409409 public UnresolvedPlan visitStatsCommand (StatsCommandContext ctx ) {
410- ImmutableList .Builder <UnresolvedExpression > aggListBuilder = new ImmutableList .Builder <>();
411- for (OpenSearchPPLParser .StatsAggTermContext aggCtx : ctx .statsAggTerm ()) {
412- UnresolvedExpression aggExpression = internalVisitExpression (aggCtx .statsFunction ());
413- String name =
414- aggCtx .alias == null
415- ? getTextInQuery (aggCtx )
416- : StringUtils .unquoteIdentifier (aggCtx .alias .getText ());
417- Alias alias = new Alias (name , aggExpression );
418- aggListBuilder .add (alias );
419- }
410+ List <UnresolvedExpression > aggregations = parseAggTerms (ctx .statsAggTerm ());
420411
421412 List <UnresolvedExpression > groupList =
422413 Optional .ofNullable (ctx .statsByClause ())
@@ -441,7 +432,7 @@ public UnresolvedPlan visitStatsCommand(StatsCommandContext ctx) {
441432
442433 Aggregation aggregation =
443434 new Aggregation (
444- aggListBuilder . build () ,
435+ aggregations ,
445436 Collections .emptyList (),
446437 groupList ,
447438 span ,
@@ -614,8 +605,23 @@ public UnresolvedPlan visitChartCommand(OpenSearchPPLParser.ChartCommandContext
614605 UnresolvedExpression columnSplit =
615606 ctx .columnSplit () == null ? null : internalVisitExpression (ctx .columnSplit ());
616607 List <Argument > arguments = ArgumentFactory .getArgumentList (ctx );
608+ List <UnresolvedExpression > aggList = parseAggTerms (ctx .statsAggTerm ());
609+ if (aggList .size () > 1 ) {
610+ throw new IllegalArgumentException (
611+ "Chart command does not support multiple aggregation functions yet" );
612+ }
613+ return Chart .builder ()
614+ .rowSplit (rowSplit )
615+ .columnSplit (columnSplit )
616+ .aggregationFunctions (aggList )
617+ .arguments (arguments )
618+ .build ();
619+ }
620+
621+ private List <UnresolvedExpression > parseAggTerms (
622+ List <OpenSearchPPLParser .StatsAggTermContext > statsAggTermContexts ) {
617623 ImmutableList .Builder <UnresolvedExpression > aggListBuilder = new ImmutableList .Builder <>();
618- for (OpenSearchPPLParser .StatsAggTermContext aggCtx : ctx . statsAggTerm () ) {
624+ for (OpenSearchPPLParser .StatsAggTermContext aggCtx : statsAggTermContexts ) {
619625 UnresolvedExpression aggExpression = internalVisitExpression (aggCtx .statsFunction ());
620626 String name =
621627 aggCtx .alias == null
@@ -624,12 +630,7 @@ public UnresolvedPlan visitChartCommand(OpenSearchPPLParser.ChartCommandContext
624630 Alias alias = new Alias (name , aggExpression );
625631 aggListBuilder .add (alias );
626632 }
627- return Chart .builder ()
628- .rowSplit (rowSplit )
629- .columnSplit (columnSplit )
630- .aggregationFunctions (aggListBuilder .build ())
631- .arguments (arguments )
632- .build ();
633+ return aggListBuilder .build ();
633634 }
634635
635636 /** Timechart command. */
0 commit comments