Skip to content

Commit d8c2cb1

Browse files
committed
Add InteractiveSession option. Fixes #510
1 parent 798924e commit d8c2cb1

File tree

6 files changed

+26
-1
lines changed

6 files changed

+26
-1
lines changed

docs/content/connection-options.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,11 @@ These are the other options that MySqlConnector supports. They are set to sensib
232232
<td>If <code>true</code>, the value of <code>MySqlCommand.Transaction</code> is ignored when commands are executed.
233233
This matches the Connector/NET behaviour and can make porting code easier. For more information, see <a href="https://github.com/mysql-net/MySqlConnector/issues/474">Issue 474</a>.</td>
234234
</tr>
235+
<tr>
236+
<td>Interactive, Interactive Session, InteractiveSession</td>
237+
<td>false</td>
238+
<td>If <code>true</code>, the session <code>wait_timeout</code> variable is initialized from the global <code>interactive_timeout<code> value instead of the global <code>wait_timeout</code> value.</td>
239+
</tr>
235240
<tr>
236241
<td>Keep Alive, Keepalive</td>
237242
<td>0</td>

src/MySqlConnector/Core/ConnectionSettings.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public ConnectionSettings(MySqlConnectionStringBuilder csb)
5959
DefaultCommandTimeout = (int) csb.DefaultCommandTimeout;
6060
ForceSynchronous = csb.ForceSynchronous;
6161
IgnoreCommandTransaction = csb.IgnoreCommandTransaction;
62+
InteractiveSession = csb.InteractiveSession;
6263
GuidFormat = GetEffectiveGuidFormat(csb.GuidFormat, csb.OldGuids);
6364
Keepalive = csb.Keepalive;
6465
PersistSecurityInfo = csb.PersistSecurityInfo;
@@ -131,6 +132,7 @@ private static MySqlGuidFormat GetEffectiveGuidFormat(MySqlGuidFormat guidFormat
131132
public bool ForceSynchronous { get; }
132133
public MySqlGuidFormat GuidFormat { get; }
133134
public bool IgnoreCommandTransaction { get; }
135+
public bool InteractiveSession { get; }
134136
public uint Keepalive { get; }
135137
public bool PersistSecurityInfo { get; }
136138
public string ServerRsaPublicKeyFile { get; }

src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnectionStringBuilder.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,12 @@ public bool IgnoreCommandTransaction
189189
set => MySqlConnectionStringOption.IgnoreCommandTransaction.SetValue(this, value);
190190
}
191191

192+
public bool InteractiveSession
193+
{
194+
get => MySqlConnectionStringOption.InteractiveSession.GetValue(this);
195+
set => MySqlConnectionStringOption.InteractiveSession.SetValue(this, value);
196+
}
197+
192198
public uint Keepalive
193199
{
194200
get => MySqlConnectionStringOption.Keepalive.GetValue(this);
@@ -311,6 +317,7 @@ internal abstract class MySqlConnectionStringOption
311317
public static readonly MySqlConnectionStringOption<bool> ForceSynchronous;
312318
public static readonly MySqlConnectionStringOption<MySqlGuidFormat> GuidFormat;
313319
public static readonly MySqlConnectionStringOption<bool> IgnoreCommandTransaction;
320+
public static readonly MySqlConnectionStringOption<bool> InteractiveSession;
314321
public static readonly MySqlConnectionStringOption<uint> Keepalive;
315322
public static readonly MySqlConnectionStringOption<bool> OldGuids;
316323
public static readonly MySqlConnectionStringOption<bool> PersistSecurityInfo;
@@ -461,6 +468,10 @@ static MySqlConnectionStringOption()
461468
keys: new[] { "IgnoreCommandTransaction", "Ignore Command Transaction" },
462469
defaultValue: false));
463470

471+
AddOption(InteractiveSession = new MySqlConnectionStringOption<bool>(
472+
keys: new[] { "InteractiveSession", "Interactive", "Interactive Session" },
473+
defaultValue: false));
474+
464475
AddOption(Keepalive = new MySqlConnectionStringOption<uint>(
465476
keys: new[] { "Keep Alive", "Keepalive" },
466477
defaultValue: 0u));

src/MySqlConnector/Protocol/Payloads/HandshakeResponse41Payload.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ private static ByteBufferWriter CreateCapabilitiesPayload(ProtocolCapabilities s
1111

1212
writer.Write((int) (
1313
ProtocolCapabilities.Protocol41 |
14+
(cs.InteractiveSession ? (serverCapabilities & ProtocolCapabilities.Interactive) : 0) |
1415
ProtocolCapabilities.LongPassword |
1516
ProtocolCapabilities.SecureConnection |
1617
(serverCapabilities & ProtocolCapabilities.PluginAuth) |

src/MySqlConnector/Protocol/ProtocolCapabilities.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace MySqlConnector.Protocol
44
{
5+
/// <summary>
6+
/// The <a href="https://dev.mysql.com/doc/internals/en/capability-flags.html">MySQL Capability flags</a>.
7+
/// </summary>
58
[Flags]
69
internal enum ProtocolCapabilities
710
{
@@ -61,7 +64,7 @@ internal enum ProtocolCapabilities
6164
Protocol41 = 0x200,
6265

6366
/// <summary>
64-
/// Supports interactive and noninteractive clients.
67+
/// Server: Supports interactive and noninteractive clients. Client: The session <code>wait_timeout</code> variable is set to the value of the session <code>interactive_timeout</code> variable.
6568
/// </summary>
6669
Interactive = 0x400,
6770

tests/MySqlConnector.Tests/MySqlConnectionStringBuilderTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public void Defaults()
4040
Assert.Null(csb.CACertificateFile);
4141
Assert.Equal(MySqlLoadBalance.RoundRobin, csb.LoadBalance);
4242
#endif
43+
Assert.False(csb.InteractiveSession);
4344
Assert.Equal(0u, csb.Keepalive);
4445
Assert.Equal(100u, csb.MaximumPoolSize);
4546
Assert.Equal(0u, csb.MinimumPoolSize);
@@ -99,6 +100,7 @@ public void ParseConnectionString()
99100
"load balance=random;" +
100101
"guidformat=timeswapbinary16;" +
101102
#endif
103+
"interactive=true;" +
102104
"Keep Alive=90;" +
103105
"minpoolsize=5;" +
104106
"maxpoolsize=15;" +
@@ -137,6 +139,7 @@ public void ParseConnectionString()
137139
Assert.Equal(MySqlLoadBalance.Random, csb.LoadBalance);
138140
Assert.Equal(MySqlGuidFormat.TimeSwapBinary16, csb.GuidFormat);
139141
#endif
142+
Assert.True(csb.InteractiveSession);
140143
Assert.Equal(90u, csb.Keepalive);
141144
Assert.Equal(15u, csb.MaximumPoolSize);
142145
Assert.Equal(5u, csb.MinimumPoolSize);

0 commit comments

Comments
 (0)