Skip to content

Commit 51d3182

Browse files
author
PalashKarmaker
committed
arango optimization
1 parent d6a592d commit 51d3182

File tree

11 files changed

+378
-337
lines changed

11 files changed

+378
-337
lines changed

Core.Arango.Tests/Core/TestBase.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ public abstract class TestBase : IAsyncLifetime
1414
{
1515
public IArangoContext Arango { get; protected set; }
1616

17-
public virtual Task InitializeAsync()
18-
{
19-
return Task.CompletedTask;
20-
}
17+
public virtual Task InitializeAsync() => Task.CompletedTask;
2118

2219
public async Task DisposeAsync()
2320
{

Core.Arango.Tests/QueryTest.cs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,8 @@
1010

1111
namespace Core.Arango.Tests
1212
{
13-
public class QueryTest : TestBase
13+
public class QueryTest(ITestOutputHelper output) : TestBase
1414
{
15-
private readonly ITestOutputHelper _output;
16-
17-
public QueryTest(ITestOutputHelper output)
18-
{
19-
_output = output;
20-
}
21-
2215
[Theory]
2316
[ClassData(typeof(PascalCaseData))]
2417
public async Task NullParameter(string serializer)
@@ -164,7 +157,7 @@ public async Task Explain(string serializer)
164157
var res = await Arango.Query.ExplainAsync("test",
165158
$"FOR e IN test FILTER e.Value IN {select} RETURN e");
166159

167-
_output.WriteLine(JsonConvert.SerializeObject(res, Formatting.Indented));
160+
output.WriteLine(JsonConvert.SerializeObject(res, Formatting.Indented));
168161
}
169162

170163
[Theory]
@@ -177,7 +170,7 @@ public async Task Parse(string serializer)
177170
var res = await Arango.Query.ParseAsync("test",
178171
"FOR e IN test FILTER e.Value IN [1,2,3] RETURN e");
179172

180-
_output.WriteLine(JsonConvert.SerializeObject(res, Formatting.Indented));
173+
output.WriteLine(JsonConvert.SerializeObject(res, Formatting.Indented));
181174
}
182175
}
183176
}

Core.Arango/ArangoConfiguration.cs

Lines changed: 99 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -10,128 +10,124 @@
1010
using Core.Arango.Serialization.Newtonsoft;
1111
using Core.Arango.Transport;
1212

13-
namespace Core.Arango
13+
namespace Core.Arango;
14+
15+
/// <summary>
16+
/// Driver configuration.
17+
/// </summary>
18+
public class ArangoConfiguration : IArangoConfiguration
1419
{
20+
private string _connectionString;
21+
1522
/// <summary>
16-
/// Driver configuration.
1723
/// </summary>
18-
public class ArangoConfiguration : IArangoConfiguration
24+
public ArangoConfiguration()
1925
{
20-
private string _connectionString;
21-
22-
/// <summary>
23-
/// </summary>
24-
public ArangoConfiguration()
26+
BatchSize = 500;
27+
Serializer = new ArangoNewtonsoftSerializer(new ArangoNewtonsoftDefaultContractResolver());
28+
Transport = new ArangoHttpTransport(this);
29+
ResolveCollection = type =>
2530
{
26-
BatchSize = 500;
27-
Serializer = new ArangoNewtonsoftSerializer(new ArangoNewtonsoftDefaultContractResolver());
28-
Transport = new ArangoHttpTransport(this);
29-
ResolveCollection = type =>
30-
{
31-
var attr = type.GetCustomAttribute<CollectionPropertyAttribute>();
31+
var attr = type.GetCustomAttribute<CollectionPropertyAttribute>();
3232

33-
if (attr != null)
34-
return attr.CollectionName;
33+
if (attr != null)
34+
return attr.CollectionName;
3535

36-
return type.Name;
37-
};
38-
ResolveProperty = (type, name) =>
39-
{
40-
switch (name)
41-
{
42-
case "Key":
43-
return "_key";
44-
case "Id":
45-
return "_id";
46-
case "Revision":
47-
return "_rev";
48-
case "From":
49-
return "_from";
50-
case "To":
51-
return "_to";
52-
}
53-
54-
// TODO: camelCase
55-
return name;
56-
};
57-
ResolveGroupBy = s => s;
58-
}
59-
60-
/// <inheritdoc />
61-
public string ConnectionString
36+
return type.Name;
37+
};
38+
ResolveProperty = (type, name) =>
6239
{
63-
get => _connectionString;
64-
set
40+
switch (name)
6541
{
66-
_connectionString = value;
67-
var builder = new DbConnectionStringBuilder {ConnectionString = value};
68-
builder.TryGetValue("Server", out var s);
69-
builder.TryGetValue("Realm", out var r);
70-
builder.TryGetValue("User ID", out var uid);
71-
builder.TryGetValue("User", out var u);
72-
builder.TryGetValue("Password", out var p);
73-
builder.TryGetValue("AllowDirtyRead", out var dr);
74-
builder.TryGetValue("Endpoints", out var eps);
75-
76-
var server = s as string;
77-
var user = u as string ?? uid as string;
78-
var password = p as string;
79-
var realm = r as string;
80-
var allowDirtyRead = dr as string;
81-
var endpoints = dr as string;
82-
83-
if (string.IsNullOrWhiteSpace(server))
84-
throw new ArgumentException("Server invalid");
85-
86-
Realm = realm;
87-
Server = server;
88-
User = user;
89-
Password = password;
90-
91-
Endpoints = endpoints?.SplitAndRemoveEmptyEntries(',').ToList();
92-
93-
if (allowDirtyRead?.Equals("true", StringComparison.InvariantCultureIgnoreCase) == true)
94-
AllowDirtyRead = true;
42+
case "Key":
43+
return "_key";
44+
case "Id":
45+
return "_id";
46+
case "Revision":
47+
return "_rev";
48+
case "From":
49+
return "_from";
50+
case "To":
51+
return "_to";
9552
}
96-
}
9753

98-
/// <inheritdoc />
99-
public string Realm { get; set; }
54+
// TODO: camelCase
55+
return name;
56+
};
57+
ResolveGroupBy = s => s;
58+
}
59+
60+
/// <inheritdoc />
61+
public string ConnectionString
62+
{
63+
get => _connectionString;
64+
set
65+
{
66+
_connectionString = value;
67+
var builder = new DbConnectionStringBuilder {ConnectionString = value};
68+
builder.TryGetValue("Server", out var s);
69+
builder.TryGetValue("Realm", out var r);
70+
builder.TryGetValue("User ID", out var uid);
71+
builder.TryGetValue("User", out var u);
72+
builder.TryGetValue("Password", out var p);
73+
builder.TryGetValue("AllowDirtyRead", out var dr);
74+
builder.TryGetValue("Endpoints", out var eps);
75+
76+
var server = s as string;
77+
var user = u as string ?? uid as string;
78+
var password = p as string;
79+
var realm = r as string;
80+
var allowDirtyRead = dr as string;
81+
var endpoints = dr as string;
82+
83+
if (string.IsNullOrWhiteSpace(server))
84+
throw new ArgumentException("Server invalid");
85+
86+
Realm = realm;
87+
Server = server;
88+
User = user;
89+
Password = password;
90+
91+
Endpoints = endpoints?.SplitAndRemoveEmptyEntries(',').ToList();
92+
93+
if (allowDirtyRead?.Equals("true", StringComparison.InvariantCultureIgnoreCase) == true)
94+
AllowDirtyRead = true;
95+
}
96+
}
10097

101-
/// <inheritdoc />
102-
public string Server { get; set; }
98+
/// <inheritdoc />
99+
public string Realm { get; set; }
103100

104-
/// <inheritdoc />
105-
public string User { get; set; }
101+
/// <inheritdoc />
102+
public string Server { get; set; }
106103

107-
/// <inheritdoc />
108-
public string Password { get; set; }
104+
/// <inheritdoc />
105+
public string User { get; set; }
109106

110-
/// <inheritdoc />
111-
public int BatchSize { get; set; }
107+
/// <inheritdoc />
108+
public string Password { get; set; }
112109

113-
/// <inheritdoc />
114-
public IArangoSerializer Serializer { get; set; }
110+
/// <inheritdoc />
111+
public int BatchSize { get; set; }
115112

116-
/// <inheritdoc />
117-
public IArangoTransport Transport { get; set; }
113+
/// <inheritdoc />
114+
public IArangoSerializer Serializer { get; set; }
118115

119-
/// <inheritdoc />
120-
public Action<string, IDictionary<string, object>, ArangoQueryStatistic> QueryProfile { get; set; }
116+
/// <inheritdoc />
117+
public IArangoTransport Transport { get; set; }
121118

122-
/// <inheritdoc />
123-
public HttpClient HttpClient { get; set; }
119+
/// <inheritdoc />
120+
public Action<string, IDictionary<string, object>, ArangoQueryStatistic> QueryProfile { get; set; }
124121

125-
/// <inheritdoc />
126-
public bool AllowDirtyRead { get; set; }
122+
/// <inheritdoc />
123+
public bool AllowDirtyRead { get; set; }
127124

128-
/// <inheritdoc />
129-
public IReadOnlyList<string> Endpoints { get; set; }
130-
/// <inheritdoc />
131-
public Func<Type, string, string> ResolveProperty { get; set; }
132-
/// <inheritdoc />
133-
public Func<Type, string> ResolveCollection { get; set; }
134-
/// <inheritdoc />
135-
public Func<string, string> ResolveGroupBy { get; set; }
136-
}
125+
/// <inheritdoc />
126+
public IReadOnlyList<string> Endpoints { get; set; }
127+
/// <inheritdoc />
128+
public Func<Type, string, string> ResolveProperty { get; set; }
129+
/// <inheritdoc />
130+
public Func<Type, string> ResolveCollection { get; set; }
131+
/// <inheritdoc />
132+
public Func<string, string> ResolveGroupBy { get; set; }
137133
}

Core.Arango/Core.Arango.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
2121
<RepositoryUrl>https://github.com/coronabytes/dotnet-arangodb.git</RepositoryUrl>
2222
<RepositoryType>git</RepositoryType>
23-
<LangVersion>9</LangVersion>
2423
</PropertyGroup>
2524

2625
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

Core.Arango/Core.Arango.xml

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@
4040
<member name="P:Core.Arango.ArangoConfiguration.QueryProfile">
4141
<inheritdoc />
4242
</member>
43-
<member name="P:Core.Arango.ArangoConfiguration.HttpClient">
44-
<inheritdoc />
45-
</member>
4643
<member name="P:Core.Arango.ArangoConfiguration.AllowDirtyRead">
4744
<inheritdoc />
4845
</member>
@@ -1454,11 +1451,6 @@
14541451
Callback for each query execute with stats
14551452
</summary>
14561453
</member>
1457-
<member name="P:Core.Arango.IArangoConfiguration.HttpClient">
1458-
<summary>
1459-
Override HttpClient
1460-
</summary>
1461-
</member>
14621454
<member name="P:Core.Arango.IArangoConfiguration.AllowDirtyRead">
14631455
<summary>
14641456
Enables read queries from followers
@@ -10234,6 +10226,15 @@
1023410226
<member name="M:Core.Arango.Serialization.Json.ArangoJsonSerializer.Serialize(System.Object)">
1023510227
<inheritdoc />
1023610228
</member>
10229+
<member name="M:Core.Arango.Serialization.Json.ArangoJsonSerializer.SerializeAsync(System.Object,System.Threading.CancellationToken)">
10230+
<inheritdoc />
10231+
</member>
10232+
<member name="M:Core.Arango.Serialization.Json.ArangoJsonSerializer.DeserializeAsync``1(System.Byte[],System.Threading.CancellationToken)">
10233+
<inheritdoc />
10234+
</member>
10235+
<member name="M:Core.Arango.Serialization.Json.ArangoJsonSerializer.DeserializeAsync``1(System.IO.Stream,System.Threading.CancellationToken)">
10236+
<inheritdoc />
10237+
</member>
1023710238
<member name="M:Core.Arango.Serialization.Json.ArangoJsonSerializer.Deserialize``1(System.String)">
1023810239
<inheritdoc />
1023910240
</member>
@@ -10347,15 +10348,37 @@
1034710348
<member name="M:Core.Arango.Serialization.Newtonsoft.ArangoNewtonsoftSerializer.Deserialize(System.String,System.Type)">
1034810349
<inheritdoc />
1034910350
</member>
10351+
<member name="M:Core.Arango.Serialization.Newtonsoft.ArangoNewtonsoftSerializer.SerializeAsync(System.Object,System.Threading.CancellationToken)">
10352+
<inheritdoc />
10353+
</member>
10354+
<member name="M:Core.Arango.Serialization.Newtonsoft.ArangoNewtonsoftSerializer.DeserializeAsync``1(System.Byte[],System.Threading.CancellationToken)">
10355+
<inheritdoc />
10356+
</member>
10357+
<member name="M:Core.Arango.Serialization.Newtonsoft.ArangoNewtonsoftSerializer.DeserializeAsync``1(System.IO.Stream,System.Threading.CancellationToken)">
10358+
<inheritdoc />
10359+
</member>
1035010360
<member name="T:Core.Arango.Transport.ArangoHttpTransport">
1035110361
<summary>
1035210362
Arango HTTP 1.1/2.0 Transport Implementation
1035310363
</summary>
10364+
<remarks>
10365+
Arango HTTP 1.1/2.0 Transport Implementation
10366+
</remarks>
1035410367
</member>
1035510368
<member name="M:Core.Arango.Transport.ArangoHttpTransport.#ctor(Core.Arango.IArangoConfiguration)">
1035610369
<summary>
1035710370
Arango HTTP 1.1/2.0 Transport Implementation
1035810371
</summary>
10372+
<remarks>
10373+
Arango HTTP 1.1/2.0 Transport Implementation
10374+
</remarks>
10375+
</member>
10376+
<member name="M:Core.Arango.Transport.ArangoHttpTransport.SetBasicAuth(System.Net.Http.HttpClient)">
10377+
<summary>
10378+
When using Basic auth, call this method to set the username and password
10379+
used in requests to ArangoDB.
10380+
</summary>
10381+
<param name="client"></param>
1035910382
</member>
1036010383
<member name="M:Core.Arango.Transport.ArangoHttpTransport.SendAsync``1(System.Net.Http.HttpMethod,System.String,System.Object,System.String,System.Boolean,System.Boolean,System.Collections.Generic.IDictionary{System.String,System.String},System.Threading.CancellationToken)">
1036110384
<inheritdoc />

Core.Arango/IArangoConfiguration.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,6 @@ public interface IArangoConfiguration
6060
/// </summary>
6161
Action<string, IDictionary<string, object>, ArangoQueryStatistic> QueryProfile { get; set; }
6262

63-
/// <summary>
64-
/// Override HttpClient
65-
/// </summary>
66-
HttpClient HttpClient { get; set; }
67-
6863

6964
/// <summary>
7065
/// Enables read queries from followers

Core.Arango/Serialization/IArangoSerializer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
using System;
2+
using System.IO;
3+
using System.Threading;
4+
using System.Threading.Tasks;
25

36
namespace Core.Arango.Serialization
47
{
@@ -21,5 +24,8 @@ public interface IArangoSerializer
2124
/// Convert string to object
2225
/// </summary>
2326
public object Deserialize(string value, Type type);
27+
Task<byte[]> SerializeAsync(object value, CancellationToken token = default);
28+
ValueTask<T> DeserializeAsync<T>(byte[] buffer, CancellationToken token = default);
29+
ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToken token = default);
2430
}
2531
}

0 commit comments

Comments
 (0)