Skip to content

Commit f18fbf7

Browse files
committed
feat: add EnableImplicitSession flag support with parsing tests
1 parent 8c9a1ec commit f18fbf7

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

src/Ydb.Sdk/src/Ado/YdbConnection.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ internal ISession Session
3838
}
3939

4040
private ISession _session = null!;
41+
42+
internal bool EnableImplicitSession => ConnectionStringBuilder.EnableImplicitSession;
43+
44+
internal ISession GetExecutionSession(bool useImplicit)
45+
=> useImplicit ? new ImplicitSession(Session.Driver) : Session;
4146

4247
public YdbConnection()
4348
{

src/Ydb.Sdk/src/Ado/YdbConnectionStringBuilder.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ private void InitDefaultValues()
4141
_maxReceiveMessageSize = GrpcDefaultSettings.MaxReceiveMessageSize;
4242
_disableDiscovery = GrpcDefaultSettings.DisableDiscovery;
4343
_disableServerBalancer = false;
44+
_enableImplicitSession = false;
4445
}
4546

4647
public string Host
@@ -315,6 +316,18 @@ public int CreateSessionTimeout
315316

316317
private int _createSessionTimeout;
317318

319+
public bool EnableImplicitSession
320+
{
321+
get => _enableImplicitSession;
322+
set
323+
{
324+
_enableImplicitSession = value;
325+
SaveValue(nameof(EnableImplicitSession), value);
326+
}
327+
}
328+
329+
private bool _enableImplicitSession;
330+
318331
public ILoggerFactory? LoggerFactory { get; init; }
319332

320333
public ICredentialsProvider? CredentialsProvider { get; init; }
@@ -491,6 +504,9 @@ static YdbConnectionOption()
491504
AddOption(new YdbConnectionOption<bool>(BoolExtractor,
492505
(builder, disableServerBalancer) => builder.DisableServerBalancer = disableServerBalancer),
493506
"DisableServerBalancer", "Disable Server Balancer");
507+
AddOption(new YdbConnectionOption<bool>(BoolExtractor,
508+
(builder, enableImplicit) => builder.EnableImplicitSession = enableImplicit),
509+
"EnableImplicitSession", "ImplicitSession");
494510
}
495511

496512
private static void AddOption(YdbConnectionOption option, params string[] keys)

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/YdbConnectionStringBuilderTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public void InitDefaultValues_WhenEmptyConstructorInvoke_ReturnDefaultConnection
2828
Assert.False(ydbConnectionStringBuilder.DisableDiscovery);
2929
Assert.False(ydbConnectionStringBuilder.DisableServerBalancer);
3030
Assert.False(ydbConnectionStringBuilder.UseTls);
31+
Assert.False(ydbConnectionStringBuilder.EnableImplicitSession);
3132
}
3233

3334
[Fact]
@@ -50,7 +51,7 @@ public void InitConnectionStringBuilder_WhenExpectedKeys_ReturnUpdatedConnection
5051
"ConnectTimeout=30;KeepAlivePingDelay=30;KeepAlivePingTimeout=60;" +
5152
"EnableMultipleHttp2Connections=true;" +
5253
"MaxSendMessageSize=1000000;MaxReceiveMessageSize=1000000;" +
53-
"DisableDiscovery=true;DisableServerBalancer=true;"
54+
"DisableDiscovery=true;DisableServerBalancer=true;EnableImplicitSession=true;"
5455
);
5556

5657
Assert.Equal(2135, connectionString.Port);
@@ -74,9 +75,10 @@ public void InitConnectionStringBuilder_WhenExpectedKeys_ReturnUpdatedConnection
7475
"ConnectTimeout=30;KeepAlivePingDelay=30;KeepAlivePingTimeout=60;" +
7576
"EnableMultipleHttp2Connections=True;" +
7677
"MaxSendMessageSize=1000000;MaxReceiveMessageSize=1000000;" +
77-
"DisableDiscovery=True;DisableServerBalancer=True", connectionString.ConnectionString);
78+
"DisableDiscovery=True;DisableServerBalancer=True;EnableImplicitSession=True", connectionString.ConnectionString);
7879
Assert.True(connectionString.DisableDiscovery);
7980
Assert.True(connectionString.DisableServerBalancer);
81+
Assert.True(connectionString.EnableImplicitSession);
8082
}
8183

8284
[Fact]

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/YdbConnectionTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,4 +477,48 @@ public async Task BulkUpsertImporter_ThrowsOnNonexistentTable()
477477

478478
await Assert.ThrowsAsync<YdbException>(async () => { await importer.FlushAsync(); });
479479
}
480+
481+
[Fact]
482+
public void EnableImplicitSession_WhenSetViaPrimaryKey_ParsesAndAppearsInConnectionString()
483+
{
484+
var csb = new YdbConnectionStringBuilder("EnableImplicitSession=true;Host=server;Port=2135;");
485+
Assert.True(csb.EnableImplicitSession);
486+
487+
Assert.Contains("EnableImplicitSession=True", csb.ConnectionString);
488+
Assert.Contains("Host=server", csb.ConnectionString);
489+
Assert.Contains("Port=2135", csb.ConnectionString);
490+
}
491+
492+
[Fact]
493+
public void EnableImplicitSession_WhenSetViaAlias_ParsesAndNormalizesKey()
494+
{
495+
var csb = new YdbConnectionStringBuilder("ImplicitSession=on;Host=server;Port=2135;");
496+
Assert.True(csb.EnableImplicitSession);
497+
498+
var s = csb.ConnectionString;
499+
500+
Assert.Contains("EnableImplicitSession=True", s);
501+
502+
var parts = s.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
503+
Assert.DoesNotContain(parts, p => p.StartsWith("ImplicitSession=", StringComparison.OrdinalIgnoreCase));
504+
505+
Assert.Contains("Host=server", s);
506+
Assert.Contains("Port=2135", s);
507+
}
508+
509+
[Theory]
510+
[InlineData("true", true)]
511+
[InlineData("True", true)]
512+
[InlineData("on", true)]
513+
[InlineData("1", true)]
514+
[InlineData("false", false)]
515+
[InlineData("False", false)]
516+
[InlineData("off", false)]
517+
[InlineData("0", false)]
518+
public void EnableImplicitSession_StringBooleanVariants_AreParsed(string value, bool expected)
519+
{
520+
var csb = new YdbConnectionStringBuilder($"EnableImplicitSession={value};");
521+
Assert.Equal(expected, csb.EnableImplicitSession);
522+
Assert.Contains($"EnableImplicitSession={(expected ? "True" : "False")}", csb.ConnectionString);
523+
}
480524
}

0 commit comments

Comments
 (0)