Skip to content

Commit ce237b9

Browse files
committed
Support param useother and otherstr
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 68ec263 commit ce237b9

5 files changed

Lines changed: 32 additions & 13 deletions

File tree

core/src/main/java/org/opensearch/sql/calcite/CalciteRelNodeVisitor.java

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

ppl/src/main/antlr/OpenSearchPPLLexer.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ COUNTFIELD: 'COUNTFIELD';
134134
SHOWCOUNT: 'SHOWCOUNT';
135135
LIMIT: 'LIMIT';
136136
USEOTHER: 'USEOTHER';
137+
OTHERSTR: 'OTHERSTR';
137138
INPUT: 'INPUT';
138139
OUTPUT: 'OUTPUT';
139140
PATH: 'PATH';

ppl/src/main/antlr/OpenSearchPPLParser.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ chartCommand
257257
chartOptions
258258
: LIMIT EQUAL (TOP | BOTTOM)? integerLiteral
259259
| USEOTHER EQUAL booleanLiteral
260+
| OTHERSTR EQUAL stringLiteral
260261
;
261262

262263
rowSplit

ppl/src/main/java/org/opensearch/sql/ppl/parser/AstBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ public UnresolvedPlan visitBinCommand(BinCommandContext ctx) {
492492
}
493493
// BINS parameter
494494
if (option.bins != null) {
495-
checkParamDuplication(seenParams, option.SPAN(), errorFormat);
495+
checkParamDuplication(seenParams, option.BINS(), errorFormat);
496496
bins = (Integer) ((Literal) resolvedOption).getValue();
497497
}
498498
// MINSPAN parameter

ppl/src/main/java/org/opensearch/sql/ppl/utils/ArgumentFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ public static List<Argument> getArgumentList(ChartCommandContext ctx) {
157157
arguments.add(new Argument("top", AstDSL.booleanLiteral(optionCtx.BOTTOM() == null)));
158158
} else if (optionCtx.USEOTHER() != null) {
159159
arguments.add(new Argument("useother", getArgumentValue(optionCtx.booleanLiteral())));
160+
} else if (optionCtx.OTHERSTR() != null) {
161+
arguments.add(new Argument("otherstr", getArgumentValue(optionCtx.stringLiteral())));
160162
}
161163
}
162164
return arguments;

0 commit comments

Comments
 (0)