Skip to content

Commit 47148be

Browse files
alex-spiesivancea
andauthored
ESQL: Add timezone query setting to the query config (elastic#136205) (elastic#136470)
* Add time_zone settings and parsing to the SET settings * Refactor Config, move to EsqlSession so it can pick up SET settings from the query * Update tests and benchmarks (cherry picked from commit a30027e) # Conflicts: # x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/execution/PlanExecutor.java # x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/session/EsqlSession.java # x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/CsvTests.java Co-authored-by: Iván Cea Fontenla <[email protected]>
1 parent 68a2663 commit 47148be

File tree

37 files changed

+463
-308
lines changed

37 files changed

+463
-308
lines changed

benchmarks/src/main/java/org/elasticsearch/benchmark/_nightly/esql/QueryPlanningBenchmark.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void setup() {
119119
}
120120

121121
private LogicalPlan plan(EsqlParser parser, Analyzer analyzer, LogicalPlanOptimizer optimizer, String query) {
122-
var parsed = parser.createStatement(query, new QueryParams(), telemetry, config);
122+
var parsed = parser.createStatement(query, new QueryParams(), telemetry);
123123
var analyzed = analyzer.analyze(parsed);
124124
var optimized = optimizer.optimize(analyzed);
125125
return optimized;

docs/reference/query-languages/esql/kibana/definition/settings/time_zone.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/QlIllegalArgumentException.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
*/
77
package org.elasticsearch.xpack.esql.core;
88

9+
/**
10+
* Like {@link IllegalArgumentException}, but treated as a server error.
11+
* <p>
12+
* Throw this in case of bugs, and the other in case of wrong user input.
13+
* </p>
14+
*/
915
public class QlIllegalArgumentException extends QlServerException {
1016
public QlIllegalArgumentException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
1117
super(message, cause, enableSuppression, writableStackTrace);

x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/EsqlTestUtils.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.apache.lucene.util.BytesRef;
1414
import org.elasticsearch.ExceptionsHelper;
1515
import org.elasticsearch.client.internal.Client;
16+
import org.elasticsearch.cluster.ClusterName;
1617
import org.elasticsearch.cluster.RemoteException;
1718
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
1819
import org.elasticsearch.cluster.project.ProjectResolver;
@@ -101,6 +102,7 @@
101102
import org.elasticsearch.xpack.esql.planner.PlannerSettings;
102103
import org.elasticsearch.xpack.esql.planner.PlannerUtils;
103104
import org.elasticsearch.xpack.esql.plugin.EsqlPlugin;
105+
import org.elasticsearch.xpack.esql.plugin.EsqlQueryClusterSettings;
104106
import org.elasticsearch.xpack.esql.plugin.QueryPragmas;
105107
import org.elasticsearch.xpack.esql.plugin.TransportActionServices;
106108
import org.elasticsearch.xpack.esql.session.Configuration;
@@ -443,7 +445,7 @@ public static LogicalOptimizerContext unboundLogicalOptimizerContext() {
443445
createMockTransportService(),
444446
mock(SearchService.class),
445447
null,
446-
mock(ClusterService.class),
448+
createMockClusterService(),
447449
mock(ProjectResolver.class),
448450
mock(IndexNameExpressionResolver.class),
449451
null,
@@ -452,6 +454,12 @@ public static LogicalOptimizerContext unboundLogicalOptimizerContext() {
452454
TEST_PLANNER_SETTINGS
453455
);
454456

457+
private static ClusterService createMockClusterService() {
458+
var service = mock(ClusterService.class);
459+
doReturn(new ClusterName("test-cluster")).when(service).getClusterName();
460+
return service;
461+
}
462+
455463
private static TransportService createMockTransportService() {
456464
var service = mock(TransportService.class);
457465
doReturn(createMockThreadPool()).when(service).getThreadPool();
@@ -493,6 +501,15 @@ public static Configuration configuration(String query) {
493501
return configuration(new QueryPragmas(Settings.EMPTY), query);
494502
}
495503

504+
public static EsqlQueryClusterSettings queryClusterSettings() {
505+
return new EsqlQueryClusterSettings(
506+
EsqlPlugin.QUERY_RESULT_TRUNCATION_MAX_SIZE.getDefault(Settings.EMPTY),
507+
EsqlPlugin.QUERY_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY),
508+
EsqlPlugin.QUERY_TIMESERIES_RESULT_TRUNCATION_MAX_SIZE.getDefault(Settings.EMPTY),
509+
EsqlPlugin.QUERY_TIMESERIES_RESULT_TRUNCATION_DEFAULT_SIZE.getDefault(Settings.EMPTY)
510+
);
511+
}
512+
496513
public static Literal L(Object value) {
497514
return of(value);
498515
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/execution/PlanExecutor.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,13 @@
1616
import org.elasticsearch.xpack.esql.analysis.PreAnalyzer;
1717
import org.elasticsearch.xpack.esql.analysis.Verifier;
1818
import org.elasticsearch.xpack.esql.common.Failures;
19-
import org.elasticsearch.xpack.esql.core.expression.FoldContext;
2019
import org.elasticsearch.xpack.esql.enrich.EnrichPolicyResolver;
2120
import org.elasticsearch.xpack.esql.expression.function.EsqlFunctionRegistry;
22-
import org.elasticsearch.xpack.esql.optimizer.LogicalOptimizerContext;
23-
import org.elasticsearch.xpack.esql.optimizer.LogicalPlanOptimizer;
24-
import org.elasticsearch.xpack.esql.optimizer.LogicalPlanPreOptimizer;
25-
import org.elasticsearch.xpack.esql.optimizer.LogicalPreOptimizerContext;
2621
import org.elasticsearch.xpack.esql.plan.logical.LogicalPlan;
2722
import org.elasticsearch.xpack.esql.planner.mapper.Mapper;
23+
import org.elasticsearch.xpack.esql.plugin.EsqlQueryClusterSettings;
2824
import org.elasticsearch.xpack.esql.plugin.TransportActionServices;
2925
import org.elasticsearch.xpack.esql.querylog.EsqlQueryLog;
30-
import org.elasticsearch.xpack.esql.session.Configuration;
3126
import org.elasticsearch.xpack.esql.session.EsqlSession;
3227
import org.elasticsearch.xpack.esql.session.IndexResolver;
3328
import org.elasticsearch.xpack.esql.session.Result;
@@ -72,8 +67,7 @@ public PlanExecutor(
7267
public void esql(
7368
EsqlQueryRequest request,
7469
String sessionId,
75-
Configuration cfg,
76-
FoldContext foldContext,
70+
EsqlQueryClusterSettings esqlQueryClusterSettings,
7771
EnrichPolicyResolver enrichPolicyResolver,
7872
EsqlExecutionInfo executionInfo,
7973
IndicesExpressionGrouper indicesExpressionGrouper,
@@ -84,13 +78,11 @@ public void esql(
8478
final PlanTelemetry planTelemetry = new PlanTelemetry(functionRegistry);
8579
final var session = new EsqlSession(
8680
sessionId,
87-
cfg,
81+
esqlQueryClusterSettings,
8882
indexResolver,
8983
enrichPolicyResolver,
9084
preAnalyzer,
91-
new LogicalPlanPreOptimizer(new LogicalPreOptimizerContext(foldContext)),
9285
functionRegistry,
93-
new LogicalPlanOptimizer(new LogicalOptimizerContext(cfg, foldContext)),
9486
mapper,
9587
verifier,
9688
planTelemetry,

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlParser.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.elasticsearch.xpack.esql.expression.function.EsqlFunctionRegistry;
2323
import org.elasticsearch.xpack.esql.plan.EsqlStatement;
2424
import org.elasticsearch.xpack.esql.plan.logical.LogicalPlan;
25-
import org.elasticsearch.xpack.esql.session.Configuration;
2625
import org.elasticsearch.xpack.esql.telemetry.PlanTelemetry;
2726

2827
import java.util.BitSet;
@@ -100,41 +99,40 @@ public void setEsqlConfig(EsqlConfig config) {
10099
}
101100

102101
// testing utility
103-
public LogicalPlan createStatement(String query, Configuration configuration) {
104-
return createStatement(query, new QueryParams(), configuration);
102+
public LogicalPlan createStatement(String query) {
103+
return createStatement(query, new QueryParams());
105104
}
106105

107106
// testing utility
108-
public LogicalPlan createStatement(String query, QueryParams params, Configuration configuration) {
109-
return createStatement(query, params, new PlanTelemetry(new EsqlFunctionRegistry()), configuration);
107+
public LogicalPlan createStatement(String query, QueryParams params) {
108+
return createStatement(query, params, new PlanTelemetry(new EsqlFunctionRegistry()));
110109
}
111110

112-
public LogicalPlan createStatement(String query, QueryParams params, PlanTelemetry metrics, Configuration configuration) {
111+
public LogicalPlan createStatement(String query, QueryParams params, PlanTelemetry metrics) {
113112
if (log.isDebugEnabled()) {
114113
log.debug("Parsing as statement: {}", query);
115114
}
116-
return invokeParser(query, params, metrics, EsqlBaseParser::singleStatement, AstBuilder::plan, configuration);
115+
return invokeParser(query, params, metrics, EsqlBaseParser::singleStatement, AstBuilder::plan);
117116
}
118117

119118
// testing utility
120-
public EsqlStatement createQuery(String query, QueryParams params, Configuration configuration) {
121-
return createQuery(query, params, new PlanTelemetry(new EsqlFunctionRegistry()), configuration);
119+
public EsqlStatement createQuery(String query, QueryParams params) {
120+
return createQuery(query, params, new PlanTelemetry(new EsqlFunctionRegistry()));
122121
}
123122

124-
public EsqlStatement createQuery(String query, QueryParams params, PlanTelemetry metrics, Configuration configuration) {
123+
public EsqlStatement createQuery(String query, QueryParams params, PlanTelemetry metrics) {
125124
if (log.isDebugEnabled()) {
126125
log.debug("Parsing as statement: {}", query);
127126
}
128-
return invokeParser(query, params, metrics, EsqlBaseParser::statements, AstBuilder::statement, configuration);
127+
return invokeParser(query, params, metrics, EsqlBaseParser::statements, AstBuilder::statement);
129128
}
130129

131130
private <T> T invokeParser(
132131
String query,
133132
QueryParams params,
134133
PlanTelemetry metrics,
135134
Function<EsqlBaseParser, ParserRuleContext> parseFunction,
136-
BiFunction<AstBuilder, ParserRuleContext, T> result,
137-
Configuration configuration
135+
BiFunction<AstBuilder, ParserRuleContext, T> result
138136
) {
139137
if (query.length() > MAX_LENGTH) {
140138
throw new ParsingException("ESQL statement is too large [{} characters > {}]", query.length(), MAX_LENGTH);

0 commit comments

Comments
 (0)