Skip to content

Commit 50ec923

Browse files
Make SqlConnectionEncryptOption string parser public (#1771)
* Make SqlConnectionEncryptOption string parser public * Address feedback * Fix non-nullables * Fix docs * Apply suggestions from code review Co-authored-by: DavoudEshtehari <[email protected]> Co-authored-by: DavoudEshtehari <[email protected]>
1 parent 4dafe91 commit 50ec923

File tree

5 files changed

+101
-6
lines changed

5 files changed

+101
-6
lines changed

doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,31 @@ Implicit conversions have been added to maintain backwards compatibility with bo
1212
]]></format>
1313
</remarks>
1414
</SqlConnectionEncryptOption>
15+
<Parse>
16+
<summary>
17+
Converts the specified string representation of a logical value to its <see cref="T:Microsoft.Data.SqlClient.SqlConnectionEncryptOption"/> equivalent.
18+
</summary>
19+
<param name="value">A string containing the value to convert.</param>
20+
<returns>
21+
An object that is equivalent to <see cref="T:Microsoft.Data.SqlClient.SqlConnectionEncryptOption"/> contained in <paramref name="value"/>.
22+
</returns>
23+
<exception cref="T:System.ArgumentException">
24+
Throws exception if provided <paramref name="value"/> is not convertible to <see cref="T:Microsoft.Data.SqlClient.SqlConnectionEncryptOption"/> type.
25+
</exception>
26+
</Parse>
27+
<TryParse>
28+
<summary>
29+
Converts the specified string representation of a logical value to its <see cref="T:Microsoft.Data.SqlClient.SqlConnectionEncryptOption"/> equivalent and returns a value that indicates whether the conversion succeeded.
30+
</summary>
31+
<param name="value">A string containing the value to convert.</param>
32+
<param name="result">
33+
An object that is equivalent to <see cref="T:Microsoft.Data.SqlClient.SqlConnectionEncryptOption"/> contained in <paramref name="value"/>. <see langword="null" /> if conversion fails.
34+
</param>
35+
<returns>
36+
<see langword="true" /> if the <paramref name="value"/> parameter was converted successfully; otherwise, <see langword="false" />.
37+
</returns>
38+
<remarks>This method does not throw an exception if conversion fails.</remarks>
39+
</TryParse>
1540
<Optional>
1641
<summary>Specifies that TLS encryption is optional when connecting to the server. If the server requires encryption, encryption will be negotiated.</summary>
1742
</Optional>

src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,10 @@ public enum SqlConnectionIPAddressPreference
506506
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/SqlConnectionEncryptOption/*'/>
507507
public sealed class SqlConnectionEncryptOption
508508
{
509+
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/Parse/*' />
510+
public static SqlConnectionEncryptOption Parse(string value) => throw null;
511+
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/TryParse/*' />
512+
public static bool TryParse(string value, out SqlConnectionEncryptOption result) => throw null;
509513
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/Optional/*' />
510514
public static SqlConnectionEncryptOption Optional => throw null;
511515

src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,12 @@ public enum SqlConnectionIPAddressPreference
923923
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/SqlConnectionEncryptOption/*'/>
924924
public sealed class SqlConnectionEncryptOption
925925
{
926+
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/Parse/*' />
927+
public static SqlConnectionEncryptOption Parse(string value) => throw null;
928+
929+
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/TryParse/*' />
930+
public static bool TryParse(string value, out SqlConnectionEncryptOption result) => throw null;
931+
926932
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/Optional/*' />
927933
public static SqlConnectionEncryptOption Optional => throw null;
928934

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionEncryptOption.cs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5+
using System;
56
using Microsoft.Data.Common;
67

78
namespace Microsoft.Data.SqlClient
@@ -29,28 +30,46 @@ private SqlConnectionEncryptOption(string value)
2930
_value = value;
3031
}
3132

32-
internal static SqlConnectionEncryptOption Parse(string value)
33+
/// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/Parse/*' />
34+
public static SqlConnectionEncryptOption Parse(string value)
3335
{
34-
switch (value.ToLower())
36+
if (TryParse(value, out SqlConnectionEncryptOption result))
37+
{
38+
return result;
39+
}
40+
else
41+
{
42+
throw ADP.InvalidConnectionOptionValue(SqlConnectionString.KEY.Encrypt);
43+
}
44+
}
45+
46+
/// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionEncryptOption.xml' path='docs/members[@name="SqlConnectionEncryptOption"]/TryParse/*' />
47+
public static bool TryParse(string value, out SqlConnectionEncryptOption result)
48+
{
49+
switch (value?.ToLower())
3550
{
3651
case TRUE_LOWER:
3752
case YES_LOWER:
3853
case MANDATORY_LOWER:
3954
{
40-
return Mandatory;
55+
result = Mandatory;
56+
return true;
4157
}
4258
case FALSE_LOWER:
4359
case NO_LOWER:
4460
case OPTIONAL_LOWER:
4561
{
46-
return Optional;
62+
result = Optional;
63+
return true;
4764
}
4865
case STRICT_LOWER:
4966
{
50-
return Strict;
67+
result = Strict;
68+
return true;
5169
}
5270
default:
53-
throw ADP.InvalidConnectionOptionValue(SqlConnectionString.KEY.Encrypt);
71+
result = null;
72+
return false;
5473
}
5574
}
5675

src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlConnectionStringBuilderTest.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,47 @@ public void ConnectionBuilderEncryptBackwardsCompatibility()
385385
Assert.True(builder.Encrypt);
386386
}
387387

388+
[Theory]
389+
[InlineData("true", "True")]
390+
[InlineData("mandatory", "True")]
391+
[InlineData("yes", "True")]
392+
[InlineData("false", "False")]
393+
[InlineData("optional", "False")]
394+
[InlineData("no", "False")]
395+
[InlineData("strict", "Strict")]
396+
public void EncryptParserValidValuesParsesSuccessfully(string value, string expectedValue)
397+
=> Assert.Equal(expectedValue, SqlConnectionEncryptOption.Parse(value).ToString());
398+
399+
[Theory]
400+
[InlineData("something")]
401+
[InlineData("")]
402+
[InlineData(null)]
403+
[InlineData(" true ")]
404+
public void EncryptParserInvalidValuesThrowsException(string value)
405+
=> Assert.Throws<ArgumentException>(() => SqlConnectionEncryptOption.Parse(value));
406+
407+
[Theory]
408+
[InlineData("true", "True")]
409+
[InlineData("mandatory", "True")]
410+
[InlineData("yes", "True")]
411+
[InlineData("false", "False")]
412+
[InlineData("optional", "False")]
413+
[InlineData("no", "False")]
414+
[InlineData("strict", "Strict")]
415+
public void EncryptTryParseValidValuesReturnsTrue(string value, string expectedValue)
416+
{
417+
Assert.True(SqlConnectionEncryptOption.TryParse(value, out var result));
418+
Assert.Equal(expectedValue, result.ToString());
419+
}
420+
421+
[Theory]
422+
[InlineData("something")]
423+
[InlineData("")]
424+
[InlineData(null)]
425+
[InlineData(" true ")]
426+
public void EncryptTryParseInvalidValuesReturnsFalse(string value)
427+
=> Assert.False(SqlConnectionEncryptOption.TryParse(value, out _));
428+
388429
internal void ExecuteConnectionStringTests(string connectionString)
389430
{
390431
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);

0 commit comments

Comments
 (0)