internal static int GetKeyValuePair(string connectionString, int currentPosition, StringBuilder buffer, bool useOdbcRules, out string keyname, out string keyvalue) { char chr; int num = currentPosition; buffer.Length = 0; keyname = null; keyvalue = null; ParserState parserState = ParserState.NothingYet; int length = connectionString.Length; Label8: while (currentPosition < length) { chr = connectionString[currentPosition]; ParserState parserState1 = parserState; if (parserState1 == ParserState.NothingYet) { if (59 == chr || char.IsWhiteSpace(chr)) { goto Label2; } if (chr != 0) { if (!char.IsControl(chr)) { num = currentPosition; if (61 == chr) { parserState = ParserState.KeyEqual; goto Label2; } else { parserState = ParserState.Key; } } else { throw ADP.ConnectionStringSyntax(num); } } else { parserState = ParserState.NullTermination; goto Label2; } } else if (parserState1 == ParserState.Key) { if (61 != chr) { if (char.IsWhiteSpace(chr) || !char.IsControl(chr)) { goto Label4; } throw ADP.ConnectionStringSyntax(num); } else { parserState = ParserState.KeyEqual; goto Label2; } } else if (parserState1 == ParserState.KeyEqual) { if (useOdbcRules || 61 != chr) { keyname = DbConnectionOptions.GetKeyName(buffer); if (!ADP.IsEmpty(ref keyname)) { buffer.Length = 0; parserState = ParserState.KeyEnd; goto Label0; } else { throw ADP.ConnectionStringSyntax(num); } } else { parserState = ParserState.Key; } } else if (parserState1 == ParserState.KeyEnd) { goto Label0; } else if (parserState1 == ParserState.UnquotedValue) { if (char.IsWhiteSpace(chr)) { goto Label4; } if (char.IsControl(chr)) { break; } if (59 != chr) { goto Label4; } break; } else if (parserState1 == ParserState.DoubleQuoteValue) { if (34 != chr) { if (chr != 0) { goto Label4; } throw ADP.ConnectionStringSyntax(num); } else { parserState = ParserState.DoubleQuoteValueQuote; goto Label2; } } else if (parserState1 == ParserState.DoubleQuoteValueQuote) { if (34 != chr) { keyvalue = DbConnectionOptions.GetKeyValue(buffer, false); parserState = ParserState.QuotedValueEnd; goto Label1; } else { parserState = ParserState.DoubleQuoteValue; } } else if (parserState1 == ParserState.SingleQuoteValue) { if (39 != chr) { if (chr != 0) { goto Label4; } throw ADP.ConnectionStringSyntax(num); } else { parserState = ParserState.SingleQuoteValueQuote; goto Label2; } } else if (parserState1 == ParserState.SingleQuoteValueQuote) { if (39 != chr) { keyvalue = DbConnectionOptions.GetKeyValue(buffer, false); parserState = ParserState.QuotedValueEnd; goto Label1; } else { parserState = ParserState.SingleQuoteValue; } } else if (parserState1 == ParserState.BraceQuoteValue) { if (125 != chr) { if (chr != 0) { goto Label4; } throw ADP.ConnectionStringSyntax(num); } else { parserState = ParserState.BraceQuoteValueQuote; } } else if (parserState1 == ParserState.BraceQuoteValueQuote) { if (125 != chr) { keyvalue = DbConnectionOptions.GetKeyValue(buffer, false); parserState = ParserState.QuotedValueEnd; goto Label1; } else { parserState = ParserState.BraceQuoteValue; } } else if (parserState1 == ParserState.QuotedValueEnd) { goto Label1; } else if (parserState1 == ParserState.NullTermination) { if (chr == 0 || char.IsWhiteSpace(chr)) { goto Label2; } throw ADP.ConnectionStringSyntax(currentPosition); } else { throw ADP.InternalError(InternalErrorCode.InvalidParserState1); } Label4: buffer.Append(chr); goto Label2; } ParserState parserState2 = parserState; switch (parserState2) { case ParserState.KeyEqual: case ParserState.DoubleQuoteValue: case ParserState.NothingYet | ParserState.Key | ParserState.KeyEqual | ParserState.KeyEnd | ParserState.UnquotedValue | ParserState.DoubleQuoteValue | ParserState.DoubleQuoteValueQuote | ParserState.SingleQuoteValue | ParserState.SingleQuoteValueQuote | ParserState.BraceQuoteValue | ParserState.BraceQuoteValueQuote | ParserState.QuotedValueEnd | ParserState.NullTermination: { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } case ParserState.KeyEnd: case ParserState.SingleQuoteValue: case ParserState.BraceQuoteValue: case ParserState.QuotedValueEnd: { throw ADP.ConnectionStringSyntax(num); } case ParserState.UnquotedValue: { keyname = DbConnectionOptions.GetKeyName(buffer); if (!ADP.IsEmpty(ref keyname)) { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } throw ADP.ConnectionStringSyntax(num); } case ParserState.DoubleQuoteValueQuote: { keyvalue = DbConnectionOptions.GetKeyValue(buffer, true); char chars = keyvalue.Chars; if (useOdbcRules || 39 != chars && 34 != chars) { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } throw ADP.ConnectionStringSyntax(num); } case ParserState.SingleQuoteValueQuote: case ParserState.BraceQuoteValueQuote: case ParserState.NullTermination: case ParserState.Key | ParserState.KeyEnd | ParserState.DoubleQuoteValue | ParserState.SingleQuoteValue | ParserState.BraceQuoteValue | ParserState.QuotedValueEnd: { keyvalue = DbConnectionOptions.GetKeyValue(buffer, false); if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } } throw ADP.InternalError(InternalErrorCode.InvalidParserState2); Label0: if (!char.IsWhiteSpace(chr)) { if (!useOdbcRules) { if (39 != chr) { if (34 != chr) { goto Label7; } parserState = ParserState.DoubleQuoteValue; goto Label2; } else { parserState = ParserState.SingleQuoteValue; goto Label2; } } else { if (123 != chr) { goto Label7; } parserState = ParserState.BraceQuoteValue; goto Label4; } Label7: if (59 == chr || chr == 0) { parserState2 = parserState; switch (parserState2) { case ParserState.KeyEqual: case ParserState.DoubleQuoteValue: case ParserState.NothingYet | ParserState.Key | ParserState.KeyEqual | ParserState.KeyEnd | ParserState.UnquotedValue | ParserState.DoubleQuoteValue | ParserState.DoubleQuoteValueQuote | ParserState.SingleQuoteValue | ParserState.SingleQuoteValueQuote | ParserState.BraceQuoteValue | ParserState.BraceQuoteValueQuote | ParserState.QuotedValueEnd | ParserState.NullTermination: { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } case ParserState.KeyEnd: case ParserState.SingleQuoteValue: case ParserState.BraceQuoteValue: case ParserState.QuotedValueEnd: { throw ADP.ConnectionStringSyntax(num); } case ParserState.UnquotedValue: { keyname = DbConnectionOptions.GetKeyName(buffer); if (!ADP.IsEmpty(ref keyname)) { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } throw ADP.ConnectionStringSyntax(num); } case ParserState.DoubleQuoteValueQuote: { keyvalue = DbConnectionOptions.GetKeyValue(buffer, true); char chars = keyvalue.Chars; if (useOdbcRules || 39 != chars && 34 != chars) { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } throw ADP.ConnectionStringSyntax(num); } case ParserState.SingleQuoteValueQuote: case ParserState.BraceQuoteValueQuote: case ParserState.NullTermination: case ParserState.Key | ParserState.KeyEnd | ParserState.DoubleQuoteValue | ParserState.SingleQuoteValue | ParserState.BraceQuoteValue | ParserState.QuotedValueEnd: { keyvalue = DbConnectionOptions.GetKeyValue(buffer, false); if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } } throw ADP.InternalError(InternalErrorCode.InvalidParserState2); } if (!char.IsControl(chr)) { parserState = ParserState.UnquotedValue; goto Label4; } else { throw ADP.ConnectionStringSyntax(num); } } Label2: currentPosition++; goto Label8; Label1: if (!char.IsWhiteSpace(chr)) { if (59 == chr) { parserState2 = parserState; switch (parserState2) { case ParserState.KeyEqual: case ParserState.DoubleQuoteValue: case ParserState.NothingYet | ParserState.Key | ParserState.KeyEqual | ParserState.KeyEnd | ParserState.UnquotedValue | ParserState.DoubleQuoteValue | ParserState.DoubleQuoteValueQuote | ParserState.SingleQuoteValue | ParserState.SingleQuoteValueQuote | ParserState.BraceQuoteValue | ParserState.BraceQuoteValueQuote | ParserState.QuotedValueEnd | ParserState.NullTermination: { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } case ParserState.KeyEnd: case ParserState.SingleQuoteValue: case ParserState.BraceQuoteValue: case ParserState.QuotedValueEnd: { throw ADP.ConnectionStringSyntax(num); } case ParserState.UnquotedValue: { keyname = DbConnectionOptions.GetKeyName(buffer); if (!ADP.IsEmpty(ref keyname)) { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } throw ADP.ConnectionStringSyntax(num); } case ParserState.DoubleQuoteValueQuote: { keyvalue = DbConnectionOptions.GetKeyValue(buffer, true); char chars = keyvalue.Chars; if (useOdbcRules || 39 != chars && 34 != chars) { if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } throw ADP.ConnectionStringSyntax(num); } case ParserState.SingleQuoteValueQuote: case ParserState.BraceQuoteValueQuote: case ParserState.NullTermination: case ParserState.Key | ParserState.KeyEnd | ParserState.DoubleQuoteValue | ParserState.SingleQuoteValue | ParserState.BraceQuoteValue | ParserState.QuotedValueEnd: { keyvalue = DbConnectionOptions.GetKeyValue(buffer, false); if (59 == chr && currentPosition < connectionString.Length) { currentPosition++; } return currentPosition; } } throw ADP.InternalError(InternalErrorCode.InvalidParserState2); } if (chr != 0) { throw ADP.ConnectionStringSyntax(num); } else { parserState = ParserState.NullTermination; goto Label2; } } else { goto Label2; } }