Skip to content

Commit 485976b

Browse files
committed
Cleanup of debug partial
1 parent 447e76b commit 485976b

File tree

1 file changed

+54
-36
lines changed

1 file changed

+54
-36
lines changed

src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.Debug.cs

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ internal partial class DbConnectionOptions
2020
+ "(?<key>([^=\\s\\p{Cc}]|\\s+[^=\\s\\p{Cc}]|\\s+==|==)+)" // allow any visible character for keyname except '=' which must quoted as '=='
2121
+ "\\s*=(?!=)\\s*" // the equal sign divides the key and value parts
2222
+ "(?<value>"
23-
+ "(\"([^\"\u0000]|\"\")*\")" // double quoted string, " must be quoted as ""
23+
+ "(\"([^\"\u0000]|\"\")*\")" // double-quoted string, " must be quoted as ""
2424
+ "|"
25-
+ "('([^'\u0000]|'')*')" // single quoted string, ' must be quoted as ''
25+
+ "('([^'\u0000]|'')*')" // single-quoted string, ' must be quoted as ''
2626
+ "|"
2727
+ "((?![\"'\\s])" // unquoted value must not start with " or ' or space, would also like = but too late to change
2828
+ "([^;\\s\\p{Cc}]|\\s+[^;\\s\\p{Cc}])*" // control characters must be quoted
@@ -73,18 +73,24 @@ private static void DebugTraceKeyValuePair(string keyname, string keyvalue, Dict
7373
}
7474
}
7575

76-
private static void ParseComparison(Dictionary<string, string> parsetable, string connectionString, Dictionary<string, string> synonyms, bool firstKey, Exception e)
76+
#if DEBUG
77+
private static void ParseComparison(
78+
Dictionary<string, string> parseTable,
79+
string connectionString,
80+
Dictionary<string, string> synonyms,
81+
bool firstKey,
82+
Exception e)
7783
{
7884
try
7985
{
80-
var parsedvalues = SplitConnectionString(connectionString, synonyms, firstKey);
81-
foreach (var entry in parsedvalues)
86+
var parsedValues = SplitConnectionString(connectionString, synonyms, firstKey);
87+
foreach (var parsedValue in parsedValues)
8288
{
83-
string keyname = entry.Key;
84-
string value1 = entry.Value;
85-
string value2;
86-
bool parsetableContainsKey = parsetable.TryGetValue(keyname, out value2);
87-
Debug.Assert(parsetableContainsKey, $"{nameof(ParseInternal)} code vs. regex mismatch keyname <{keyname}>");
89+
string key = parsedValue.Key;
90+
string value1 = parsedValue.Value;
91+
92+
bool parseTableContainsKey = parseTable.TryGetValue(key, out string value2);
93+
Debug.Assert(parseTableContainsKey, $"{nameof(ParseInternal)} code vs. regex mismatch keyname <{key}>");
8894
Debug.Assert(value1 == value2, $"{nameof(ParseInternal)} code vs. regex mismatch keyvalue <{value1}> <{value2}>");
8995
}
9096
}
@@ -97,38 +103,46 @@ private static void ParseComparison(Dictionary<string, string> parsetable, strin
97103

98104
const string KeywordNotSupportedMessagePrefix = "Keyword not supported:";
99105
const string WrongFormatMessagePrefix = "Format of the initialization string";
100-
bool isEquivalent = (msg1 == msg2);
106+
bool isEquivalent = msg1 == msg2;
101107
if (!isEquivalent)
102108
{
103109
// We also accept cases were Regex parser (debug only) reports "wrong format" and
104110
// retail parsing code reports format exception in different location or "keyword not supported"
105111
if (msg2.StartsWith(WrongFormatMessagePrefix, StringComparison.Ordinal))
106112
{
107-
if (msg1.StartsWith(KeywordNotSupportedMessagePrefix, StringComparison.Ordinal) || msg1.StartsWith(WrongFormatMessagePrefix, StringComparison.Ordinal))
113+
if (msg1.StartsWith(KeywordNotSupportedMessagePrefix, StringComparison.Ordinal) ||
114+
msg1.StartsWith(WrongFormatMessagePrefix, StringComparison.Ordinal))
108115
{
109116
isEquivalent = true;
110117
}
111118
}
112119
}
120+
113121
Debug.Assert(isEquivalent, "ParseInternal code vs regex message mismatch: <" + msg1 + "> <" + msg2 + ">");
114122
}
115123
else
116124
{
117125
Debug.Fail("ParseInternal code vs regex throw mismatch " + f.Message);
118126
}
127+
119128
e = null;
120129
}
130+
121131
if (e != null)
122132
{
123133
Debug.Fail("ParseInternal code threw exception vs regex mismatch");
124134
}
125135
}
126-
127-
128-
private static Dictionary<string, string> SplitConnectionString(string connectionString, Dictionary<string, string> synonyms, bool firstKey)
136+
#endif
137+
138+
#if DEBUG
139+
private static Dictionary<string, string> SplitConnectionString(
140+
string connectionString,
141+
Dictionary<string, string> synonyms,
142+
bool firstKey)
129143
{
130-
var parsetable = new Dictionary<string, string>();
131-
Regex parser = (firstKey ? s_connectionStringRegexOdbc : s_connectionStringRegex);
144+
var parseTable = new Dictionary<string, string>();
145+
Regex parser = firstKey ? ConnectionStringRegexOdbc : ConnectionStringRegex;
132146

133147
const int KeyIndex = 1, ValueIndex = 2;
134148
Debug.Assert(KeyIndex == parser.GroupNumberFromName("key"), "wrong key index");
@@ -137,27 +151,28 @@ private static Dictionary<string, string> SplitConnectionString(string connectio
137151
if (connectionString != null)
138152
{
139153
Match match = parser.Match(connectionString);
140-
if (!match.Success || (match.Length != connectionString.Length))
154+
if (!match.Success || match.Length != connectionString.Length)
141155
{
142156
throw ADP.ConnectionStringSyntax(match.Length);
143157
}
158+
144159
int indexValue = 0;
145-
CaptureCollection keyvalues = match.Groups[ValueIndex].Captures;
160+
CaptureCollection keyValues = match.Groups[ValueIndex].Captures;
146161
foreach (Capture keypair in match.Groups[KeyIndex].Captures)
147162
{
148-
string keyname = (firstKey ? keypair.Value : keypair.Value.Replace("==", "=")).ToLower(CultureInfo.InvariantCulture);
149-
string keyvalue = keyvalues[indexValue++].Value;
150-
if (0 < keyvalue.Length)
163+
string keyName = (firstKey ? keypair.Value : keypair.Value.Replace("==", "=")).ToLower(CultureInfo.InvariantCulture);
164+
string keyValue = keyValues[indexValue++].Value;
165+
if (0 < keyValue.Length)
151166
{
152167
if (!firstKey)
153168
{
154-
switch (keyvalue[0])
169+
switch (keyValue[0])
155170
{
156171
case '\"':
157-
keyvalue = keyvalue.Substring(1, keyvalue.Length - 2).Replace("\"\"", "\"");
172+
keyValue = keyValue.Substring(1, keyValue.Length - 2).Replace("\"\"", "\"");
158173
break;
159174
case '\'':
160-
keyvalue = keyvalue.Substring(1, keyvalue.Length - 2).Replace("\'\'", "\'");
175+
keyValue = keyValue.Substring(1, keyValue.Length - 2).Replace("\'\'", "\'");
161176
break;
162177
default:
163178
break;
@@ -166,25 +181,28 @@ private static Dictionary<string, string> SplitConnectionString(string connectio
166181
}
167182
else
168183
{
169-
keyvalue = null;
184+
keyValue = null;
170185
}
171-
DebugTraceKeyValuePair(keyname, keyvalue, synonyms);
172-
string synonym;
173-
string realkeyname = synonyms != null
174-
? (synonyms.TryGetValue(keyname, out synonym) ? synonym : null)
175-
: keyname;
186+
187+
DebugTraceKeyValuePair(keyName, keyValue, synonyms);
188+
string realKeyName = synonyms != null
189+
? synonyms.TryGetValue(keyName, out string synonym) ? synonym : null
190+
: keyName;
176191

177-
if (!IsKeyNameValid(realkeyname))
192+
if (!IsKeyNameValid(realKeyName))
178193
{
179-
throw ADP.KeywordNotSupported(keyname);
194+
throw ADP.KeywordNotSupported(keyName);
180195
}
181-
if (!firstKey || !parsetable.ContainsKey(realkeyname))
196+
197+
if (!firstKey || !parseTable.ContainsKey(realKeyName))
182198
{
183-
parsetable[realkeyname] = keyvalue; // last key-value pair wins (or first)
199+
parseTable[realKeyName] = keyValue; // last key-value pair wins (or first)
184200
}
185201
}
186202
}
187-
return parsetable;
203+
204+
return parseTable;
188205
}
206+
#endif
189207
}
190208
}

0 commit comments

Comments
 (0)