// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using System; using System.Data; using Microsoft.Data.SqlClient; using Microsoft.SqlTools.Hosting.Utility; namespace Microsoft.SqlTools.CoreServices.Connection.ReliableConnection { /// /// Wraps objects that could be a or /// a , providing common methods across both. /// internal sealed class DbCommandWrapper { private readonly IDbCommand _command; private readonly bool _isReliableCommand; public DbCommandWrapper(IDbCommand command) { Validate.IsNotNull(nameof(command), command); if (command is ReliableSqlConnection.ReliableSqlCommand) { _isReliableCommand = true; } else if (!(command is SqlCommand)) { throw new InvalidOperationException(Resources.InvalidCommandType); } _command = command; } public static bool IsSupportedCommand(IDbCommand command) { return command is ReliableSqlConnection.ReliableSqlCommand || command is SqlCommand; } public event StatementCompletedEventHandler StatementCompleted { add { SqlCommand sqlCommand = GetAsSqlCommand(); sqlCommand.StatementCompleted += value; } remove { SqlCommand sqlCommand = GetAsSqlCommand(); sqlCommand.StatementCompleted -= value; } } /// /// Gets this as a SqlCommand by casting (if we know it is actually a SqlCommand) /// or by getting the underlying command (if it's a ReliableSqlCommand) /// private SqlCommand GetAsSqlCommand() { if (_isReliableCommand) { return ((ReliableSqlConnection.ReliableSqlCommand) _command).GetUnderlyingCommand(); } return (SqlCommand) _command; } } }