Skip to content

Commit 2613ac7

Browse files
committed
Merge origin/main into cmd-flatten
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
2 parents 9fe961b + 939dfe7 commit 2613ac7

72 files changed

Lines changed: 3773 additions & 391 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.

async-query-core/src/main/antlr/OpenSearchPPLParser.g4

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,6 @@ jsonFunctionName
868868
| JSON_OBJECT
869869
| JSON_ARRAY
870870
| JSON_ARRAY_LENGTH
871-
| TO_JSON_STRING
872871
| JSON_EXTRACT
873872
| JSON_KEYS
874873
| JSON_VALID

benchmarks/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ repositories {
1414

1515
dependencies {
1616
implementation project(':core')
17+
implementation project(':opensearch')
1718

1819
// Dependencies required by JMH micro benchmark
1920
api group: 'org.openjdk.jmh', name: 'jmh-core', version: '1.36'
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright OpenSearch Contributors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package org.opensearch.sql.expression.operator.predicate;
7+
8+
import java.util.ArrayList;
9+
import java.util.HashMap;
10+
import java.util.LinkedHashMap;
11+
import java.util.List;
12+
import java.util.Map;
13+
import org.openjdk.jmh.annotations.Benchmark;
14+
import org.opensearch.sql.opensearch.data.type.OpenSearchDataType;
15+
import org.opensearch.sql.opensearch.request.system.OpenSearchDescribeIndexRequest;
16+
17+
public class MergeArrayAndObjectMapBenchmark {
18+
private static final List<Map<String, OpenSearchDataType>> candidateMaps = prepareListOfMaps(120);
19+
20+
@Benchmark
21+
public void testMerge() {
22+
Map<String, OpenSearchDataType> finalResult = new HashMap<>();
23+
for (Map<String, OpenSearchDataType> map : candidateMaps) {
24+
OpenSearchDescribeIndexRequest.mergeObjectAndArrayInsideMap(finalResult, map);
25+
}
26+
}
27+
28+
private static Map<String, OpenSearchDataType> prepareMap(int recursive, String prefix) {
29+
Map<String, OpenSearchDataType> map = new HashMap<>();
30+
Map<String, Object> innerMap = prepareRecursiveMap(recursive, prefix);
31+
map.put("name", OpenSearchDataType.of(OpenSearchDataType.MappingType.Object, innerMap));
32+
return map;
33+
}
34+
35+
public static Map<String, Object> prepareRecursiveMap(int recursive, String prefix) {
36+
Map<String, Object> innerMap = new LinkedHashMap<>();
37+
if (recursive == 0) {
38+
innerMap.put("type", "string");
39+
} else {
40+
innerMap.put("type", "object");
41+
innerMap.put(
42+
"properties",
43+
Map.of(
44+
prefix + "_" + String.valueOf(recursive),
45+
Map.of("type", "text"),
46+
"recursive",
47+
prepareRecursiveMap(recursive - 1, prefix)));
48+
}
49+
return innerMap;
50+
}
51+
52+
private static List<Map<String, OpenSearchDataType>> prepareListOfMaps(int listNumber) {
53+
List<Map<String, OpenSearchDataType>> list = new ArrayList<>();
54+
for (int i = 0; i < listNumber; i++) {
55+
list.add(prepareMap(15, "prefix" + i));
56+
}
57+
return list;
58+
}
59+
}

benchmarks/src/jmh/java/org/opensearch/sql/expression/operator/predicate/PatternsWindowFunctionBenchmark.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.opensearch.sql.expression.ReferenceExpression;
3232
import org.opensearch.sql.expression.window.WindowDefinition;
3333
import org.opensearch.sql.expression.window.frame.BufferPatternRowsWindowFrame;
34-
import org.opensearch.sql.expression.window.frame.CurrentRowWindowFrame;
3534
import org.opensearch.sql.expression.window.frame.WindowFrame;
3635

3736
@Warmup(iterations = 1)
@@ -62,14 +61,6 @@ public class PatternsWindowFunctionBenchmark {
6261
new BrainLogParser(),
6362
new NamedArgumentExpression("message", new ReferenceExpression("message", STRING)));
6463

65-
@Benchmark
66-
public void testSimplePattern() {
67-
CurrentRowWindowFrame windowFrame =
68-
new CurrentRowWindowFrame(new WindowDefinition(ImmutableList.of(), ImmutableList.of()));
69-
70-
run(windowFrame, DSL.simple_pattern(DSL.ref("message", STRING)));
71-
}
72-
7364
@Benchmark
7465
public void testBrain() {
7566
BufferPatternRowsWindowFrame windowFrame =

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ allprojects {
129129
}
130130
configurations.all {
131131
resolutionStrategy.force "org.jetbrains.kotlin:kotlin-stdlib:1.9.10"
132+
resolutionStrategy.force "net.minidev:json-smart:${versions.json_smart}"
132133
resolutionStrategy.force "org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10"
133134
resolutionStrategy.force "net.bytebuddy:byte-buddy:1.14.19"
134135
resolutionStrategy.force "org.apache.httpcomponents.client5:httpclient5:${versions.httpclient5}"

core/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ dependencies {
6363
api 'org.apache.calcite:calcite-linq4j:1.38.0'
6464
api project(':common')
6565
implementation "com.github.seancfoley:ipaddress:5.4.2"
66+
implementation "com.jayway.jsonpath:json-path:2.9.0"
67+
implementation "com.googlecode.aviator:aviator:5.4.3"
6668

6769
annotationProcessor('org.immutables:value:2.8.8')
6870
compileOnly('org.immutables:value-annotations:2.8.8')

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.opensearch.sql.ast.tree.CloseCursor;
5252
import org.opensearch.sql.ast.tree.Dedupe;
5353
import org.opensearch.sql.ast.tree.Eval;
54+
import org.opensearch.sql.ast.tree.Expand;
5455
import org.opensearch.sql.ast.tree.FetchCursor;
5556
import org.opensearch.sql.ast.tree.FillNull;
5657
import org.opensearch.sql.ast.tree.Filter;
@@ -625,6 +626,12 @@ public LogicalPlan visitML(ML node, AnalysisContext context) {
625626
return new LogicalML(child, node.getArguments());
626627
}
627628

629+
@Override
630+
public LogicalPlan visitExpand(Expand expand, AnalysisContext context) {
631+
throw new UnsupportedOperationException(
632+
"Expand is supported only when " + CALCITE_ENGINE_ENABLED.getKeyValue() + "=true");
633+
}
634+
628635
/** Build {@link LogicalTrendline} for Trendline command. */
629636
@Override
630637
public LogicalPlan visitTrendline(Trendline node, AnalysisContext context) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.opensearch.sql.ast.tree.CloseCursor;
5050
import org.opensearch.sql.ast.tree.Dedupe;
5151
import org.opensearch.sql.ast.tree.Eval;
52+
import org.opensearch.sql.ast.tree.Expand;
5253
import org.opensearch.sql.ast.tree.FetchCursor;
5354
import org.opensearch.sql.ast.tree.FillNull;
5455
import org.opensearch.sql.ast.tree.Filter;
@@ -114,6 +115,10 @@ public T visitRelationSubquery(RelationSubquery node, C context) {
114115
return visitChildren(node, context);
115116
}
116117

118+
public T visitExpand(Expand expand, C context) {
119+
return visitChildren(expand, context);
120+
}
121+
117122
public T visitTableFunction(TableFunction node, C context) {
118123
return visitChildren(node, context);
119124
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.opensearch.sql.ast.tree.Dedupe;
5454
import org.opensearch.sql.ast.tree.DescribeRelation;
5555
import org.opensearch.sql.ast.tree.Eval;
56+
import org.opensearch.sql.ast.tree.Expand;
5657
import org.opensearch.sql.ast.tree.FillNull;
5758
import org.opensearch.sql.ast.tree.Filter;
5859
import org.opensearch.sql.ast.tree.Head;
@@ -118,6 +119,10 @@ public static Eval eval(UnresolvedPlan input, Let... projectList) {
118119
return new Eval(Arrays.asList(projectList)).attach(input);
119120
}
120121

122+
public Expand expand(UnresolvedPlan input, Field field, String alias) {
123+
return new Expand(field, alias).attach(input);
124+
}
125+
121126
public static UnresolvedPlan projectWithArg(
122127
UnresolvedPlan input, List<Argument> argList, UnresolvedExpression... projectList) {
123128
return new Project(Arrays.asList(projectList), argList).attach(input);
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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 javax.annotation.Nullable;
11+
import lombok.EqualsAndHashCode;
12+
import lombok.Getter;
13+
import lombok.RequiredArgsConstructor;
14+
import lombok.ToString;
15+
import org.opensearch.sql.ast.AbstractNodeVisitor;
16+
import org.opensearch.sql.ast.expression.Field;
17+
18+
/** AST node representing an {@code expand <field>} operation. */
19+
@ToString
20+
@RequiredArgsConstructor
21+
@EqualsAndHashCode(callSuper = false)
22+
public class Expand extends UnresolvedPlan {
23+
24+
private UnresolvedPlan child;
25+
@Getter private final Field field;
26+
@Getter @Nullable private final String alias;
27+
28+
@Override
29+
public Expand attach(UnresolvedPlan child) {
30+
this.child = child;
31+
return this;
32+
}
33+
34+
@Override
35+
public List<UnresolvedPlan> getChild() {
36+
return this.child == null ? ImmutableList.of() : ImmutableList.of(this.child);
37+
}
38+
39+
@Override
40+
public <T, C> T accept(AbstractNodeVisitor<T, C> nodeVisitor, C context) {
41+
return nodeVisitor.visitExpand(this, context);
42+
}
43+
}

0 commit comments

Comments
 (0)