private int LinearIndexOf(string fieldName, CompareOptions compareOptions) { CompareInfo compareInfo = _compareInfo; if (null == compareInfo) { if (-1 != _defaultLocaleID) { compareInfo = CompareInfo.GetCompareInfo(LocaleInterop.GetLocaleNameForLcid(_defaultLocaleID)); } if (null == compareInfo) { compareInfo = CultureInfo.InvariantCulture.CompareInfo; } _compareInfo = compareInfo; } int length = _fieldNames.Length; for (int i = 0; i < length; ++i) { if (0 == compareInfo.Compare(fieldName, _fieldNames[i], compareOptions)) { _fieldNameLookup[fieldName] = i; // add an exact match for the future return(i); } } return(-1); }
// Constructor: Construct from both Unicode and NonUnicode data, according to fUnicode /// <devdoc> /// <para> /// Initializes a new instance of the <see cref='System.Data.SqlTypes.SqlString'/> class. /// </para> /// </devdoc> public SqlString(int lcid, SqlCompareOptions compareOptions, byte[] data, int index, int count, bool fUnicode) { _lcid = lcid; ValidateSqlCompareOptions(compareOptions); _flag = compareOptions; if (data == null) { _fNotNull = false; _value = null; _cmpInfo = null; } else { _fNotNull = true; // m_cmpInfo is set lazily, so that we don't need to pay the cost // unless the string is used in comparison. _cmpInfo = null; if (fUnicode) { _value = x_UnicodeEncoding.GetString(data, index, count); } else { Encoding cpe = LocaleInterop.GetEncodingForLcid(_lcid); _value = cpe.GetString(data, index, count); } } }
private void SetCompareInfo() { Debug.Assert(!IsNull); if (_cmpInfo == null) { _cmpInfo = (new CultureInfo(LocaleInterop.GetLocaleNameForLcid(_lcid))).CompareInfo; } }
/// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public byte[] GetNonUnicodeBytes() { if (IsNull) { return(null); } // Get the CultureInfo Encoding cpe = LocaleInterop.GetEncodingForLcid(_lcid); return(cpe.GetBytes(_value)); }
/// <devdoc> /// <para> /// Initializes a new instance of the <see cref='System.Data.SqlTypes.SqlString'/> class. /// </para> /// </devdoc> public SqlString(String data) : this(data, LocaleInterop.GetCurrentCultureLcid(), s_iDefaultFlag) { }
// This is a modified version of SmiMetaDataFromSchemaTableRow above // Since CoreCLR doesn't have GetSchema, we need to infer the MetaData from the CLR Type alone static internal SmiExtendedMetaData SmiMetaDataFromType(string colName, Type colType) { // Determine correct SqlDbType. SqlDbType colDbType = InferSqlDbTypeFromType_Katmai(colType); if (InvalidSqlDbType == colDbType) { // Unknown through standard mapping, use VarBinary for columns that are Object typed, otherwise we error out. if (typeof(object) == colType) { colDbType = SqlDbType.VarBinary; } else { throw SQL.UnsupportedColumnTypeForSqlProvider(colName, colType.ToString()); } } // Determine metadata modifier values per type (maxlength, precision, scale, etc) long maxLength = 0; byte precision = 0; byte scale = 0; switch (colDbType) { case SqlDbType.BigInt: case SqlDbType.Bit: case SqlDbType.DateTime: case SqlDbType.Float: case SqlDbType.Image: case SqlDbType.Int: case SqlDbType.Money: case SqlDbType.NText: case SqlDbType.Real: case SqlDbType.UniqueIdentifier: case SqlDbType.SmallDateTime: case SqlDbType.SmallInt: case SqlDbType.SmallMoney: case SqlDbType.Text: case SqlDbType.Timestamp: case SqlDbType.TinyInt: case SqlDbType.Variant: case SqlDbType.Xml: case SqlDbType.Date: // These types require no metadata modifiers break; case SqlDbType.Binary: case SqlDbType.VarBinary: // source isn't specifying a size, so assume the Maximum if (SqlDbType.Binary == colDbType) { maxLength = SmiMetaData.MaxBinaryLength; } else { maxLength = SmiMetaData.UnlimitedMaxLengthIndicator; } break; case SqlDbType.Char: case SqlDbType.VarChar: // source isn't specifying a size, so assume the Maximum if (SqlDbType.Char == colDbType) { maxLength = SmiMetaData.MaxANSICharacters; } else { maxLength = SmiMetaData.UnlimitedMaxLengthIndicator; } break; case SqlDbType.NChar: case SqlDbType.NVarChar: // source isn't specifying a size, so assume the Maximum if (SqlDbType.NChar == colDbType) { maxLength = SmiMetaData.MaxUnicodeCharacters; } else { maxLength = SmiMetaData.UnlimitedMaxLengthIndicator; } break; case SqlDbType.Decimal: // Decimal requires precision and scale precision = SmiMetaData.DefaultDecimal.Precision; scale = SmiMetaData.DefaultDecimal.Scale; break; case SqlDbType.Time: case SqlDbType.DateTime2: case SqlDbType.DateTimeOffset: // requires scale scale = SmiMetaData.DefaultTime.Scale; break; case SqlDbType.Udt: case SqlDbType.Structured: default: // These types are not supported from SchemaTable throw SQL.UnsupportedColumnTypeForSqlProvider(colName, colType.ToString()); } return(new SmiExtendedMetaData( colDbType, maxLength, precision, scale, LocaleInterop.GetCurrentCultureLcid(), SmiMetaData.GetDefaultForType(colDbType).CompareOptions, false, // no support for multi-valued columns in a TVP yet null, // no support for structured columns yet null, colName, null, null, null)); }