Skip to content

Commit 8af76c5

Browse files
Mpdreamzrusscam
authored andcommitted
Add support for the SQL APIs (#3414)
* Add QuerySql API methods and tests * Add ClearSqlCursor API methods and tests * Add TranslateSql API methods and tests (cherry picked from commit a59a00a)
1 parent ed2d7b2 commit 8af76c5

29 files changed

+1258
-2090
lines changed

src/CodeGeneration/ApiGenerator/ApiGenerator.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,7 @@ public static void Generate(string downloadBranch, params string[] folders)
7979
"xpack.rollup.rollup_search.json",
8080
"xpack.rollup.start_job.json",
8181
"xpack.rollup.stop_job.json",
82-
"xpack.sql.clear_cursor.json",
83-
"xpack.sql.query.json",
84-
"xpack.sql.translate.json",
82+
8583
"xpack.ssl.certificates.json",
8684

8785
// 6.4 new API's

src/CodeGeneration/ApiGenerator/Program.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,8 @@ private static void Main(string[] args)
3939
if (redownloadCoreSpecification)
4040
RestSpecDownloader.Download(downloadBranch);
4141

42-
ApiGenerator.Generate(downloadBranch, "Core", "Graph", "License", "Security", "Watcher", "Info", "MachineLearning", "Migration");
43-
44-
//ApiGenerator.Generate(); //generates everything under ApiSpecification
42+
ApiGenerator.Generate(downloadBranch, "Core", "Graph", "License", "Security", "Watcher", "Info",
43+
"MachineLearning", "Migration", "Sql");
4544
}
46-
4745
}
4846
}

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

Lines changed: 238 additions & 397 deletions
Large diffs are not rendered by default.

src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs

Lines changed: 85 additions & 845 deletions
Large diffs are not rendered by default.

src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs

Lines changed: 73 additions & 835 deletions
Large diffs are not rendered by default.

src/Nest/CommonAbstractions/Infer/Fields/FieldsJsonConverter.cs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using Elasticsearch.Net;
34
using Newtonsoft.Json;
45

56
namespace Nest
@@ -16,22 +17,42 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
1617
{
1718
var fields = value as Fields;
1819
writer.WriteStartArray();
19-
var infer = serializer.GetConnectionSettings().Inferrer;
20-
foreach (var f in fields?.ListOfFields ?? Enumerable.Empty<Field>())
20+
if (fields != null)
2121
{
22-
writer.WriteValue(infer.Field(f));
22+
var infer = serializer.GetConnectionSettings().Inferrer;
23+
foreach (var f in fields.ListOfFields)
24+
{
25+
writer.WriteValue(infer.Field(f));
26+
}
2327
}
2428
writer.WriteEndArray();
2529
}
30+
2631
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
2732
{
2833
if (reader.TokenType != JsonToken.StartArray) return null;
2934
var fields = new Fields();
3035
while (reader.TokenType != JsonToken.EndArray)
3136
{
32-
var field = reader.ReadAsString();
33-
if (reader.TokenType == JsonToken.String)
34-
fields.And(field);
37+
// as per https://github.com/elastic/elasticsearch/pull/29639 this can now be an array of objects
38+
reader.Read();
39+
switch (reader.TokenType)
40+
{
41+
case JsonToken.String:
42+
fields.And((string)reader.Value);
43+
break;
44+
case JsonToken.StartObject:
45+
/// TODO 6.4 this is temporary until we add proper support for doc_values format
46+
reader.Read(); // "field";
47+
var field = reader.ReadAsString();
48+
fields.And(field);
49+
while (reader.TokenType != JsonToken.EndObject)
50+
{
51+
reader.Read();
52+
}
53+
reader.Read(); // "}";
54+
break;
55+
}
3556
}
3657
return fields;
3758
}

src/Nest/CommonAbstractions/LazyDocument/LazyDocumentJsonConverter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
2727

2828
public override bool CanConvert(Type objectType) => true;
2929
}
30+
3031
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Nest
4+
{
5+
[MapsApi("xpack.sql.clear_cursor.json")]
6+
[ContractJsonConverter(typeof(ReadAsTypeJsonConverter<ClearSqlCursorRequest>))]
7+
public partial interface IClearSqlCursorRequest
8+
{
9+
/// <summary>
10+
/// <para>You’ve reached the last page when there is no cursor returned in the results. Like Elasticsearch’s scroll,
11+
/// SQL may keep state in Elasticsearch to support the cursor.
12+
/// Unlike scroll, receiving the last page is enough to guarantee that the Elasticsearch state is cleared.
13+
/// </para>
14+
/// </summary>
15+
[JsonProperty("cursor")]
16+
string Cursor { get; set; }
17+
}
18+
19+
public partial class ClearSqlCursorRequest
20+
{
21+
/// <inheritdoc cref="IQuerySqlRequest.Cursor"/>>
22+
public string Cursor { get; set; }
23+
}
24+
25+
public partial class ClearSqlCursorDescriptor
26+
{
27+
string IClearSqlCursorRequest.Cursor { get; set; }
28+
29+
/// <inheritdoc cref="IQuerySqlRequest.Cursor"/>>
30+
public ClearSqlCursorDescriptor Cursor(string cursor) => Assign(a => a.Cursor = cursor);
31+
}
32+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Newtonsoft.Json;
4+
5+
namespace Nest
6+
{
7+
public interface IClearSqlCursorResponse : IResponse
8+
{
9+
[JsonProperty("succeeded")]
10+
bool Succeeded { get; }
11+
}
12+
13+
public class ClearSqlCursorResponse : ResponseBase, IClearSqlCursorResponse
14+
{
15+
public bool Succeeded { get; internal set; }
16+
}
17+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
/// Clear a cursor returned by <see cref="IQuerySqlResponse.Cursor"/>. Not that this is only necessary if you wish to bail out early
12+
/// </summary>
13+
IClearSqlCursorResponse ClearSqlCursor(Func<ClearSqlCursorDescriptor, IClearSqlCursorRequest> selector = null);
14+
15+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
16+
IClearSqlCursorResponse ClearSqlCursor(IClearSqlCursorRequest request);
17+
18+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
19+
Task<IClearSqlCursorResponse> ClearSqlCursorAsync(Func<ClearSqlCursorDescriptor, IClearSqlCursorRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken));
20+
21+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
22+
Task<IClearSqlCursorResponse> ClearSqlCursorAsync(IClearSqlCursorRequest request, CancellationToken cancellationToken = default(CancellationToken));
23+
}
24+
25+
public partial class ElasticClient
26+
{
27+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
28+
public IClearSqlCursorResponse ClearSqlCursor(Func<ClearSqlCursorDescriptor, IClearSqlCursorRequest> selector = null) =>
29+
this.ClearSqlCursor(selector.InvokeOrDefault(new ClearSqlCursorDescriptor()));
30+
31+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
32+
public IClearSqlCursorResponse ClearSqlCursor(IClearSqlCursorRequest request) =>
33+
this.Dispatcher.Dispatch<IClearSqlCursorRequest, ClearSqlCursorRequestParameters, ClearSqlCursorResponse>(
34+
request,
35+
(p, d) =>this.LowLevelDispatch.XpackSqlClearCursorDispatch<ClearSqlCursorResponse>(p, d)
36+
);
37+
38+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
39+
public Task<IClearSqlCursorResponse> ClearSqlCursorAsync(Func<ClearSqlCursorDescriptor, IClearSqlCursorRequest> selector = null, CancellationToken cancellationToken = default(CancellationToken)) =>
40+
this.ClearSqlCursorAsync(selector.InvokeOrDefault(new ClearSqlCursorDescriptor()), cancellationToken);
41+
42+
/// <inheritdoc cref="ClearSqlCursor(System.Func{Nest.ClearSqlCursorDescriptor,Nest.IClearSqlCursorRequest})"/>
43+
public Task<IClearSqlCursorResponse> ClearSqlCursorAsync(IClearSqlCursorRequest request, CancellationToken cancellationToken = default(CancellationToken)) =>
44+
this.Dispatcher.DispatchAsync<IClearSqlCursorRequest, ClearSqlCursorRequestParameters, ClearSqlCursorResponse, IClearSqlCursorResponse>(
45+
request,
46+
cancellationToken,
47+
(p, d, c) => this.LowLevelDispatch.XpackSqlClearCursorDispatchAsync<ClearSqlCursorResponse>(p, d, c)
48+
);
49+
}
50+
}

0 commit comments

Comments
 (0)