Skip to content

Commit b29432d

Browse files
committed
Merge main/origin into cmd-expand
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
2 parents 08b5c43 + 270aa0d commit b29432d

132 files changed

Lines changed: 3298 additions & 364 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.

common/src/main/java/org/opensearch/sql/common/grok/GrokCompiler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.time.ZoneId;
1919
import java.time.ZoneOffset;
2020
import java.util.HashMap;
21+
import java.util.Locale;
2122
import java.util.Map;
2223
import java.util.Objects;
2324
import java.util.Set;
@@ -174,9 +175,10 @@ public Grok compile(final String pattern, ZoneId defaultTimeZone, boolean namedO
174175
throw new IllegalArgumentException(
175176
format("No definition for key '%s' found, aborting", group.get("pattern")));
176177
}
177-
String replacement = String.format("(?<name%d>%s)", index, definitionOfPattern);
178+
String replacement =
179+
String.format(Locale.ROOT, "(?<name%d>%s)", index, definitionOfPattern);
178180
if (namedOnly && group.get("subname") == null) {
179-
replacement = String.format("(?:%s)", definitionOfPattern);
181+
replacement = String.format(Locale.ROOT, "(?:%s)", definitionOfPattern);
180182
}
181183
namedRegexCollection.put(
182184
"name" + index,

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.opensearch.sql.ast.expression.UnresolvedExpression;
4848
import org.opensearch.sql.ast.tree.AD;
4949
import org.opensearch.sql.ast.tree.Aggregation;
50+
import org.opensearch.sql.ast.tree.AppendCol;
5051
import org.opensearch.sql.ast.tree.CloseCursor;
5152
import org.opensearch.sql.ast.tree.Dedupe;
5253
import org.opensearch.sql.ast.tree.Eval;
@@ -709,6 +710,12 @@ public LogicalPlan visitLookup(Lookup node, AnalysisContext context) {
709710
"Lookup is supported only when " + CALCITE_ENGINE_ENABLED.getKeyValue() + "=true");
710711
}
711712

713+
@Override
714+
public LogicalPlan visitAppendCol(AppendCol node, AnalysisContext context) {
715+
throw new UnsupportedOperationException(
716+
"AppendCol is supported only when " + CALCITE_ENGINE_ENABLED.getKeyValue() + "=true");
717+
}
718+
712719
private LogicalSort buildSort(
713720
LogicalPlan child, AnalysisContext context, List<Field> sortFields) {
714721
ExpressionReferenceOptimizer optimizer =

core/src/main/java/org/opensearch/sql/ast/AbstractNodeVisitor.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,36 @@
4343
import org.opensearch.sql.ast.statement.Explain;
4444
import org.opensearch.sql.ast.statement.Query;
4545
import org.opensearch.sql.ast.statement.Statement;
46-
import org.opensearch.sql.ast.tree.*;
46+
import org.opensearch.sql.ast.tree.AD;
47+
import org.opensearch.sql.ast.tree.Aggregation;
48+
import org.opensearch.sql.ast.tree.AppendCol;
49+
import org.opensearch.sql.ast.tree.CloseCursor;
50+
import org.opensearch.sql.ast.tree.Dedupe;
51+
import org.opensearch.sql.ast.tree.Eval;
52+
import org.opensearch.sql.ast.tree.Expand;
53+
import org.opensearch.sql.ast.tree.FetchCursor;
54+
import org.opensearch.sql.ast.tree.FillNull;
55+
import org.opensearch.sql.ast.tree.Filter;
56+
import org.opensearch.sql.ast.tree.Head;
57+
import org.opensearch.sql.ast.tree.Join;
58+
import org.opensearch.sql.ast.tree.Kmeans;
59+
import org.opensearch.sql.ast.tree.Limit;
60+
import org.opensearch.sql.ast.tree.Lookup;
61+
import org.opensearch.sql.ast.tree.ML;
62+
import org.opensearch.sql.ast.tree.Paginate;
63+
import org.opensearch.sql.ast.tree.Parse;
64+
import org.opensearch.sql.ast.tree.Patterns;
65+
import org.opensearch.sql.ast.tree.Project;
66+
import org.opensearch.sql.ast.tree.RareTopN;
67+
import org.opensearch.sql.ast.tree.Relation;
68+
import org.opensearch.sql.ast.tree.RelationSubquery;
69+
import org.opensearch.sql.ast.tree.Rename;
70+
import org.opensearch.sql.ast.tree.Sort;
71+
import org.opensearch.sql.ast.tree.SubqueryAlias;
72+
import org.opensearch.sql.ast.tree.TableFunction;
73+
import org.opensearch.sql.ast.tree.Trendline;
74+
import org.opensearch.sql.ast.tree.Values;
75+
import org.opensearch.sql.ast.tree.Window;
4776

4877
/** AST nodes visitor Defines the traverse path. */
4978
public abstract class AbstractNodeVisitor<T, C> {
@@ -348,4 +377,8 @@ public T visitScalarSubquery(ScalarSubquery node, C context) {
348377
public T visitExistsSubquery(ExistsSubquery node, C context) {
349378
return visitChildren(node, context);
350379
}
380+
381+
public T visitAppendCol(AppendCol node, C context) {
382+
return visitChildren(node, context);
383+
}
351384
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package org.opensearch.sql.ast.dsl;
77

88
import com.google.common.collect.ImmutableList;
9+
import java.math.BigDecimal;
910
import java.util.ArrayList;
1011
import java.util.Arrays;
1112
import java.util.List;
@@ -197,6 +198,14 @@ public static Literal doubleLiteral(Double value) {
197198
return literal(value, DataType.DOUBLE);
198199
}
199200

201+
public static Literal decimalLiteral(Double value) {
202+
return literal(BigDecimal.valueOf(value), DataType.DECIMAL);
203+
}
204+
205+
public static Literal decimalLiteral(BigDecimal value) {
206+
return literal(value, DataType.DECIMAL);
207+
}
208+
200209
public static Literal stringLiteral(String value) {
201210
return literal(value, DataType.STRING);
202211
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import lombok.RequiredArgsConstructor;
1010
import org.opensearch.sql.data.type.ExprCoreType;
1111

12-
/** The DataType defintion in AST. Question, could we use {@link ExprCoreType} directly in AST? */
12+
/** The DataType definition in AST. Question, could we use {@link ExprCoreType} directly in AST? */
1313
@RequiredArgsConstructor
1414
public enum DataType {
1515
TYPE_ERROR(ExprCoreType.UNKNOWN),
@@ -28,6 +28,11 @@ public enum DataType {
2828
TIMESTAMP(ExprCoreType.TIMESTAMP),
2929
INTERVAL(ExprCoreType.INTERVAL),
3030

31+
// the decimal DataType is only used for building decimal literal,
32+
// so it still maps to double core type until we support decimal type.
33+
// ref https://github.com/opensearch-project/sql/issues/3619
34+
DECIMAL(ExprCoreType.DOUBLE),
35+
3136
IP(ExprCoreType.IP);
3237

3338
@Getter private final ExprCoreType coreType;

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
package org.opensearch.sql.ast.expression;
77

88
import com.google.common.collect.ImmutableList;
9+
import java.math.BigDecimal;
910
import java.util.List;
1011
import lombok.EqualsAndHashCode;
1112
import lombok.Getter;
12-
import lombok.RequiredArgsConstructor;
1313
import org.opensearch.sql.ast.AbstractNodeVisitor;
1414

1515
/**
@@ -18,12 +18,20 @@
1818
*/
1919
@Getter
2020
@EqualsAndHashCode(callSuper = false)
21-
@RequiredArgsConstructor
2221
public class Literal extends UnresolvedExpression {
2322

2423
private final Object value;
2524
private final DataType type;
2625

26+
public Literal(Object value, DataType dataType) {
27+
if (dataType == DataType.DECIMAL && value instanceof Double) {
28+
this.value = BigDecimal.valueOf((Double) value);
29+
} else {
30+
this.value = value;
31+
}
32+
this.type = dataType;
33+
}
34+
2735
@Override
2836
public List<UnresolvedExpression> getChild() {
2937
return ImmutableList.of();

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
@Getter
2121
@Setter
2222
@ToString
23-
@EqualsAndHashCode(callSuper = true)
23+
@EqualsAndHashCode(callSuper = false)
2424
@RequiredArgsConstructor
2525
@AllArgsConstructor
2626
public class AD extends UnresolvedPlan {
@@ -41,6 +41,6 @@ public <T, C> T accept(AbstractNodeVisitor<T, C> nodeVisitor, C context) {
4141

4242
@Override
4343
public List<UnresolvedPlan> getChild() {
44-
return ImmutableList.of(this.child);
44+
return this.child == null ? ImmutableList.of() : ImmutableList.of(this.child);
4545
}
4646
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public Aggregation attach(UnresolvedPlan child) {
6363

6464
@Override
6565
public List<UnresolvedPlan> getChild() {
66-
return ImmutableList.of(this.child);
66+
return this.child == null ? ImmutableList.of() : ImmutableList.of(this.child);
6767
}
6868

6969
@Override
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright OpenSearch Contributors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package org.opensearch.sql.ast.tree;
7+
8+
import com.google.common.collect.ImmutableList;
9+
import java.util.List;
10+
import lombok.EqualsAndHashCode;
11+
import lombok.Getter;
12+
import lombok.RequiredArgsConstructor;
13+
import lombok.Setter;
14+
import lombok.ToString;
15+
import org.opensearch.sql.ast.AbstractNodeVisitor;
16+
import org.opensearch.sql.ast.Node;
17+
18+
/**
19+
* Logical plan node of AppendCol, the interface for building appending column actions in queries.
20+
*/
21+
@Getter
22+
@Setter
23+
@ToString
24+
@EqualsAndHashCode(callSuper = false)
25+
@RequiredArgsConstructor
26+
public class AppendCol extends UnresolvedPlan {
27+
28+
private final boolean override;
29+
30+
private final UnresolvedPlan subSearch;
31+
32+
private UnresolvedPlan child;
33+
34+
@Override
35+
public UnresolvedPlan attach(UnresolvedPlan child) {
36+
this.child = child;
37+
return this;
38+
}
39+
40+
@Override
41+
public List<? extends Node> getChild() {
42+
return this.child == null ? ImmutableList.of() : ImmutableList.of(this.child);
43+
}
44+
45+
@Override
46+
public <T, C> T accept(AbstractNodeVisitor<T, C> visitor, C context) {
47+
return visitor.visitAppendCol(this, context);
48+
}
49+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package org.opensearch.sql.ast.tree;
77

8+
import com.google.common.collect.ImmutableList;
89
import java.util.List;
910
import org.opensearch.sql.ast.AbstractNodeVisitor;
1011
import org.opensearch.sql.ast.Node;
@@ -28,6 +29,6 @@ public UnresolvedPlan attach(UnresolvedPlan child) {
2829

2930
@Override
3031
public List<? extends Node> getChild() {
31-
return List.of(cursor);
32+
return this.cursor == null ? ImmutableList.of() : ImmutableList.of(this.cursor);
3233
}
3334
}

0 commit comments

Comments
 (0)