Merge pull request #22 from Microsoft/feature/queryExecuteServerMessages

Bug fix: Messages not returned on SELECT queries
This commit is contained in:
Benjamin Russell
2016-08-19 15:23:00 -07:00
committed by GitHub
4 changed files with 23 additions and 12 deletions

View File

@@ -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));
}
}

View File

@@ -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

View File

@@ -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]

View File

@@ -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
}