Skip to content

Commit 8edde80

Browse files
committed
Merge remote-tracking branch 'origin/main' into issues/4682
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
2 parents 5eefa44 + a003e8c commit 8edde80

124 files changed

Lines changed: 3602 additions & 993 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ allprojects {
152152
resolutionStrategy.force 'org.apache.commons:commons-text:1.11.0'
153153
resolutionStrategy.force 'commons-io:commons-io:2.15.0'
154154
resolutionStrategy.force 'org.yaml:snakeyaml:2.2'
155+
resolutionStrategy.dependencySubstitution {
156+
substitute module('commons-lang:commons-lang') using module('org.apache.commons:commons-lang3:3.18.0') because 'CVE-2025-48924: commons-lang 2.x vulnerable to StackOverflowError'
157+
}
155158
}
156159
}
157160

core/src/main/java/org/opensearch/sql/analysis/Analyzer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,7 @@ public LogicalPlan visitRareTopN(RareTopN node, AnalysisContext context) {
380380
fields.forEach(
381381
field -> newEnv.define(new Symbol(Namespace.FIELD_NAME, field.toString()), field.type()));
382382

383-
List<Argument> options = node.getArguments();
384-
Integer noOfResults = (Integer) options.get(0).getValue().getValue();
383+
Integer noOfResults = node.getNoOfResults();
385384

386385
return new LogicalRareTopN(child, node.getCommandType(), noOfResults, fields, groupBys);
387386
}

core/src/main/java/org/opensearch/sql/ast/dsl/AstDSL.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,8 +540,16 @@ public static RareTopN rareTopN(
540540
List<Argument> noOfResults,
541541
List<UnresolvedExpression> groupList,
542542
Field... fields) {
543-
return new RareTopN(input, commandType, noOfResults, Arrays.asList(fields), groupList)
544-
.attach(input);
543+
Integer N =
544+
(Integer)
545+
Argument.ArgumentMap.of(noOfResults)
546+
.getOrDefault("noOfResults", new Literal(10, DataType.INTEGER))
547+
.getValue();
548+
List<Argument> removed =
549+
noOfResults.stream()
550+
.filter(argument -> !argument.getArgName().equals("noOfResults"))
551+
.toList();
552+
return new RareTopN(commandType, N, removed, Arrays.asList(fields), groupList).attach(input);
545553
}
546554

547555
public static Limit limit(UnresolvedPlan input, Integer limit, Integer offset) {

core/src/main/java/org/opensearch/sql/ast/expression/AllFields.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
public class AllFields extends UnresolvedExpression {
1919
public static final AllFields INSTANCE = new AllFields();
2020

21-
public AllFields() {}
21+
protected AllFields() {}
2222

2323
public static AllFields of() {
2424
return INSTANCE;

core/src/main/java/org/opensearch/sql/ast/expression/Argument.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public <R, C> R accept(AbstractNodeVisitor<R, C> nodeVisitor, C context) {
3737
}
3838

3939
/** ArgumentMap is a helper class to get argument value by name. */
40+
@EqualsAndHashCode
41+
@ToString
4042
public static class ArgumentMap {
4143
private final Map<String, Literal> map;
4244

core/src/main/java/org/opensearch/sql/ast/expression/IntervalUnit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
@RequiredArgsConstructor
1515
public enum IntervalUnit {
1616
UNKNOWN,
17-
1817
MICROSECOND,
18+
MILLISECOND,
1919
SECOND,
2020
MINUTE,
2121
HOUR,

core/src/main/java/org/opensearch/sql/ast/expression/SpanUnit.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
public enum SpanUnit {
1616
UNKNOWN("unknown"),
1717
NONE(""),
18+
MICROSECOND("us"),
19+
US("us"),
1820
MILLISECOND("ms"),
1921
MS("ms"),
2022
SECONDS("s"),

core/src/main/java/org/opensearch/sql/ast/tree/RareTopN.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import com.google.common.collect.ImmutableList;
99
import java.util.List;
10-
import lombok.AllArgsConstructor;
1110
import lombok.EqualsAndHashCode;
1211
import lombok.Getter;
1312
import lombok.RequiredArgsConstructor;
@@ -24,12 +23,11 @@
2423
@ToString
2524
@EqualsAndHashCode(callSuper = false)
2625
@RequiredArgsConstructor
27-
@AllArgsConstructor
2826
public class RareTopN extends UnresolvedPlan {
2927

3028
private UnresolvedPlan child;
3129
private final CommandType commandType;
32-
// arguments: noOfResults: Integer, countField: String, showCount: Boolean
30+
private final Integer noOfResults;
3331
private final List<Argument> arguments;
3432
private final List<Field> fields;
3533
private final List<UnresolvedExpression> groupExprList;
@@ -54,4 +52,10 @@ public enum CommandType {
5452
TOP,
5553
RARE
5654
}
55+
56+
public enum Option {
57+
countField,
58+
showCount,
59+
useNull,
60+
}
5761
}

core/src/main/java/org/opensearch/sql/ast/tree/Timechart.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import static org.opensearch.sql.ast.dsl.AstDSL.eval;
1111
import static org.opensearch.sql.ast.dsl.AstDSL.function;
1212
import static org.opensearch.sql.ast.dsl.AstDSL.stringLiteral;
13-
import static org.opensearch.sql.ast.expression.IntervalUnit.SECOND;
13+
import static org.opensearch.sql.ast.expression.IntervalUnit.MILLISECOND;
1414
import static org.opensearch.sql.ast.tree.Timechart.PerFunctionRateExprBuilder.sum;
1515
import static org.opensearch.sql.ast.tree.Timechart.PerFunctionRateExprBuilder.timestampadd;
1616
import static org.opensearch.sql.ast.tree.Timechart.PerFunctionRateExprBuilder.timestampdiff;
@@ -112,11 +112,13 @@ private UnresolvedPlan transformPerFunction() {
112112
Span span = (Span) this.binExpression;
113113
Field spanStartTime = AstDSL.field(IMPLICIT_FIELD_TIMESTAMP);
114114
Function spanEndTime = timestampadd(span.getUnit(), span.getValue(), spanStartTime);
115-
Function spanSeconds = timestampdiff(SECOND, spanStartTime, spanEndTime);
116-
115+
Function spanMillis = timestampdiff(MILLISECOND, spanStartTime, spanEndTime);
116+
final int SECOND_IN_MILLISECOND = 1000;
117117
return eval(
118118
timechart(AstDSL.alias(perFunc.aggName, sum(perFunc.aggArg))),
119-
let(perFunc.aggName).multiply(perFunc.seconds).dividedBy(spanSeconds));
119+
let(perFunc.aggName)
120+
.multiply(perFunc.seconds * SECOND_IN_MILLISECOND)
121+
.dividedBy(spanMillis));
120122
}
121123

122124
private Timechart timechart(UnresolvedExpression newAggregateFunction) {

0 commit comments

Comments
 (0)