mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
Merge pull request #22 from Microsoft/feature/queryExecuteServerMessages
Bug fix: Messages not returned on SELECT queries
This commit is contained in:
@@ -21,6 +21,8 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
/// </summary>
|
||||
public class Query : IDisposable
|
||||
{
|
||||
private const string RowsAffectedFormat = "({0} row(s) affected)";
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
@@ -114,13 +116,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
throw new InvalidOperationException("Query has already executed.");
|
||||
}
|
||||
|
||||
DbConnection conn = null;
|
||||
|
||||
// Create a connection from the connection details
|
||||
try
|
||||
{
|
||||
string connectionString = ConnectionService.BuildConnectionString(EditorConnection.ConnectionDetails);
|
||||
using (conn = EditorConnection.Factory.CreateSqlConnection(connectionString))
|
||||
using (DbConnection conn = EditorConnection.Factory.CreateSqlConnection(connectionString))
|
||||
{
|
||||
// If we have the message listener, bind to it
|
||||
SqlConnection sqlConn = conn as SqlConnection;
|
||||
@@ -142,14 +142,14 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
{
|
||||
do
|
||||
{
|
||||
// Create a message with the number of affected rows
|
||||
if (reader.RecordsAffected >= 0)
|
||||
{
|
||||
ResultMessages.Add(String.Format("({0} row(s) affected)", reader.RecordsAffected));
|
||||
}
|
||||
|
||||
// Skip this result set if there aren't any rows
|
||||
if (!reader.HasRows && reader.FieldCount == 0)
|
||||
{
|
||||
// Create a message with the number of affected rows -- IF the query affects rows
|
||||
ResultMessages.Add(reader.RecordsAffected >= 0
|
||||
? string.Format(RowsAffectedFormat, reader.RecordsAffected)
|
||||
: "Command Executed Successfully");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -168,6 +168,10 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
|
||||
// Add the result set to the results of the query
|
||||
ResultSets.Add(resultSet);
|
||||
|
||||
// Add a message for the number of rows the query returned
|
||||
ResultMessages.Add(string.Format(RowsAffectedFormat, resultSet.Rows.Count));
|
||||
|
||||
} while (await reader.NextResultAsync(cancellationSource.Token));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlClient;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.SqlTools.ServiceLayer.Connection;
|
||||
using Microsoft.SqlTools.ServiceLayer.Connection.Contracts;
|
||||
@@ -106,7 +105,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.QueryExecution
|
||||
ServerName = "sqltools11"
|
||||
};
|
||||
|
||||
return new ConnectionInfo(CreateMockFactory(data, throwOnRead), "test://test", connDetails);
|
||||
return new ConnectionInfo(CreateMockFactory(data, throwOnRead), OwnerUri, connDetails);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -365,6 +365,9 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.QueryExecution
|
||||
VerifyQueryExecuteCallCount(requestContext, Times.Once(), Times.Never(), Times.Never());
|
||||
Assert.NotNull(result.Messages);
|
||||
Assert.NotEmpty(result.Messages);
|
||||
|
||||
// ... There should not be an active query
|
||||
Assert.Empty(queryService.ActiveQueries);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -91,6 +91,12 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Utility
|
||||
|
||||
public override int FieldCount { get { return Rows?.Current.Count ?? 0; } }
|
||||
|
||||
public override int RecordsAffected
|
||||
{
|
||||
// Mimics the behavior of SqlDataReader
|
||||
get { return Rows != null ? -1 : 1; }
|
||||
}
|
||||
|
||||
#region Not Implemented
|
||||
|
||||
public override bool GetBoolean(int ordinal)
|
||||
@@ -200,7 +206,6 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Utility
|
||||
|
||||
public override int Depth { get; }
|
||||
public override bool IsClosed { get; }
|
||||
public override int RecordsAffected { get; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user