diff --git a/src/Microsoft.SqlTools.ServiceLayer/EditData/EditDataService.cs b/src/Microsoft.SqlTools.ServiceLayer/EditData/EditDataService.cs
index 26f163a3..ec4f78a0 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/EditData/EditDataService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/EditData/EditDataService.cs
@@ -303,7 +303,7 @@ namespace Microsoft.SqlTools.ServiceLayer.EditData
};
// Setup callback for failed query execution
- Query.QueryAsyncEventHandler queryCompleteFailureCallback = q =>
+ Query.QueryAsyncErrorEventHandler queryCompleteFailureCallback = (q, e) =>
{
taskCompletion.SetResult(new EditSession.EditSessionQueryExecutionState(null));
return Task.FromResult(0);
diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs
index e7cd81eb..a03e4909 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/Query.cs
@@ -158,7 +158,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
/// Delegate type for callback when a query connection fails
///
/// Error message for the failing query
- public delegate Task QueryAsyncErrorEventHandler(string message);
+ public delegate Task QueryAsyncErrorEventHandler(Query q, Exception e);
///
/// Callback for when the query has completed successfully
@@ -168,7 +168,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
///
/// Callback for when the query has failed
///
- public event QueryAsyncEventHandler QueryFailed;
+ public event QueryAsyncErrorEventHandler QueryFailed;
///
/// Event to be called when a resultset has completed.
@@ -395,12 +395,12 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
await QueryCompleted(this);
}
}
- catch (Exception)
+ catch (Exception e)
{
// Call the query failure callback
if (QueryFailed != null)
{
- await QueryFailed(this);
+ await QueryFailed(this, e);
}
}
finally
diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs
index 9ad9dd79..46b4eb46 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/QueryExecution/QueryExecutionService.cs
@@ -346,7 +346,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
Func> queryCreateSuccessFunc,
Func queryCreateFailFunc,
Query.QueryAsyncEventHandler querySuccessFunc,
- Query.QueryAsyncEventHandler queryFailureFunc)
+ Query.QueryAsyncErrorEventHandler queryFailureFunc)
{
Validate.IsNotNull(nameof(executeParams), executeParams);
Validate.IsNotNull(nameof(queryEventSender), queryEventSender);
@@ -478,7 +478,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
private static void ExecuteAndCompleteQuery(string ownerUri, Query query,
IEventSender eventSender,
Query.QueryAsyncEventHandler querySuccessCallback,
- Query.QueryAsyncEventHandler queryFailureCallback)
+ Query.QueryAsyncErrorEventHandler queryFailureCallback)
{
// Setup the callback to send the complete event
Query.QueryAsyncEventHandler completeCallback = async q =>
@@ -492,8 +492,21 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
await eventSender.SendEvent(QueryCompleteEvent.Type, eventParams);
};
+
+ // Setup the callback to send the complete event
+ Query.QueryAsyncErrorEventHandler failureCallback = async (q, e) =>
+ {
+ // Send back the results
+ QueryCompleteParams eventParams = new QueryCompleteParams
+ {
+ OwnerUri = ownerUri,
+ BatchSummaries = q.BatchSummaries
+ };
+
+ await eventSender.SendEvent(QueryCompleteEvent.Type, eventParams);
+ };
query.QueryCompleted += completeCallback;
- query.QueryFailed += completeCallback;
+ query.QueryFailed += failureCallback;
// Add the callbacks that were provided by the caller
// If they're null, that's no problem