Skip to content

Commit 8208282

Browse files
committed
Fix #3320 Add Painless script execute API (#3370)
* Generate ExcecutePainlessScript methods/descriptors etc * Implement ExecutePainlessScript API with tests Omitting `context` for now since that only takes a single option now which is also the default. Waiting for the API to crystalize here. * make Result generic in preparation for 6.4
1 parent 7e3526f commit 8208282

12 files changed

+2809
-2510
lines changed

src/CodeGeneration/ApiGenerator/ApiGenerator.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,32 @@ public static void Generate(string downloadBranch, params string[] folders)
5757
"xpack.ml.delete_filter.json",
5858
"xpack.ml.get_filters.json",
5959
"xpack.ml.put_filter.json",
60-
"rank_eval.json"
60+
"rank_eval.json",
61+
// these API's are new and need to be mapped
62+
"xpack.license.get_basic_status.json",
63+
"xpack.license.post_start_basic.json",
64+
"xpack.ml.delete_calendar.json",
65+
"xpack.ml.delete_calendar_event.json",
66+
"xpack.ml.delete_calendar_job.json",
67+
"xpack.ml.get_calendar_events.json",
68+
"xpack.ml.get_calendars.json",
69+
"xpack.ml.info.json",
70+
"xpack.ml.post_calendar_events.json",
71+
"xpack.ml.put_calendar.json",
72+
"xpack.ml.put_calendar_job.json",
73+
"xpack.ml.get_calendar_job.json",
74+
75+
"xpack.rollup.delete_job.json",
76+
"xpack.rollup.get_jobs.json",
77+
"xpack.rollup.get_rollup_caps.json",
78+
"xpack.rollup.put_job.json",
79+
"xpack.rollup.rollup_search.json",
80+
"xpack.rollup.start_job.json",
81+
"xpack.rollup.stop_job.json",
82+
"xpack.sql.clear_cursor.json",
83+
"xpack.sql.query.json",
84+
"xpack.sql.translate.json",
85+
"xpack.ssl.certificates.json",
6186
};
6287

6388
private static RestApiSpec CreateRestApiSpecModel(string downloadBranch, string[] folders)

src/Elasticsearch.Net/Domain/RequestParameters/RequestParameters.Generated.cs

Lines changed: 384 additions & 379 deletions
Large diffs are not rendered by default.

src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs

Lines changed: 790 additions & 772 deletions
Large diffs are not rendered by default.

src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs

Lines changed: 783 additions & 769 deletions
Large diffs are not rendered by default.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Elasticsearch.Net;
4+
using System.Threading;
5+
6+
namespace Nest
7+
{
8+
public partial interface IElasticClient
9+
{
10+
/// <summary>
11+
/// Executes an arbitrary Painless script and returns a result.
12+
/// Useful for testing the syntactical correctness of Painless scripts
13+
/// </summary>
14+
IExecutePainlessScriptResponse<TResult> ExecutePainlessScript<TResult>(Func<ExecutePainlessScriptDescriptor, IExecutePainlessScriptRequest> selector);
15+
16+
/// <inheritdoc cref="ExecutePainlessScript{TResult}(System.Func{Nest.ExecutePainlessScriptDescriptor,Nest.IExecutePainlessScriptRequest})"/>
17+
IExecutePainlessScriptResponse<TResult> ExecutePainlessScript<TResult>(IExecutePainlessScriptRequest request);
18+
19+
/// <inheritdoc cref="ExecutePainlessScript{TResult}(System.Func{Nest.ExecutePainlessScriptDescriptor,Nest.IExecutePainlessScriptRequest})"/>
20+
Task<IExecutePainlessScriptResponse<TResult>> ExecutePainlessScriptAsync<TResult>(Func<ExecutePainlessScriptDescriptor, IExecutePainlessScriptRequest> selector,
21+
CancellationToken cancellationToken = default(CancellationToken));
22+
23+
/// <inheritdoc cref="ExecutePainlessScript{TResult}(System.Func{Nest.ExecutePainlessScriptDescriptor,Nest.IExecutePainlessScriptRequest})"/>
24+
Task<IExecutePainlessScriptResponse<TResult>> ExecutePainlessScriptAsync<TResult>(IExecutePainlessScriptRequest request, CancellationToken cancellationToken = default(CancellationToken));
25+
26+
}
27+
28+
public partial class ElasticClient
29+
{
30+
/// <inheritdoc />
31+
public IExecutePainlessScriptResponse<TResult> ExecutePainlessScript<TResult>(Func<ExecutePainlessScriptDescriptor, IExecutePainlessScriptRequest> selector) =>
32+
this.ExecutePainlessScript<TResult>(selector?.Invoke(new ExecutePainlessScriptDescriptor()));
33+
34+
/// <inheritdoc />
35+
public IExecutePainlessScriptResponse<TResult> ExecutePainlessScript<TResult>(IExecutePainlessScriptRequest request) =>
36+
this.Dispatcher.Dispatch<IExecutePainlessScriptRequest, ExecutePainlessScriptRequestParameters, ExecutePainlessScriptResponse<TResult>>(
37+
request,
38+
this.LowLevelDispatch.ScriptsPainlessExecuteDispatch<ExecutePainlessScriptResponse<TResult>>
39+
);
40+
41+
/// <inheritdoc />
42+
public Task<IExecutePainlessScriptResponse<TResult>> ExecutePainlessScriptAsync<TResult>(Func<ExecutePainlessScriptDescriptor, IExecutePainlessScriptRequest> selector,
43+
CancellationToken cancellationToken = default(CancellationToken)) =>
44+
this.ExecutePainlessScriptAsync<TResult>(selector?.Invoke(new ExecutePainlessScriptDescriptor()), cancellationToken);
45+
46+
/// <inheritdoc />
47+
public Task<IExecutePainlessScriptResponse<TResult>> ExecutePainlessScriptAsync<TResult>(IExecutePainlessScriptRequest request, CancellationToken cancellationToken = default(CancellationToken)) =>
48+
this.Dispatcher.DispatchAsync<IExecutePainlessScriptRequest, ExecutePainlessScriptRequestParameters, ExecutePainlessScriptResponse<TResult>, IExecutePainlessScriptResponse<TResult>>(
49+
request,
50+
cancellationToken,
51+
this.LowLevelDispatch.ScriptsPainlessExecuteDispatchAsync<ExecutePainlessScriptResponse<TResult>>
52+
);
53+
}
54+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
4+
namespace Nest
5+
{
6+
public partial interface IExecutePainlessScriptRequest
7+
{
8+
[JsonProperty("script")]
9+
IInlineScript Script { get; set; }
10+
}
11+
12+
public partial class ExecutePainlessScriptRequest
13+
{
14+
public IInlineScript Script { get; set; }
15+
}
16+
17+
[DescriptorFor("ScriptsPainlessExecute")]
18+
public partial class ExecutePainlessScriptDescriptor
19+
{
20+
IInlineScript IExecutePainlessScriptRequest.Script { get; set; }
21+
22+
public ExecutePainlessScriptDescriptor Script(Func<InlineScriptDescriptor, IInlineScript> selector) =>
23+
Assign(a => a.Script = selector?.Invoke(new InlineScriptDescriptor()));
24+
}
25+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Nest
4+
{
5+
public interface IExecutePainlessScriptResponse<TResult> : IResponse
6+
{
7+
[JsonProperty("result")]
8+
TResult Result { get; }
9+
}
10+
11+
public class ExecutePainlessScriptResponse<TResult> : ResponseBase, IExecutePainlessScriptResponse<TResult>
12+
{
13+
public TResult Result { get; set; }
14+
}
15+
}

0 commit comments

Comments
 (0)