Imported Upstream version 5.4.0.167

Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-08-21 15:34:15 +00:00
parent e49d6f06c0
commit 536cd135cc
12856 changed files with 563812 additions and 223249 deletions

View File

@@ -70,10 +70,10 @@ Global
{F3E72F35-0351-4D67-9388-725BCAD807BA}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
{F3E72F35-0351-4D67-9388-725BCAD807BA}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
{F3E72F35-0351-4D67-9388-725BCAD807BA}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|Any CPU.ActiveCfg = netcoreapp-Debug|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|Any CPU.Build.0 = netcoreapp-Debug|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|Any CPU.ActiveCfg = netcoreapp-Release|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|Any CPU.Build.0 = netcoreapp-Release|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
{AF78BA88-6428-47EA-8682-442DAF8E9656}.Debug|Any CPU.ActiveCfg = netstandard-Windows_NT-Debug|Any CPU
{AF78BA88-6428-47EA-8682-442DAF8E9656}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
{AF78BA88-6428-47EA-8682-442DAF8E9656}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU

View File

@@ -2,6 +2,7 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\dir.props" />
<PropertyGroup>
<AssemblyVersion>4.1.2.0</AssemblyVersion>
<AssemblyVersion>4.3.0.0</AssemblyVersion>
<AssemblyKey>MSFT</AssemblyKey>
</PropertyGroup>
</Project>

View File

@@ -3,9 +3,18 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<ItemGroup>
<ProjectReference Include="..\ref\System.Data.SqlClient.csproj">
<SupportedFramework>net463;netcoreapp2.0;$(AllXamarinFrameworks)</SupportedFramework>
<SupportedFramework>net461;netcoreapp2.0;$(AllXamarinFrameworks)</SupportedFramework>
</ProjectReference>
<ProjectReference Include="..\src\System.Data.SqlClient.csproj" />
<HarvestIncludePaths Include="ref/net451;lib/net451;runtimes/win/lib/net451" />
<HarvestIncludePaths Include="ref/net46;lib/net46;runtimes/win/lib/net46" />
<HarvestIncludePaths Include="ref/netstandard1.2">
<SupportedFramework>net451;win81;wpa81</SupportedFramework>
</HarvestIncludePaths>
<HarvestIncludePaths Include="ref/netstandard1.3">
<SupportedFramework>net46;netcoreapp1.0</SupportedFramework>
</HarvestIncludePaths>
<HarvestIncludePaths Include="runtimes/unix/lib/netstandard1.3;runtimes/win/lib/netstandard1.3" />
</ItemGroup>
<ItemGroup>
<InboxOnTargetFramework Include="MonoAndroid10" />

View File

@@ -3,6 +3,7 @@
<PropertyGroup>
<BuildConfigurations>
netstandard;
netfx;
</BuildConfigurations>
</PropertyGroup>
</Project>

View File

@@ -7,25 +7,6 @@
namespace System.Data.SqlClient
{
// Declaring members from stripped base class CollectionBase
public sealed partial class SqlBulkCopyColumnMappingCollection : System.Collections.ICollection, System.Collections.IEnumerable, System.Collections.IList
{
public int Count { get { throw null; } }
bool System.Collections.ICollection.IsSynchronized { get { throw null; } }
object System.Collections.ICollection.SyncRoot { get { throw null; } }
bool System.Collections.IList.IsFixedSize { get { throw null; } }
bool System.Collections.IList.IsReadOnly { get { throw null; } }
object System.Collections.IList.this[int index] { get { throw null; } set { } }
public void Clear() { }
public System.Collections.IEnumerator GetEnumerator() { throw null; }
public void RemoveAt(int index) { }
void System.Collections.ICollection.CopyTo(System.Array array, int index) { }
int System.Collections.IList.Add(object value) { throw null; }
bool System.Collections.IList.Contains(object value) { throw null; }
int System.Collections.IList.IndexOf(object value) { throw null; }
void System.Collections.IList.Insert(int index, object value) { }
void System.Collections.IList.Remove(object value) { }
}
public sealed partial class SqlCommand : System.Data.Common.DbCommand
{
// SqlCommand expects IDisposable methods to be implemented via System.ComponentModel.Component, which it no longer inherits from

View File

@@ -32,7 +32,7 @@
namespace Microsoft.SqlServer.Server
{
public partial class SqlDataRecord
public partial class SqlDataRecord : System.Data.IDataRecord
{
public SqlDataRecord(params Microsoft.SqlServer.Server.SqlMetaData[] metaData) { }
public virtual int FieldCount { get { throw null; } }
@@ -43,6 +43,7 @@ namespace Microsoft.SqlServer.Server
public virtual long GetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) { throw null; }
public virtual char GetChar(int ordinal) { throw null; }
public virtual long GetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) { throw null; }
System.Data.IDataReader System.Data.IDataRecord.GetData(int ordinal) { throw null; }
public virtual string GetDataTypeName(int ordinal) { throw null; }
public virtual System.DateTime GetDateTime(int ordinal) { throw null; }
public virtual System.DateTimeOffset GetDateTimeOffset(int ordinal) { throw null; }
@@ -183,6 +184,17 @@ namespace Microsoft.SqlServer.Server
public static Microsoft.SqlServer.Server.SqlMetaData InferFromValue(object value, string name) { throw null; }
}
}
namespace System.Data.Sql
{
public sealed partial class SqlNotificationRequest
{
public SqlNotificationRequest() { }
public SqlNotificationRequest(string userData, string options, int timeout) { }
public string Options { get { throw null; } set { } }
public int Timeout { get { throw null; } set { } }
public string UserData { get { throw null; } set { } }
}
}
namespace System.Data.SqlClient
{
public enum ApplicationIntent
@@ -212,8 +224,20 @@ namespace System.Data.SqlClient
public void Close() { }
void System.IDisposable.Dispose() { }
public void WriteToServer(System.Data.Common.DbDataReader reader) { }
public void WriteToServer(System.Data.IDataReader reader) { }
public void WriteToServer(System.Data.DataTable table) { }
public void WriteToServer(System.Data.DataTable table, System.Data.DataRowState rowState) { }
public void WriteToServer(System.Data.DataRow[] rows) { }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataRow[] rows) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataRow[] rows, System.Threading.CancellationToken cancellationToken) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.IDataReader reader) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.IDataReader reader, System.Threading.CancellationToken cancellationToken) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.Common.DbDataReader reader) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.Common.DbDataReader reader, System.Threading.CancellationToken cancellationToken) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Threading.CancellationToken cancellationToken) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Data.DataRowState rowState) { throw null; }
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Data.DataRowState rowState, System.Threading.CancellationToken cancellationToken) { throw null; }
}
public sealed partial class SqlBulkCopyColumnMapping
{
@@ -227,7 +251,7 @@ namespace System.Data.SqlClient
public string SourceColumn { get { throw null; } set { } }
public int SourceOrdinal { get { throw null; } set { } }
}
public sealed partial class SqlBulkCopyColumnMappingCollection
public sealed partial class SqlBulkCopyColumnMappingCollection : System.Collections.CollectionBase
{
internal SqlBulkCopyColumnMappingCollection() { }
public System.Data.SqlClient.SqlBulkCopyColumnMapping this[int index] { get { throw null; } }
@@ -260,9 +284,26 @@ namespace System.Data.SqlClient
public override System.Data.Common.DbCommand CreateCommand() { throw null; }
public override System.Data.Common.DbConnection CreateConnection() { throw null; }
public override System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder() { throw null; }
public override System.Data.Common.DbDataAdapter CreateDataAdapter() { throw null; }
public override System.Data.Common.DbParameter CreateParameter() { throw null; }
}
public sealed partial class SqlCommand : System.Data.Common.DbCommand
public static partial class SqlClientMetaDataCollectionNames
{
public static readonly string Columns;
public static readonly string Databases;
public static readonly string ForeignKeys;
public static readonly string IndexColumns;
public static readonly string Indexes;
public static readonly string Parameters;
public static readonly string ProcedureColumns;
public static readonly string Procedures;
public static readonly string Tables;
public static readonly string UserDefinedTypes;
public static readonly string Users;
public static readonly string ViewColumns;
public static readonly string Views;
}
public sealed partial class SqlCommand : System.Data.Common.DbCommand, System.ICloneable
{
public SqlCommand() { }
public SqlCommand(string cmdText) { }
@@ -281,6 +322,8 @@ namespace System.Data.SqlClient
public override System.Data.UpdateRowSource UpdatedRowSource { get { throw null; } set { } }
public event System.Data.StatementCompletedEventHandler StatementCompleted { add { } remove { } }
public override void Cancel() { }
object System.ICloneable.Clone() { throw null; }
public SqlCommand Clone() { throw null; }
protected override System.Data.Common.DbParameter CreateDbParameter() { throw null; }
public new System.Data.SqlClient.SqlParameter CreateParameter() { throw null; }
protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior) { throw null; }
@@ -299,12 +342,14 @@ namespace System.Data.SqlClient
public System.Threading.Tasks.Task<System.Xml.XmlReader> ExecuteXmlReaderAsync() { throw null; }
public System.Threading.Tasks.Task<System.Xml.XmlReader> ExecuteXmlReaderAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
public override void Prepare() { }
public System.Data.Sql.SqlNotificationRequest Notification { get { throw null; } set { } }
}
public sealed partial class SqlConnection : System.Data.Common.DbConnection
public sealed partial class SqlConnection : System.Data.Common.DbConnection, System.ICloneable
{
public SqlConnection() { }
public SqlConnection(string connectionString) { }
public System.Guid ClientConnectionId { get { throw null; } }
object ICloneable.Clone() { throw null; }
public override string ConnectionString { get { throw null; } set { } }
public override int ConnectionTimeout { get { throw null; } }
public override string Database { get { throw null; } }
@@ -372,6 +417,108 @@ namespace System.Data.SqlClient
public override bool ShouldSerialize(string keyword) { throw null; }
public override bool TryGetValue(string keyword, out object value) { throw null; }
}
public sealed partial class SqlDataAdapter : System.Data.Common.DbDataAdapter, System.Data.IDbDataAdapter, System.ICloneable
{
public SqlDataAdapter() { }
public SqlDataAdapter(SqlCommand selectCommand) { }
public SqlDataAdapter(string selectCommandText, string selectConnectionString) { }
public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection) { }
new public SqlCommand DeleteCommand { get { throw null; } set { } }
new public SqlCommand InsertCommand { get { throw null; } set { } }
new public SqlCommand SelectCommand { get { throw null; } set { } }
System.Data.IDbCommand System.Data.IDbDataAdapter.DeleteCommand { get { throw null; } set { } }
System.Data.IDbCommand System.Data.IDbDataAdapter.InsertCommand { get { throw null; } set { } }
System.Data.IDbCommand System.Data.IDbDataAdapter.SelectCommand { get { throw null; } set { } }
System.Data.IDbCommand System.Data.IDbDataAdapter.UpdateCommand { get { throw null; } set { } }
override public int UpdateBatchSize { get { throw null; } set { } }
new public SqlCommand UpdateCommand { get { throw null; } set { } }
public event SqlRowUpdatedEventHandler RowUpdated { add { } remove { } }
public event SqlRowUpdatingEventHandler RowUpdating { add { } remove { } }
protected override void OnRowUpdated(System.Data.Common.RowUpdatedEventArgs value) { }
protected override void OnRowUpdating(System.Data.Common.RowUpdatingEventArgs value) { }
object System.ICloneable.Clone() { throw null; }
}
public sealed partial class SqlDependency
{
public SqlDependency() { }
public SqlDependency(SqlCommand command) { }
public SqlDependency(SqlCommand command, string options, int timeout) { }
public bool HasChanges { get { throw null; } }
public string Id { get { throw null; } }
public event OnChangeEventHandler OnChange { add { } remove { } }
public void AddCommandDependency(SqlCommand command) { }
public static bool Start(string connectionString) { throw null; }
public static bool Start(string connectionString, string queue) { throw null; }
public static bool Stop(string connectionString) { throw null; }
public static bool Stop(string connectionString, string queue) { throw null; }
}
public delegate void OnChangeEventHandler(object sender, SqlNotificationEventArgs e);
public partial class SqlNotificationEventArgs : System.EventArgs
{
public SqlNotificationEventArgs(SqlNotificationType type, SqlNotificationInfo info, SqlNotificationSource source) { }
public SqlNotificationType Type { get { throw null; } }
public SqlNotificationInfo Info { get { throw null; } }
public SqlNotificationSource Source { get { throw null; } }
}
public enum SqlNotificationInfo
{
Truncate = 0,
Insert = 1,
Update = 2,
Delete = 3,
Drop = 4,
Alter = 5,
Restart = 6,
Error = 7,
Query = 8,
Invalid = 9,
Options = 10,
Isolation = 11,
Expired = 12,
Resource = 13,
PreviousFire = 14,
TemplateLimit = 15,
Merge = 16,
Unknown = -1,
AlreadyChanged = -2
}
public enum SqlNotificationSource
{
Data = 0,
Timeout = 1,
Object = 2,
Database = 3,
System = 4,
Statement = 5,
Environment = 6,
Execution = 7,
Owner = 8,
Unknown = -1,
Client = -2
}
public enum SqlNotificationType
{
Change = 0,
Subscribe = 1,
Unknown = -1
}
public sealed partial class SqlRowUpdatedEventArgs : System.Data.Common.RowUpdatedEventArgs
{
public SqlRowUpdatedEventArgs(DataRow row, IDbCommand command, StatementType statementType, System.Data.Common.DataTableMapping tableMapping)
: base(row, command, statementType, tableMapping) { }
new public SqlCommand Command { get { throw null; } }
}
public delegate void SqlRowUpdatedEventHandler(object sender, SqlRowUpdatedEventArgs e);
public sealed partial class SqlRowUpdatingEventArgs : System.Data.Common.RowUpdatingEventArgs
{
public SqlRowUpdatingEventArgs(DataRow row, IDbCommand command, StatementType statementType, System.Data.Common.DataTableMapping tableMapping)
: base(row, command, statementType, tableMapping) { }
new public SqlCommand Command { get { throw null; } set { } }
protected override System.Data.IDbCommand BaseCommand { get { throw null; } set { } }
}
public delegate void SqlRowUpdatingEventHandler(object sender, SqlRowUpdatingEventArgs e);
public partial class SqlDataReader : System.Data.Common.DbDataReader, System.IDisposable
{
internal SqlDataReader() { }
@@ -488,13 +635,15 @@ namespace System.Data.SqlClient
public override string ToString() { throw null; }
}
public delegate void SqlInfoMessageEventHandler(object sender, System.Data.SqlClient.SqlInfoMessageEventArgs e);
public sealed partial class SqlParameter : System.Data.Common.DbParameter
public sealed partial class SqlParameter : System.Data.Common.DbParameter, System.ICloneable
{
public SqlParameter() { }
public SqlParameter(string parameterName, System.Data.SqlDbType dbType) { }
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size) { }
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, string sourceColumn) { }
public SqlParameter(string parameterName, object value) { }
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, System.Data.ParameterDirection direction, byte precision, byte scale, string sourceColumn, System.Data.DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName) { }
object ICloneable.Clone() { throw null; }
public System.Data.SqlTypes.SqlCompareOptions CompareInfo { get { throw null; } set { } }
public override System.Data.DbType DbType { get { throw null; } set { } }
public override System.Data.ParameterDirection Direction { get { throw null; } set { } }
@@ -507,6 +656,7 @@ namespace System.Data.SqlClient
public override int Size { get { throw null; } set { } }
public override string SourceColumn { get { throw null; } set { } }
public override bool SourceColumnNullMapping { get { throw null; } set { } }
public override DataRowVersion SourceVersion { get { throw null; } set { } }
public System.Data.SqlDbType SqlDbType { get { throw null; } set { } }
public object SqlValue { get { throw null; } set { } }
public string TypeName { get { throw null; } set { } }
@@ -573,3 +723,10 @@ namespace System.Data.SqlClient
public void Save(string savePointName) { }
}
}
namespace System.Data
{
public sealed partial class OperationAbortedException : System.SystemException
{
internal OperationAbortedException() { }
}
}

View File

@@ -3,12 +3,21 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<PropertyGroup>
<ProjectGuid>{D58E8D2B-3331-4660-8DFB-512D66F8EC63}</ProjectGuid>
<IsPartialFacadeAssembly Condition="'$(TargetGroup)' == 'netfx'">true</IsPartialFacadeAssembly>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.Data.SqlClient.cs" />
<Compile Include="System.Data.SqlClient.Manual.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetGroup)' == 'netfx'">
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>

View File

@@ -4,6 +4,10 @@
<BuildConfigurations>
netstandard-Unix;
netstandard-Windows_NT;
netstandard1.2;
netstandard1.3;
netstandard;
netfx-Windows_NT;
</BuildConfigurations>
</PropertyGroup>
</Project>

View File

@@ -68,6 +68,7 @@ namespace Microsoft.SqlServer.Server
SqlDbType.NVarChar, // System.Data.SqlTypes.SqlChars
SqlDbType.VarBinary, // System.Data.SqlTypes.SqlBytes
SqlDbType.Xml, // System.Data.SqlTypes.SqlXml
SqlDbType.Structured, // System.Data.DataTable
SqlDbType.Structured, // System.Collections.IEnumerable, used for TVPs it must return IDataRecord
SqlDbType.Structured, // System.Collections.Generic.IEnumerable<Microsoft.SqlServer.Server.SqlDataRecord>
SqlDbType.Time, // System.TimeSpan
@@ -121,12 +122,12 @@ namespace Microsoft.SqlServer.Server
{ typeof(SqlChars), ExtendedClrTypeCode.SqlChars },
{ typeof(SqlBytes), ExtendedClrTypeCode.SqlBytes },
{ typeof(SqlXml), ExtendedClrTypeCode.SqlXml },
{ typeof(DataTable), ExtendedClrTypeCode.DataTable },
{ typeof(DbDataReader), ExtendedClrTypeCode.DbDataReader },
{ typeof(IEnumerable<SqlDataRecord>), ExtendedClrTypeCode.IEnumerableOfSqlDataRecord },
{ typeof(TimeSpan), ExtendedClrTypeCode.TimeSpan },
{ typeof(DateTimeOffset), ExtendedClrTypeCode.DateTimeOffset },
};
Debug.Assert(dictionary.Count == Count);
return dictionary;
}
@@ -168,8 +169,6 @@ namespace Microsoft.SqlServer.Server
metaData.SqlDbType == SqlDbType.Udt;
}
// If we know we're only going to use this object to assign to a specific SqlDbType back end object,
// we can save some processing time by only checking for the few valid types that can be assigned to the dbType.
// This assumes a switch statement over SqlDbType is faster than getting the ClrTypeCode and iterating over a
@@ -336,7 +335,11 @@ namespace Microsoft.SqlServer.Server
case SqlDbType.Structured:
if (isMultiValued)
{
if (value is IEnumerable<SqlDataRecord>)
if (value is DataTable)
{
extendedCode = ExtendedClrTypeCode.DataTable;
}
else if (value is IEnumerable<SqlDataRecord>)
{
extendedCode = ExtendedClrTypeCode.IEnumerableOfSqlDataRecord;
}
@@ -413,7 +416,6 @@ namespace Microsoft.SqlServer.Server
return returnType;
}
internal static SqlMetaData SmiExtendedMetaDataToSqlMetaData(SmiExtendedMetaData source)
{
if (SqlDbType.Xml == source.SqlDbType)
@@ -443,7 +445,6 @@ namespace Microsoft.SqlServer.Server
}
// Convert SqlMetaData instance to an SmiExtendedMetaData instance.
internal static SmiExtendedMetaData SqlMetaDataToSmiExtendedMetaData(SqlMetaData source)
{
// now map everything across to the extended metadata object
@@ -474,7 +475,6 @@ namespace Microsoft.SqlServer.Server
typeSpecificNamePart3);
}
// compare SmiMetaData to SqlMetaData and determine if they are compatible.
internal static bool IsCompatible(SmiMetaData firstMd, SqlMetaData secondMd)
{
@@ -488,15 +488,212 @@ namespace Microsoft.SqlServer.Server
!firstMd.IsMultiValued; // SqlMetaData doesn't have a "multivalued" option
}
// 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
internal static SmiExtendedMetaData SmiMetaDataFromType(string colName, Type colType)
// Extract metadata for a single DataColumn
internal static SmiExtendedMetaData SmiMetaDataFromDataColumn(DataColumn column, DataTable parent)
{
SqlDbType dbType = InferSqlDbTypeFromType_Katmai(column.DataType);
if (InvalidSqlDbType == dbType)
{
throw SQL.UnsupportedColumnTypeForSqlProvider(column.ColumnName, column.DataType.Name);
}
long maxLength = AdjustMaxLength(dbType, column.MaxLength);
if (InvalidMaxLength == maxLength)
{
throw SQL.InvalidColumnMaxLength(column.ColumnName, maxLength);
}
byte precision;
byte scale;
if (column.DataType == typeof(SqlDecimal))
{
// Must scan all values in column to determine best-fit precision & scale
Debug.Assert(null != parent);
scale = 0;
byte nonFractionalPrecision = 0; // finds largest non-Fractional portion of precision
foreach (DataRow row in parent.Rows)
{
object obj = row[column];
if (!(obj is DBNull))
{
SqlDecimal value = (SqlDecimal)obj;
if (!value.IsNull)
{
byte tempNonFractPrec = checked((byte)(value.Precision - value.Scale));
if (tempNonFractPrec > nonFractionalPrecision)
{
nonFractionalPrecision = tempNonFractPrec;
}
if (value.Scale > scale)
{
scale = value.Scale;
}
}
}
}
precision = checked((byte)(nonFractionalPrecision + scale));
if (SqlDecimal.MaxPrecision < precision)
{
throw SQL.InvalidTableDerivedPrecisionForTvp(column.ColumnName, precision);
}
else if (0 == precision)
{
precision = 1;
}
}
else if (dbType == SqlDbType.DateTime2 || dbType == SqlDbType.DateTimeOffset || dbType == SqlDbType.Time)
{
// Time types care about scale, too. But have to infer maximums for these.
precision = 0;
scale = SmiMetaData.DefaultTime.Scale;
}
else if (dbType == SqlDbType.Decimal)
{
// Must scan all values in column to determine best-fit precision & scale
Debug.Assert(null != parent);
scale = 0;
byte nonFractionalPrecision = 0; // finds largest non-Fractional portion of precision
foreach (DataRow row in parent.Rows)
{
object obj = row[column];
if (!(obj is DBNull))
{
SqlDecimal value = (SqlDecimal)(Decimal)obj;
byte tempNonFractPrec = checked((byte)(value.Precision - value.Scale));
if (tempNonFractPrec > nonFractionalPrecision)
{
nonFractionalPrecision = tempNonFractPrec;
}
if (value.Scale > scale)
{
scale = value.Scale;
}
}
}
precision = checked((byte)(nonFractionalPrecision + scale));
if (SqlDecimal.MaxPrecision < precision)
{
throw SQL.InvalidTableDerivedPrecisionForTvp(column.ColumnName, precision);
}
else if (0 == precision)
{
precision = 1;
}
}
else
{
precision = 0;
scale = 0;
}
// In Net Core, since DataColumn.Locale is not accessible because it is internal and in a separate assembly,
// we try to get the Locale from the parent
CultureInfo columnLocale = ((null != parent) ? parent.Locale : CultureInfo.CurrentCulture);
return new SmiExtendedMetaData(
dbType,
maxLength,
precision,
scale,
columnLocale.LCID,
SmiMetaData.DefaultNVarChar.CompareOptions,
false, // no support for multi-valued columns in a TVP yet
null, // no support for structured columns yet
null, // no support for structured columns yet
column.ColumnName,
null,
null,
null);
}
internal static long AdjustMaxLength(SqlDbType dbType, long maxLength)
{
if (SmiMetaData.UnlimitedMaxLengthIndicator != maxLength)
{
if (maxLength < 0)
{
maxLength = InvalidMaxLength;
}
switch (dbType)
{
case SqlDbType.Binary:
if (maxLength > SmiMetaData.MaxBinaryLength)
{
maxLength = InvalidMaxLength;
}
break;
case SqlDbType.Char:
if (maxLength > SmiMetaData.MaxANSICharacters)
{
maxLength = InvalidMaxLength;
}
break;
case SqlDbType.NChar:
if (maxLength > SmiMetaData.MaxUnicodeCharacters)
{
maxLength = InvalidMaxLength;
}
break;
case SqlDbType.NVarChar:
// Promote to MAX type if it won't fit in a normal type
if (SmiMetaData.MaxUnicodeCharacters < maxLength)
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
break;
case SqlDbType.VarBinary:
// Promote to MAX type if it won't fit in a normal type
if (SmiMetaData.MaxBinaryLength < maxLength)
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
break;
case SqlDbType.VarChar:
// Promote to MAX type if it won't fit in a normal type
if (SmiMetaData.MaxANSICharacters < maxLength)
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
break;
default:
break;
}
}
return maxLength;
}
// Map SmiMetaData from a schema table.
// DEVNOTE: Since we're using SchemaTable, we can assume that we aren't directly using a SqlDataReader
// so we don't support the Sql-specific stuff, like collation.
internal static SmiExtendedMetaData SmiMetaDataFromSchemaTableRow(DataRow schemaRow)
{
string colName = "";
object temp = schemaRow[SchemaTableColumn.ColumnName];
if (DBNull.Value != temp)
{
colName = (string)temp;
}
// Determine correct SqlDbType.
temp = schemaRow[SchemaTableColumn.DataType];
if (DBNull.Value == temp)
{
throw SQL.NullSchemaTableDataTypeNotSupported(colName);
}
Type colType = (Type)temp;
SqlDbType colDbType = InferSqlDbTypeFromType_Katmai(colType);
if (InvalidSqlDbType == colDbType)
{
// Unknown through standard mapping, use VarBinary for columns that are Object typed, otherwise we error out.
// Unknown through standard mapping, use VarBinary for columns that are Object typed, otherwise error
if (typeof(object) == colType)
{
colDbType = SqlDbType.VarBinary;
@@ -532,54 +729,169 @@ namespace Microsoft.SqlServer.Server
case SqlDbType.Variant:
case SqlDbType.Xml:
case SqlDbType.Date:
// These types require no metadata modifiers
// These types require no metadata modifies
break;
case SqlDbType.Binary:
case SqlDbType.VarBinary:
// source isn't specifying a size, so assume the Maximum
if (SqlDbType.Binary == colDbType)
// These types need a binary max length
temp = schemaRow[SchemaTableColumn.ColumnSize];
if (DBNull.Value == temp)
{
maxLength = SmiMetaData.MaxBinaryLength;
// source isn't specifying a size, so assume the worst
if (SqlDbType.Binary == colDbType)
{
maxLength = SmiMetaData.MaxBinaryLength;
}
else
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
}
else
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
// We (should) have a valid maxlength, so use it.
maxLength = Convert.ToInt64(temp, null);
// Max length must be 0 to MaxBinaryLength or it can be UnlimitedMAX if type is varbinary.
// If it's greater than MaxBinaryLength, just promote it to UnlimitedMAX, if possible.
if (maxLength > SmiMetaData.MaxBinaryLength)
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
if ((maxLength < 0 &&
(maxLength != SmiMetaData.UnlimitedMaxLengthIndicator ||
SqlDbType.Binary == colDbType)))
{
throw SQL.InvalidColumnMaxLength(colName, maxLength);
}
}
break;
case SqlDbType.Char:
case SqlDbType.VarChar:
// source isn't specifying a size, so assume the Maximum
if (SqlDbType.Char == colDbType)
// These types need an ANSI max length
temp = schemaRow[SchemaTableColumn.ColumnSize];
if (DBNull.Value == temp)
{
maxLength = SmiMetaData.MaxANSICharacters;
// source isn't specifying a size, so assume the worst
if (SqlDbType.Char == colDbType)
{
maxLength = SmiMetaData.MaxANSICharacters;
}
else
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
}
else
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
// We (should) have a valid maxlength, so use it.
maxLength = Convert.ToInt64(temp, null);
// Max length must be 0 to MaxANSICharacters or it can be UnlimitedMAX if type is varbinary.
// If it's greater than MaxANSICharacters, just promote it to UnlimitedMAX, if possible.
if (maxLength > SmiMetaData.MaxANSICharacters)
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
if ((maxLength < 0 &&
(maxLength != SmiMetaData.UnlimitedMaxLengthIndicator ||
SqlDbType.Char == colDbType)))
{
throw SQL.InvalidColumnMaxLength(colName, maxLength);
}
}
break;
case SqlDbType.NChar:
case SqlDbType.NVarChar:
// source isn't specifying a size, so assume the Maximum
if (SqlDbType.NChar == colDbType)
// These types need a unicode max length
temp = schemaRow[SchemaTableColumn.ColumnSize];
if (DBNull.Value == temp)
{
maxLength = SmiMetaData.MaxUnicodeCharacters;
// source isn't specifying a size, so assume the worst
if (SqlDbType.NChar == colDbType)
{
maxLength = SmiMetaData.MaxUnicodeCharacters;
}
else
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
}
else
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
// We (should) have a valid maxlength, so use it.
maxLength = Convert.ToInt64(temp, null);
// Max length must be 0 to MaxUnicodeCharacters or it can be UnlimitedMAX if type is varbinary.
// If it's greater than MaxUnicodeCharacters, just promote it to UnlimitedMAX, if possible.
if (maxLength > SmiMetaData.MaxUnicodeCharacters)
{
maxLength = SmiMetaData.UnlimitedMaxLengthIndicator;
}
if ((maxLength < 0 &&
(maxLength != SmiMetaData.UnlimitedMaxLengthIndicator ||
SqlDbType.NChar == colDbType)))
{
throw SQL.InvalidColumnMaxLength(colName, maxLength);
}
}
break;
case SqlDbType.Decimal:
// Decimal requires precision and scale
precision = SmiMetaData.DefaultDecimal.Precision;
scale = SmiMetaData.DefaultDecimal.Scale;
temp = schemaRow[SchemaTableColumn.NumericPrecision];
if (DBNull.Value == temp)
{
precision = SmiMetaData.DefaultDecimal.Precision;
}
else
{
precision = Convert.ToByte(temp, null);
}
temp = schemaRow[SchemaTableColumn.NumericScale];
if (DBNull.Value == temp)
{
scale = SmiMetaData.DefaultDecimal.Scale;
}
else
{
scale = Convert.ToByte(temp, null);
}
if (precision < SmiMetaData.MinPrecision ||
precision > SqlDecimal.MaxPrecision ||
scale < SmiMetaData.MinScale ||
scale > SqlDecimal.MaxScale ||
scale > precision)
{
throw SQL.InvalidColumnPrecScale();
}
break;
case SqlDbType.Time:
case SqlDbType.DateTime2:
case SqlDbType.DateTimeOffset:
// requires scale
scale = SmiMetaData.DefaultTime.Scale;
temp = schemaRow[SchemaTableColumn.NumericScale];
if (DBNull.Value == temp)
{
scale = SmiMetaData.DefaultTime.Scale;
}
else
{
scale = Convert.ToByte(temp, null);
}
if (scale > SmiMetaData.MaxTimeScale)
{
throw SQL.InvalidColumnPrecScale();
}
else if (scale < 0)
{
scale = SmiMetaData.DefaultTime.Scale;
}
break;
case SqlDbType.Udt:
case SqlDbType.Structured:
@@ -593,11 +905,12 @@ namespace Microsoft.SqlServer.Server
maxLength,
precision,
scale,
CultureInfo.CurrentCulture.LCID,
System.Globalization.CultureInfo.CurrentCulture.LCID,
SmiMetaData.GetDefaultForType(colDbType).CompareOptions,
null, // no support for UDTs from SchemaTable
false, // no support for multi-valued columns in a TVP yet
null, // no support for structured columns yet
null,
null, // no support for structured columns yet
colName,
null,
null,

View File

@@ -18,7 +18,7 @@ using System.Diagnostics;
namespace Microsoft.SqlServer.Server
{
public class SqlDataRecord
public class SqlDataRecord : IDataRecord
{
private SmiRecordBuffer _recordBuffer;
private SmiExtendedMetaData[] _columnSmiMetaData;
@@ -731,6 +731,11 @@ namespace Microsoft.SqlServer.Server
throw SQL.SubclassMustOverride();
}
}
public IDataReader GetData(int i)
{
throw ADP.NotSupported();
}
}
}

View File

@@ -1 +1 @@
6a9d5ba4e3cf4cdd50d3b760615576a082f26d78
02610b6a63ac39998eb7438555538320b2eb7cff

View File

@@ -109,6 +109,9 @@
<data name="ADP_InvalidEnumerationValue" xml:space="preserve">
<value>The {0} enumeration value, {1}, is invalid.</value>
</data>
<data name="ADP_NotSupportedEnumerationValue" xml:space="preserve">
<value>The {0} enumeration value, {1}, is not supported by the {2} method.</value>
</data>
<data name="ADP_InvalidOffsetValue" xml:space="preserve">
<value>Invalid parameter Offset value '{0}'. The value must be greater than or equal to 0.</value>
</data>
@@ -265,6 +268,9 @@
<data name="ADP_ParameterValueOutOfRange" xml:space="preserve">
<value>Parameter value '{0}' is out of range.</value>
</data>
<data name="ADP_BadParameterName" xml:space="preserve">
<value>Specified parameter name '{0}' is not valid.</value>
</data>
<data name="ADP_InvalidSizeValue" xml:space="preserve">
<value>Invalid parameter Size value '{0}'. The value must be greater than or equal to 0.</value>
</data>
@@ -649,12 +655,45 @@
<data name="SqlParameter_UnexpectedTypeNameForNonStruct" xml:space="preserve">
<value>TypeName specified for parameter '{0}'. TypeName must only be set for Structured parameters.</value>
</data>
<data name="NullSchemaTableDataTypeNotSupported" xml:space="preserve">
<value>DateType column for field '{0}' in schema table is null. DataType must be non-null.</value>
</data>
<data name="InvalidSchemaTableOrdinals" xml:space="preserve">
<value>Invalid column ordinals in schema table. ColumnOrdinals, if present, must not have duplicates or gaps.</value>
</data>
<data name="SQL_EnumeratedRecordMetaDataChanged" xml:space="preserve">
<value>Metadata for field '{0}' of record '{1}' did not match the original record's metadata.</value>
</data>
<data name="SQL_EnumeratedRecordFieldCountChanged" xml:space="preserve">
<value>Number of fields in record '{0}' does not match the number in the original record.</value>
</data>
<data name="SQLNotify_AlreadyHasCommand" xml:space="preserve">
<value>This SqlCommand object is already associated with another SqlDependency object.</value>
</data>
<data name="SqlDependency_DatabaseBrokerDisabled" xml:space="preserve">
<value>The SQL Server Service Broker for the current database is not enabled, and as a result query notifications are not supported. Please enable the Service Broker for this database if you wish to use notifications.</value>
</data>
<data name="SqlDependency_DefaultOptionsButNoStart" xml:space="preserve">
<value>When using SqlDependency without providing an options value, SqlDependency.Start() must be called prior to execution of a command added to the SqlDependency instance.</value>
</data>
<data name="SqlDependency_NoMatchingServerStart" xml:space="preserve">
<value>When using SqlDependency without providing an options value, SqlDependency.Start() must be called for each server that is being executed against.</value>
</data>
<data name="SqlDependency_NoMatchingServerDatabaseStart" xml:space="preserve">
<value>SqlDependency.Start has been called for the server the command is executing against more than once, but there is no matching server/user/database Start() call for current command.</value>
</data>
<data name="SqlDependency_EventNoDuplicate" xml:space="preserve">
<value>SqlDependency.OnChange does not support multiple event registrations for the same delegate.</value>
</data>
<data name="SqlDependency_IdMismatch" xml:space="preserve">
<value>No SqlDependency exists for the key.</value>
</data>
<data name="SqlDependency_InvalidTimeout" xml:space="preserve">
<value>Timeout specified is invalid. Timeout cannot be &lt; 0.</value>
</data>
<data name="SqlDependency_DuplicateStart" xml:space="preserve">
<value>SqlDependency does not support calling Start() with different connection strings having the same server, user, and database in the same app domain.</value>
</data>
<data name="SqlMetaData_InvalidSqlDbTypeForConstructorFormat" xml:space="preserve">
<value>The dbType {0} is invalid for this constructor.</value>
</data>
@@ -1033,4 +1072,67 @@
<data name="SSPIInvalidHandleType" xml:space="preserve">
<value>'{0}' is not a supported handle type.</value>
</data>
<data name="LocalDBNotSupported" xml:space="preserve">
<value>LocalDB is not supported on this Platform.</value>
</data>
<data name="PlatformNotSupported_DataSqlClient" xml:space="preserve">
<value>System.Data.SqlClient is not supported on this platform.</value>
</data>
<data name="SqlParameter_InvalidTableDerivedPrecisionForTvp" xml:space="preserve">
<value>Precision '{0}' required to send all values in column '{1}' exceeds the maximum supported precision '{2}'. The values must all fit in a single precision.</value>
</data>
<data name="SqlProvider_InvalidDataColumnMaxLength" xml:space="preserve">
<value>The size of column '{0}' is not supported. The size is {1}.</value>
</data>
<data name="MDF_InvalidXmlInvalidValue" xml:space="preserve">
<value>The metadata XML is invalid. The {1} column of the {0} collection must contain a non-empty string.</value>
</data>
<data name="MDF_CollectionNameISNotUnique" xml:space="preserve">
<value>There are multiple collections named '{0}'.</value>
</data>
<data name="MDF_InvalidXmlMissingColumn" xml:space="preserve">
<value>The metadata XML is invalid. The {0} collection must contain a {1} column and it must be a string column.</value>
</data>
<data name="MDF_InvalidXml" xml:space="preserve">
<value>The metadata XML is invalid.</value>
</data>
<data name="MDF_NoColumns" xml:space="preserve">
<value>The schema table contains no columns.</value>
</data>
<data name="MDF_QueryFailed" xml:space="preserve">
<value>Unable to build the '{0}' collection because execution of the SQL query failed. See the inner exception for details.</value>
</data>
<data name="MDF_TooManyRestrictions" xml:space="preserve">
<value>More restrictions were provided than the requested schema ('{0}') supports.</value>
</data>
<data name="MDF_DataTableDoesNotExist" xml:space="preserve">
<value>The collection '{0}' is missing from the metadata XML.</value>
</data>
<data name="MDF_UndefinedCollection" xml:space="preserve">
<value>The requested collection ({0}) is not defined.</value>
</data>
<data name="MDF_UnsupportedVersion" xml:space="preserve">
<value> requested collection ({0}) is not supported by this version of the provider.</value>
</data>
<data name="MDF_MissingRestrictionColumn" xml:space="preserve">
<value>One or more of the required columns of the restrictions collection is missing.</value>
</data>
<data name="MDF_MissingRestrictionRow" xml:space="preserve">
<value>A restriction exists for which there is no matching row in the restrictions collection.</value>
</data>
<data name="MDF_IncorrectNumberOfDataSourceInformationRows" xml:space="preserve">
<value>The DataSourceInformation table must contain exactly one row.</value>
</data>
<data name="MDF_MissingDataSourceInformationColumn" xml:space="preserve">
<value>One of the required DataSourceInformation tables columns is missing.</value>
</data>
<data name="MDF_AmbigousCollectionName" xml:space="preserve">
<value>The collection name '{0}' matches at least two collections with the same name but with different case, but does not match any of them exactly.</value>
</data>
<data name="MDF_UnableToBuildCollection" xml:space="preserve">
<value>Unable to build schema collection '{0}';</value>
</data>
<data name="AmbientTransactionsNotSupported" xml:space="preserve">
<value>Enlisting in Ambient transactions is not supported.</value>
</data>
</root>

File diff suppressed because one or more lines are too long

View File

@@ -5,16 +5,29 @@
<ProjectGuid>{D4550556-4745-457F-BA8F-3EBF3836D6B4}</ProjectGuid>
<AssemblyName>System.Data.SqlClient</AssemblyName>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<IsPartialFacadeAssembly Condition="'$(TargetGroup)' == 'net463'">true</IsPartialFacadeAssembly>
<!-- Although we have a NS configuration, we know we use API that's not currently whitelisted: just validate against OneCore -->
<UWPCompatible>false</UWPCompatible>
<IsPartialFacadeAssembly Condition="'$(TargetGroup)' == 'netfx'">true</IsPartialFacadeAssembly>
<GeneratePlatformNotSupportedAssemblyMessage Condition="'$(OSGroup)' == 'AnyOS'">SR.PlatformNotSupported_DataSqlClient</GeneratePlatformNotSupportedAssemblyMessage>
<AssemblyVersion Condition="'$(TargetGroup)' == 'netstandard1.2'">4.0.0.0</AssemblyVersion>
<AssemblyVersion Condition="'$(TargetGroup)' == 'netstandard1.3'">4.1.0.0</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Windows_NT-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Unix-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.2-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.2-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.3-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.3-Release|AnyCPU'" />
<ItemGroup Condition="'$(TargetGroup)' == 'netstandard'">
<Compile Include="System.Data.SqlClient.TypeForwards.cs" />
</ItemGroup>
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true' AND '$(OSGroup)' != 'AnyOS'">
<Compile Include="Microsoft\SqlServer\Server\ITypedGetters.cs" />
<Compile Include="Microsoft\SqlServer\Server\ITypedGettersV3.cs" />
<Compile Include="Microsoft\SqlServer\Server\ITypedSetters.cs" />
@@ -39,9 +52,14 @@
<Compile Include="System\Data\OperationAbortedException.cs" />
<Compile Include="System\Data\SqlClient\SqlDbColumn.cs" />
<Compile Include="System\Data\Common\ActivityCorrelator.cs" />
<Compile Include="System\Data\Common\AdapterUtil.cs" />
<Compile Include="$(CommonPath)\System\Data\Common\AdapterUtil.cs">
<Link>System\Data\Common\AdapterUtil.cs</Link>
</Compile>
<Compile Include="System\Data\Common\AdapterUtil.SqlClient.cs" />
<Compile Include="System\Data\Common\DbConnectionOptions.cs" />
<Compile Include="System\Data\Common\DbConnectionPoolKey.cs" />
<Compile Include="$(CommonPath)\System\Data\Common\DbConnectionPoolKey.cs">
<Link>System\Data\Common\DbConnectionPoolKey.cs</Link>
</Compile>
<Compile Include="System\Data\Common\DbConnectionStringCommon.cs" />
<Compile Include="$(CommonPath)\System\Data\Common\FieldNameLookup.cs">
<Link>System\Data\Common\FieldNameLookup.cs</Link>
@@ -49,8 +67,12 @@
<Compile Include="$(CommonPath)\System\Data\Common\BasicFieldNameLookup.cs">
<Link>System\Data\Common\BasicFieldNameLookup.cs</Link>
</Compile>
<Compile Include="System\Data\Common\MultipartIdentifier.cs" />
<Compile Include="System\Data\Common\NameValuePair.cs" />
<Compile Include="$(CommonPath)\System\Data\Common\MultipartIdentifier.cs">
<Link>System\Data\Common\MultipartIdentifier.cs</Link>
</Compile>
<Compile Include="$(CommonPath)\System\Data\Common\NameValuePair.cs">
<Link>System\Data\Common\NameValuePair.cs</Link>
</Compile>
<Compile Include="System\Data\ProviderBase\DbConnectionClosed.cs" />
<Compile Include="System\Data\ProviderBase\DbConnectionFactory.cs" />
<Compile Include="System\Data\ProviderBase\DbConnectionInternal.cs" />
@@ -60,9 +82,11 @@
<Compile Include="System\Data\ProviderBase\DbConnectionPoolIdentity.cs" />
<Compile Include="System\Data\ProviderBase\DbConnectionPoolOptions.cs" />
<Compile Include="System\Data\ProviderBase\DbConnectionPoolProviderInfo.cs" />
<Compile Include="System\Data\ProviderBase\DbMetaDataFactory.cs" />
<Compile Include="System\Data\ProviderBase\DbReferenceCollection.cs" />
<Compile Include="System\Data\ProviderBase\TimeoutTimer.cs" />
<Compile Include="System\Data\Sql\SqlMetaData.cs" />
<Compile Include="System\Data\Sql\SqlNotificationRequest.cs" />
<Compile Include="System\Data\SqlClient\ApplicationIntent.cs" />
<Compile Include="System\Data\SqlClient\LocalDBAPI.cs" />
<Compile Include="System\Data\SqlClient\ParameterPeekAheadValue.cs" />
@@ -77,6 +101,7 @@
<Compile Include="System\Data\SqlClient\SqlCachedBuffer.cs" />
<Compile Include="System\Data\SqlClient\SqlClientDiagnosticListenerExtensions.cs" />
<Compile Include="System\Data\SqlClient\SqlClientFactory.cs" />
<Compile Include="System\Data\SqlClient\SqlClientMetaDataCollectionNames.cs" />
<Compile Include="System\Data\SqlClient\SqlCommand.cs" />
<Compile Include="System\Data\SqlClient\SqlConnection.cs" />
<Compile Include="System\Data\SqlClient\SqlConnectionFactory.cs" />
@@ -87,7 +112,11 @@
<Compile Include="System\Data\SqlClient\SqlConnectionString.cs" />
<Compile Include="System\Data\SqlClient\SqlConnectionStringBuilder.cs" />
<Compile Include="System\Data\SqlClient\SqlConnectionTimeoutErrorInternal.cs" />
<Compile Include="System\Data\SqlClient\SqlDataAdapter.cs" />
<Compile Include="System\Data\SqlClient\SqlDataReader.cs" />
<Compile Include="System\Data\SqlClient\SqlDependency.cs" />
<Compile Include="System\Data\SqlClient\SqlDependencyListener.cs" />
<Compile Include="System\Data\SqlClient\SqlDependencyUtils.cs" />
<Compile Include="System\Data\SqlClient\SqlEnums.cs" />
<Compile Include="System\Data\SqlClient\SqlError.cs" />
<Compile Include="System\Data\SqlClient\SqlErrorCollection.cs" />
@@ -97,11 +126,21 @@
<Compile Include="System\Data\SqlClient\SqlInternalConnection.cs" />
<Compile Include="System\Data\SqlClient\SqlInternalConnectionTds.cs" />
<Compile Include="System\Data\SqlClient\sqlinternaltransaction.cs" />
<Compile Include="System\Data\SqlClient\SqlMetadataFactory.cs" />
<Compile Include="System\Data\SqlClient\SqlNotificationEventArgs.cs" />
<Compile Include="System\Data\SqlClient\SqlNotificationInfo.cs" />
<Compile Include="System\Data\SqlClient\SqlNotificationSource.cs" />
<Compile Include="System\Data\SqlClient\SqlNotificationType.cs" />
<Compile Include="System\Data\SqlClient\OnChangedEventHandler.cs" />
<Compile Include="System\Data\SqlClient\SqlParameter.cs" />
<Compile Include="System\Data\SqlClient\SqlParameterCollection.cs" />
<Compile Include="System\Data\SqlClient\SqlParameterCollectionHelper.cs" />
<Compile Include="System\Data\SqlClient\SqlParameterHelper.cs" />
<Compile Include="System\Data\SqlClient\SqlReferenceCollection.cs" />
<Compile Include="System\Data\SqlClient\SqlRowUpdatedEvent.cs" />
<Compile Include="System\Data\SqlClient\SqlRowUpdatedEventHandler.cs" />
<Compile Include="System\Data\SqlClient\SqlRowUpdatingEvent.cs" />
<Compile Include="System\Data\SqlClient\SqlRowUpdatingEventHandler.cs" />
<Compile Include="System\Data\SqlClient\SqlSequentialStream.cs" />
<Compile Include="System\Data\SqlClient\SqlSequentialTextReader.cs" />
<Compile Include="System\Data\SqlClient\SqlStatistics.cs" />
@@ -111,6 +150,7 @@
<Compile Include="System\Data\SqlClient\TdsEnums.cs" />
<Compile Include="System\Data\SqlClient\TdsParameterSetter.cs" />
<Compile Include="System\Data\SqlClient\TdsParser.cs" />
<Compile Include="System\Data\SqlClient\TdsParser.RegisterEncoding.cs" />
<Compile Include="System\Data\SqlClient\TdsParserHelperClasses.cs" />
<Compile Include="System\Data\SqlClient\TdsParserSessionPool.cs" />
<Compile Include="System\Data\SqlClient\TdsParserStateObject.cs" />
@@ -118,7 +158,9 @@
<Compile Include="System\Data\SqlClient\TdsRecordBufferSetter.cs" />
<Compile Include="System\Data\SqlClient\TdsValueSetter.cs" />
<Compile Include="System\Data\SqlTypes\SqlTypeWorkarounds.cs" />
<Compile Include="System\Data\SqlTypes\SQLResource.cs" />
<Compile Include="$(CommonPath)\System\Data\Common\SQLResource.cs">
<Link>System\Data\SQLTypes\SQLResource.cs</Link>
</Compile>
<Compile Include="$(CommonPath)\System\NotImplemented.cs" />
<Compile Include="$(CommonPath)\System\Threading\Tasks\TaskToApm.cs">
<Link>Common\System\Threading\Tasks\TaskToApm.cs</Link>
@@ -137,9 +179,9 @@
<Compile Include="System\Data\SqlClient\SNI\SslOverTdsStream.cs" />
<Compile Include="System\Data\SqlClient\SNI\SNICommon.cs" />
<Compile Include="System\Data\SqlClient\SNI\SspiClientContextStatus.cs" />
<Compile Include="System\Data\SqlClient\SNI\SSRP.cs" />
<Compile Include="System\Data\SqlClient\TdsParserStateObjectManaged.cs" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetsWindows)' == 'true' And '$(IsPartialFacadeAssembly)' != 'true' ">
<Compile Include="System\Data\ProviderBase\DbConnectionPoolIdentity.Windows.cs" />
<Compile Include="Interop\SNINativeMethodWrapper.Windows.cs" />
@@ -148,8 +190,20 @@
<Compile Include="System\Data\SqlClient\TdsParserStateObjectFactory.Windows.cs" />
<Compile Include="System\Data\SqlClient\TdsParser.Windows.cs" />
<Compile Include="System\Data\SqlClient\LocalDBAPI.Windows.cs" />
<Compile Include="System\Data\SqlClient\SNI\LocalDB.Windows.cs" />
<Compile Include="$(CommonPath)\Interop\Windows\kernel32\Interop.LoadLibraryEx.cs">
<Link>Common\Interop\Windows\kernel32\Interop.LoadLibraryEx.cs</Link>
</Compile>
<Compile Include="$(CommonPath)\Interop\Windows\kernel32\Interop.FreeLibrary.cs">
<Link>Common\Interop\Windows\kernel32\Interop.FreeLibrary.cs</Link>
</Compile>
<Compile Include="$(CommonPath)\Interop\Windows\kernel32\Interop.GetProcAddress.cs">
<Link>Common\Interop\Windows\kernel32\Interop.GetProcAddress.cs</Link>
</Compile>
<Compile Include="$(CommonPath)\Microsoft\Win32\SafeHandles\SafeLibraryHandle.cs">
<Link>Common\Microsoft\Win32\SafeHandles\SafeLibraryHandle.cs</Link>
</Compile>
</ItemGroup>
<!-- Windows dependencies for Integrated Authentication for MANAGED_SNI build -->
<ItemGroup Condition=" '$(TargetsWindows)' == 'true' And '$(IsPartialFacadeAssembly)' != 'true' ">
<Compile Include="$(CommonPath)\System\Net\Security\NegotiateStreamPal.Windows.cs">
@@ -244,7 +298,7 @@
</Compile>
</ItemGroup>
<!-- Common (Windows and Unix) dependencies for MANAGED_SNI build -->
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true'">
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true' AND '$(OSGroup)' != 'AnyOS'">
<Compile Include="$(CommonPath)\System\Net\ContextFlagsPal.cs">
<Link>Common\System\Net\ContextFlagsPal.cs</Link>
</Compile>
@@ -276,8 +330,7 @@
<Link>Common\System\Net\NegotiationInfoClass.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup Condition=" '$(TargetsWindows)' != 'true' And '$(IsPartialFacadeAssembly)' != 'true' ">
<ItemGroup Condition=" '$(TargetsWindows)' != 'true' And '$(IsPartialFacadeAssembly)' != 'true' AND '$(OSGroup)' != 'AnyOS'">
<Compile Include="System\Data\ProviderBase\DbConnectionPoolIdentity.Unix.cs" />
<Compile Include="Interop\SNINativeMethodWrapper.Unix.cs" />
<Compile Include="$(CommonPath)\System\Net\Security\NegotiateStreamPal.Unix.cs">
@@ -316,23 +369,30 @@
<Compile Include="System\Data\SqlClient\TdsParserStateObjectFactory.Unix.cs" />
<Compile Include="System\Data\SqlClient\TdsParser.Unix.cs" />
<Compile Include="System\Data\SqlClient\LocalDBAPI.Unix.cs" />
<Compile Include="System\Data\SqlClient\SNI\LocalDB.Unix.cs" />
</ItemGroup>
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' == 'true'">
<Reference Include="mscorlib" />
<Reference Include="System.Data" />
<ItemGroup Condition="'$(TargetsWindows)' == 'true' And '$(IsPartialFacadeAssembly)' != 'true' ">
<Reference Include="Microsoft.Win32.Registry" />
</ItemGroup>
<ItemGroup>
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true'">
<Reference Condition="'$(TargetGroup)' != 'netstandard'" Include="System.Data.Common" />
<Reference Include="System.Globalization" />
<Reference Include="System.IO" />
<Reference Include="System.Resources.ResourceManager" />
<Reference Include="System.Runtime" />
<Reference Include="System.Threading.Tasks" />
<Reference Include="System.Xml.ReaderWriter" />
</ItemGroup>
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true' AND '$(OSGroup)' != 'AnyOS'">
<Reference Include="Microsoft.Win32.Primitives" />
<Reference Include="System.Collections" />
<Reference Include="System.Collections.Concurrent" />
<Reference Include="System.ComponentModel.Primitives" />
<Reference Include="System.Data.Common" />
<Reference Include="System.ComponentModel.TypeConverter" />
<Reference Include="System.Diagnostics.Debug" />
<Reference Include="System.Diagnostics.DiagnosticSource" />
<Reference Include="System.Diagnostics.Tools" />
<Reference Include="System.Linq" />
<Reference Include="System.Resources.ResourceManager" />
<Reference Include="System.Runtime" />
<Reference Include="System.Runtime.Extensions" />
<Reference Include="System.Runtime.InteropServices" />
<Reference Include="System.Runtime.InteropServices.RuntimeInformation" />
@@ -343,11 +403,9 @@
<Reference Include="System.Text.Encoding.Extensions" />
<Reference Include="System.Text.RegularExpressions" />
<Reference Include="System.Threading" />
<Reference Include="System.Threading.Tasks" />
<Reference Include="System.Threading.Thread" />
<Reference Include="System.Threading.ThreadPool" />
<Reference Include="System.Threading.Timer" />
<Reference Include="System.Xml.ReaderWriter" />
<Reference Include="System.IO.Pipes" />
<Reference Include="System.Security.Cryptography.X509Certificates" />
<Reference Include="System.Net.Sockets" />
@@ -356,6 +414,15 @@
<Reference Include="System.Net.NameResolution" />
<Reference Include="System.Diagnostics.Tracing" />
</ItemGroup>
<ItemGroup Condition="'$(TargetGroup)' == 'netfx'">
<Reference Include="mscorlib" />
<Reference Include="System.Data" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\System.Data.SqlClient.SqlMetaData.xml">
<LogicalName>System.Data.SqlClient.SqlMetaData.xml</LogicalName>
</EmbeddedResource>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
<Import Project=".\GenerateThisAssemblyCs.targets" Condition="'$(IsPartialFacadeAssembly)' != 'true'" />
</Project>

View File

@@ -1,60 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//------------------------------------------------------------------------------
using System.Diagnostics;
namespace System.Data.Common
{
// DbConnectionPoolKey: Base class implementation of a key to connection pool groups
// Only connection string is used as a key
internal class DbConnectionPoolKey
{
private string _connectionString;
internal DbConnectionPoolKey(string connectionString)
{
_connectionString = connectionString;
}
protected DbConnectionPoolKey(DbConnectionPoolKey key)
{
_connectionString = key.ConnectionString;
}
internal virtual DbConnectionPoolKey Clone()
{
return new DbConnectionPoolKey(this);
}
internal virtual string ConnectionString
{
get
{
return _connectionString;
}
set
{
_connectionString = value;
}
}
public override bool Equals(object obj)
{
DbConnectionPoolKey key = obj as DbConnectionPoolKey;
Debug.Assert(obj.GetType() == typeof(DbConnectionPoolKey), "Derived classes should not be using DbConnectionPoolKey.Equals");
return (key != null && _connectionString == key._connectionString);
}
public override int GetHashCode()
{
return _connectionString == null ? 0 : _connectionString.GetHashCode();
}
}
}

View File

@@ -238,6 +238,7 @@ namespace System.Data.Common
internal const string CurrentLanguage = "";
internal const string DataSource = "";
internal const bool Encrypt = false;
internal const bool Enlist = true;
internal const string FailoverPartner = "";
internal const string InitialCatalog = "";
internal const bool IntegratedSecurity = false;
@@ -297,6 +298,7 @@ namespace System.Data.Common
internal const string DataSource = "Data Source";
internal const string IntegratedSecurity = "Integrated Security";
internal const string Password = "Password";
internal const string Driver = "Driver";
internal const string PersistSecurityInfo = "Persist Security Info";
internal const string UserID = "User ID";

View File

@@ -1,295 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//------------------------------------------------------------------------------
using System.Text;
namespace System.Data.Common
{
internal class MultipartIdentifier
{
private const int MaxParts = 4;
internal const int ServerIndex = 0;
internal const int CatalogIndex = 1;
internal const int SchemaIndex = 2;
internal const int TableIndex = 3;
/*
Left quote strings need to correspond 1 to 1 with the right quote strings
example: "ab" "cd", passed in for the left and the right quote
would set a or b as a starting quote character.
If a is the starting quote char then c would be the ending quote char
otherwise if b is the starting quote char then d would be the ending quote character.
*/
internal static string[] ParseMultipartIdentifier(string name, string leftQuote, string rightQuote, string property, bool ThrowOnEmptyMultipartName)
{
return ParseMultipartIdentifier(name, leftQuote, rightQuote, '.', MaxParts, true, property, ThrowOnEmptyMultipartName);
}
private enum MPIState
{
MPI_Value,
MPI_ParseNonQuote,
MPI_LookForSeparator,
MPI_LookForNextCharOrSeparator,
MPI_ParseQuote,
MPI_RightQuote,
}
/* Core function for parsing the multipart identifier string.
* parameters: name - string to parse
* leftquote: set of characters which are valid quoting characters to initiate a quote
* rightquote: set of characters which are valid to stop a quote, array index's correspond to the leftquote array.
* separator: separator to use
* limit: number of names to parse out
* removequote:to remove the quotes on the returned string
*/
private static void IncrementStringCount(string name, string[] ary, ref int position, string property)
{
++position;
int limit = ary.Length;
if (position >= limit)
{
throw ADP.InvalidMultipartNameToManyParts(property, name, limit);
}
ary[position] = string.Empty;
}
private static bool IsWhitespace(char ch)
{
return Char.IsWhiteSpace(ch);
}
internal static string[] ParseMultipartIdentifier(string name, string leftQuote, string rightQuote, char separator, int limit, bool removequotes, string property, bool ThrowOnEmptyMultipartName)
{
if (limit <= 0)
{
throw ADP.InvalidMultipartNameToManyParts(property, name, limit);
}
if (-1 != leftQuote.IndexOf(separator) || -1 != rightQuote.IndexOf(separator) || leftQuote.Length != rightQuote.Length)
{
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
string[] parsedNames = new string[limit]; // return string array
int stringCount = 0; // index of current string in the buffer
MPIState state = MPIState.MPI_Value; // Initialize the starting state
StringBuilder sb = new StringBuilder(name.Length); // String buffer to hold the string being currently built, init the string builder so it will never be resized
StringBuilder whitespaceSB = null; // String buffer to hold whitespace used when parsing nonquoted strings 'a b . c d' = 'a b' and 'c d'
char rightQuoteChar = ' '; // Right quote character to use given the left quote character found.
for (int index = 0; index < name.Length; ++index)
{
char testchar = name[index];
switch (state)
{
case MPIState.MPI_Value:
{
int quoteIndex;
if (IsWhitespace(testchar))
{ // Is White Space then skip the whitespace
continue;
}
else
if (testchar == separator)
{ // If we found a separator, no string was found, initialize the string we are parsing to Empty and the next one to Empty.
// This is NOT a redundant setting of string.Empty it solves the case where we are parsing ".foo" and we should be returning null, null, empty, foo
parsedNames[stringCount] = string.Empty;
IncrementStringCount(name, parsedNames, ref stringCount, property);
}
else
if (-1 != (quoteIndex = leftQuote.IndexOf(testchar)))
{ // If we are a left quote
rightQuoteChar = rightQuote[quoteIndex]; // record the corresponding right quote for the left quote
sb.Length = 0;
if (!removequotes)
{
sb.Append(testchar);
}
state = MPIState.MPI_ParseQuote;
}
else
if (-1 != rightQuote.IndexOf(testchar))
{ // If we shouldn't see a right quote
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
else
{
sb.Length = 0;
sb.Append(testchar);
state = MPIState.MPI_ParseNonQuote;
}
break;
}
case MPIState.MPI_ParseNonQuote:
{
if (testchar == separator)
{
parsedNames[stringCount] = sb.ToString(); // set the currently parsed string
IncrementStringCount(name, parsedNames, ref stringCount, property);
state = MPIState.MPI_Value;
}
else // Quotes are not valid inside a non-quoted name
if (-1 != rightQuote.IndexOf(testchar))
{
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
else
if (-1 != leftQuote.IndexOf(testchar))
{
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
else
if (IsWhitespace(testchar))
{ // If it is Whitespace
parsedNames[stringCount] = sb.ToString(); // Set the currently parsed string
if (null == whitespaceSB)
{
whitespaceSB = new StringBuilder();
}
whitespaceSB.Length = 0;
whitespaceSB.Append(testchar); // start to record the whitespace, if we are parsing a name like "foo bar" we should return "foo bar"
state = MPIState.MPI_LookForNextCharOrSeparator;
}
else
{
sb.Append(testchar);
}
break;
}
case MPIState.MPI_LookForNextCharOrSeparator:
{
if (!IsWhitespace(testchar))
{ // If it is not whitespace
if (testchar == separator)
{
IncrementStringCount(name, parsedNames, ref stringCount, property);
state = MPIState.MPI_Value;
}
else
{ // If its not a separator and not whitespace
sb.Append(whitespaceSB);
sb.Append(testchar);
parsedNames[stringCount] = sb.ToString(); // Need to set the name here in case the string ends here.
state = MPIState.MPI_ParseNonQuote;
}
}
else
{
whitespaceSB.Append(testchar);
}
break;
}
case MPIState.MPI_ParseQuote:
{
if (testchar == rightQuoteChar)
{ // if se are on a right quote see if we are escaping the right quote or ending the quoted string
if (!removequotes)
{
sb.Append(testchar);
}
state = MPIState.MPI_RightQuote;
}
else
{
sb.Append(testchar); // Append what we are currently parsing
}
break;
}
case MPIState.MPI_RightQuote:
{
if (testchar == rightQuoteChar)
{ // If the next char is a another right quote then we were escaping the right quote
sb.Append(testchar);
state = MPIState.MPI_ParseQuote;
}
else
if (testchar == separator)
{ // If its a separator then record what we've parsed
parsedNames[stringCount] = sb.ToString();
IncrementStringCount(name, parsedNames, ref stringCount, property);
state = MPIState.MPI_Value;
}
else
if (!IsWhitespace(testchar))
{ // If it is not whitespace we got problems
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
else
{ // It is a whitespace character so the following char should be whitespace, separator, or end of string anything else is bad
parsedNames[stringCount] = sb.ToString();
state = MPIState.MPI_LookForSeparator;
}
break;
}
case MPIState.MPI_LookForSeparator:
{
if (!IsWhitespace(testchar))
{ // If it is not whitespace
if (testchar == separator)
{ // If it is a separator
IncrementStringCount(name, parsedNames, ref stringCount, property);
state = MPIState.MPI_Value;
}
else
{ // Otherwise not a separator
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
}
break;
}
}
}
// Resolve final states after parsing the string
switch (state)
{
case MPIState.MPI_Value: // These states require no extra action
case MPIState.MPI_LookForSeparator:
case MPIState.MPI_LookForNextCharOrSeparator:
break;
case MPIState.MPI_ParseNonQuote: // Dump what ever was parsed
case MPIState.MPI_RightQuote:
parsedNames[stringCount] = sb.ToString();
break;
case MPIState.MPI_ParseQuote: // Invalid Ending States
default:
throw ADP.InvalidMultipartNameIncorrectUsageOfQuotes(property, name);
}
if (parsedNames[0] == null)
{
if (ThrowOnEmptyMultipartName)
{
throw ADP.InvalidMultipartName(property, name); // Name is entirely made up of whitespace
}
}
else
{
// Shuffle the parsed name, from left justification to right justification, i.e. [a][b][null][null] goes to [null][null][a][b]
int offset = limit - stringCount - 1;
if (offset > 0)
{
for (int x = limit - 1; x >= offset; --x)
{
parsedNames[x] = parsedNames[x - offset];
parsedNames[x - offset] = null;
}
}
}
return parsedNames;
}
}
}

View File

@@ -1,71 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//------------------------------------------------------------------------------
using System.Diagnostics;
namespace System.Data.Common
{
sealed internal class NameValuePair
{
readonly private string _name;
readonly private string _value;
readonly private int _length;
private NameValuePair _next;
internal NameValuePair(string name, string value, int length)
{
System.Diagnostics.Debug.Assert(!string.IsNullOrEmpty(name), "empty keyname");
_name = name;
_value = value;
_length = length;
}
internal int Length
{
get
{
// this property won't exist when deserialized from Everett to Whidbey
// it shouldn't matter for DbConnectionString/DbDataPermission
// which should only use Length during construction
// not deserialization or post-ctor runtime
Debug.Assert(0 < _length, "NameValuePair zero Length usage");
return _length;
}
}
internal string Name
{
get
{
return _name;
}
}
internal NameValuePair Next
{
get
{
return _next;
}
set
{
if ((null != _next) || (null == value))
{
throw ADP.InternalError(ADP.InternalErrorCode.NameValuePairNext);
}
_next = value;
}
}
internal string Value
{
get
{
return _value;
}
}
}
}

View File

@@ -1,11 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//------------------------------------------------------------------------------
using System.Runtime.Serialization;
namespace System.Data
@@ -18,10 +13,6 @@ namespace System.Data
HResult = unchecked((int)0x80131936);
}
private OperationAbortedException(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
internal static OperationAbortedException Aborted(Exception inner)
{
OperationAbortedException e;

Some files were not shown because too many files have changed in this diff Show More