From fa01093cd79eba651a29b5ebddfa3a06e18421f8 Mon Sep 17 00:00:00 2001
From: Edward Neal <55035479+edwardneal@users.noreply.github.com>
Date: Sat, 9 Nov 2024 22:35:19 +0000
Subject: [PATCH 1/3] Remove SqlCommand code paths for context connections.
---
.../netfx/src/Microsoft.Data.SqlClient.csproj | 5 -
.../Microsoft/Data/SqlClient/SqlBulkCopy.cs | 11 +-
.../SqlClient/SqlClientWrapperSmiStream.cs | 110 --
.../SqlClientWrapperSmiStreamChars.cs | 147 --
.../Microsoft/Data/SqlClient/SqlCommand.cs | 390 +----
.../Data/SqlClient/SqlDataReaderSmi.cs | 1341 -----------------
.../Data/SqlClient/SqlSequentialStreamSmi.cs | 125 --
.../SqlClient/SqlSequentialTextReaderSmi.cs | 137 --
.../Data/SqlClient/Server/SqlDataRecord.cs | 15 +-
.../Data/SqlClient/Server/ValueUtilsSmi.cs | 37 +-
.../SqlClient/Server/ValueUtilsSmi.netfx.cs | 59 -
.../src/Microsoft/Data/SqlClient/SqlUtil.cs | 4 -
12 files changed, 7 insertions(+), 2374 deletions(-)
delete mode 100644 src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStream.cs
delete mode 100644 src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStreamChars.cs
delete mode 100644 src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlDataReaderSmi.cs
delete mode 100644 src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlSequentialStreamSmi.cs
delete mode 100644 src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlSequentialTextReaderSmi.cs
diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj
index 03c91720c1..9dfa970d4a 100644
--- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj
+++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj
@@ -775,19 +775,14 @@
-
-
-
-
-
diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlBulkCopy.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlBulkCopy.cs
index ac9e1a79c7..8b2f5e2fb7 100644
--- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlBulkCopy.cs
+++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlBulkCopy.cs
@@ -193,7 +193,6 @@ public SourceColumnMetadata(ValueMethod method, bool isSqlType, bool isDataFeed)
private object _rowSource;
private SqlDataReader _sqlDataReaderRowSource;
- private bool _rowSourceIsSqlDataReaderSmi;
private DbDataReader _dbDataReaderRowSource;
private DataTable _dataTableSource;
@@ -1258,7 +1257,7 @@ private SourceColumnMetadata GetColumnMetadata(int ordinal)
}
}
// Check for data streams
- else if ((_enableStreaming) && ((metadata.length == MAX_LENGTH) || metadata.metaType.SqlDbType == SqlDbTypeExtensions.Json) && (!_rowSourceIsSqlDataReaderSmi))
+ else if ((_enableStreaming) && ((metadata.length == MAX_LENGTH) || metadata.metaType.SqlDbType == SqlDbTypeExtensions.Json))
{
isSqlType = false;
@@ -1702,10 +1701,6 @@ public void WriteToServer(DbDataReader reader)
_dbDataReaderRowSource = reader;
_sqlDataReaderRowSource = reader as SqlDataReader;
- if (_sqlDataReaderRowSource != null)
- {
- _rowSourceIsSqlDataReaderSmi = _sqlDataReaderRowSource is SqlDataReaderSmi;
- }
_rowSourceType = ValueSourceType.DbDataReader;
WriteRowSourceToServerAsync(reader.FieldCount, CancellationToken.None); //It returns null since _isAsyncBulkCopy = false;
@@ -1738,10 +1733,6 @@ public void WriteToServer(IDataReader reader)
ResetWriteToServerGlobalVariables();
_rowSource = reader;
_sqlDataReaderRowSource = _rowSource as SqlDataReader;
- if (_sqlDataReaderRowSource != null)
- {
- _rowSourceIsSqlDataReaderSmi = _sqlDataReaderRowSource is SqlDataReaderSmi;
- }
_dbDataReaderRowSource = _rowSource as DbDataReader;
_rowSourceType = ValueSourceType.IDataReader;
WriteRowSourceToServerAsync(reader.FieldCount, CancellationToken.None); //It returns null since _isAsyncBulkCopy = false;
diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStream.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStream.cs
deleted file mode 100644
index a728b608ed..0000000000
--- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStream.cs
+++ /dev/null
@@ -1,110 +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;
-using System.IO;
-
-namespace Microsoft.Data.SqlClient.Server
-{
- // Simple wrapper over SmiStream that handles server events on the SqlClient side of Smi
- internal class SqlClientWrapperSmiStream : Stream
- {
-
- private SmiEventSink_Default _sink;
- private SmiStream _stream;
-
- internal SqlClientWrapperSmiStream(SmiEventSink_Default sink, SmiStream stream)
- {
- Debug.Assert(sink != null);
- Debug.Assert(stream != null);
- _sink = sink;
- _stream = stream;
- }
-
- public override bool CanRead
- {
- get
- {
- return _stream.CanRead;
- }
- }
-
- // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
- public override bool CanSeek
- {
- get
- {
- return _stream.CanSeek;
- }
- }
-
- public override bool CanWrite
- {
- get
- {
- return _stream.CanWrite;
- }
- }
-
- public override long Length
- {
- get
- {
- long length = _stream.GetLength(_sink);
- _sink.ProcessMessagesAndThrow();
- return length;
- }
- }
-
- public override long Position
- {
- get
- {
- long position = _stream.GetPosition(_sink);
- _sink.ProcessMessagesAndThrow();
- return position;
- }
- set
- {
- _stream.SetPosition(_sink, value);
- _sink.ProcessMessagesAndThrow();
- }
- }
-
- public override void Flush()
- {
- _stream.Flush(_sink);
- _sink.ProcessMessagesAndThrow();
- }
-
- public override long Seek(long offset, SeekOrigin origin)
- {
- long result = _stream.Seek(_sink, offset, origin);
- _sink.ProcessMessagesAndThrow();
- return result;
- }
-
- public override void SetLength(long value)
- {
- _stream.SetLength(_sink, value);
- _sink.ProcessMessagesAndThrow();
- }
-
- public override int Read(byte[] buffer, int offset, int count)
- {
- int bytesRead = _stream.Read(_sink, buffer, offset, count);
- _sink.ProcessMessagesAndThrow();
- return bytesRead;
- }
-
- public override void Write(byte[] buffer, int offset, int count)
- {
- _stream.Write(_sink, buffer, offset, count);
- _sink.ProcessMessagesAndThrow();
- }
- }
-
-}
-
-
diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStreamChars.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStreamChars.cs
deleted file mode 100644
index 99eeb4d91c..0000000000
--- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientWrapperSmiStreamChars.cs
+++ /dev/null
@@ -1,147 +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;
-using System.IO;
-using Microsoft.Data.Common;
-using Microsoft.Data.SqlTypes;
-
-namespace Microsoft.Data.SqlClient.Server
-{
- // Simple SqlStreamChars wrapper over SmiStream that handles server events on the
- // SqlClient side of Smi
- internal class SqlClientWrapperSmiStreamChars : SqlStreamChars
- {
-
- private SmiEventSink_Default _sink;
- private SmiStream _stream;
-
- internal SqlClientWrapperSmiStreamChars(SmiEventSink_Default sink, SmiStream stream)
- {
- Debug.Assert(sink != null);
- Debug.Assert(stream != null);
- _sink = sink;
- _stream = stream;
- }
-
- public override bool IsNull
- {
- get
- {
- return _stream == null;
- }
- }
-
- public override bool CanRead
- {
- get
- {
- return _stream.CanRead;
- }
- }
-
- // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
- public override bool CanSeek
- {
- get
- {
- return _stream.CanSeek;
- }
- }
-
- public override bool CanWrite
- {
- get
- {
- return _stream.CanWrite;
- }
- }
-
- public override long Length
- {
- get
- {
- long length = _stream.GetLength(_sink);
- _sink.ProcessMessagesAndThrow();
- if (length > 0)
- return length / sizeof(char);
- else
- return length;
- }
- }
-
- public override long Position
- {
- get
- {
- long position = _stream.GetPosition(_sink) / sizeof(char);
- _sink.ProcessMessagesAndThrow();
- return position;
- }
- set
- {
- if (value < 0)
- {
- throw ADP.ArgumentOutOfRange("Position");
- }
- _stream.SetPosition(_sink, value * sizeof(char));
- _sink.ProcessMessagesAndThrow();
- }
- }
-
- public override void Flush()
- {
- _stream.Flush(_sink);
- _sink.ProcessMessagesAndThrow();
- }
-
- public override long Seek(long offset, SeekOrigin origin)
- {
- long result = _stream.Seek(_sink, offset * sizeof(char), origin);
- _sink.ProcessMessagesAndThrow();
- return result;
- }
-
- public override void SetLength(long value)
- {
- if (value < 0)
- {
- throw ADP.ArgumentOutOfRange("value");
- }
- _stream.SetLength(_sink, value * sizeof(char));
- _sink.ProcessMessagesAndThrow();
- }
-
- public override int Read(char[] buffer, int offset, int count)
- {
- int bytesRead = _stream.Read(_sink, buffer, offset * sizeof(char), count);
- _sink.ProcessMessagesAndThrow();
- return bytesRead;
- }
-
- public override void Write(char[] buffer, int offset, int count)
- {
- _stream.Write(_sink, buffer, offset, count);
- _sink.ProcessMessagesAndThrow();
- }
-
- // Convenience methods to allow simple pulling/pushing of raw bytes
- internal int Read(byte[] buffer, int offset, int count)
- {
- int bytesRead = _stream.Read(_sink, buffer, offset, count);
- _sink.ProcessMessagesAndThrow();
- return bytesRead;
- }
-
- internal void Write(byte[] buffer, int offset, int count)
- {
- _stream.Write(_sink, buffer, offset, count);
- _sink.ProcessMessagesAndThrow();
- }
- }
-
-}
-
-
-
diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlCommand.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlCommand.cs
index f39f91fcd4..e5d781a9aa 100644
--- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlCommand.cs
+++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlCommand.cs
@@ -1559,32 +1559,6 @@ public override int ExecuteNonQuery()
}
}
- // Handles in-proc execute-to-pipe functionality
- // Identical to ExecuteNonQuery
- internal void ExecuteToPipe(SmiContext pipeContext)
- {
- SqlConnection.ExecutePermission.Demand();
-
- // Reset _pendingCancel upon entry into any Execute - used to synchronize state
- // between entry into Execute* API and the thread obtaining the stateObject.
- _pendingCancel = false;
-
- SqlStatistics statistics = null;
-
- using (TryEventScope.Create(" {0}", ObjectID))
- {
- try
- {
- statistics = SqlStatistics.StartTimer(Statistics);
- InternalExecuteNonQuery(null, nameof(ExecuteNonQuery), true, CommandTimeout, out _);
- }
- finally
- {
- SqlStatistics.StopTimer(statistics);
- }
- }
- }
-
///
[System.Security.Permissions.HostProtectionAttribute(ExternalThreading = true)]
public IAsyncResult BeginExecuteNonQuery()
@@ -2067,20 +2041,9 @@ private Task InternalExecuteNonQuery(TaskCompletionSource