mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 17:23:27 -05:00
feature/edit/subset (#283)
* Changing query/subset API to only use Result on success, Error on error * Creating an interservice API for getting query result subsets * Updates to subset API * RowStartIndex is now long * Output of query/subset is a 2D array of DbCellValue * Adding LongSkip method to LongList to allow skipping ahead by longs * Moving LongList back to ServiceLayer utilities. Move refactoring * Stubbing out request for edit/subset * Initial implementation of getting edit rows * Unit tests for RowEdit and RowDelete .GetEditRow * Fixing major bugs in LongList implementation, adding much more thorough tests * Adding some more unit tests and fixes to make unit tests pass * Fixing comment
This commit is contained in:
@@ -176,42 +176,13 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
{
|
||||
try
|
||||
{
|
||||
// Attempt to load the query
|
||||
Query query;
|
||||
if (!ActiveQueries.TryGetValue(subsetParams.OwnerUri, out query))
|
||||
{
|
||||
await requestContext.SendResult(new SubsetResult
|
||||
{
|
||||
Message = SR.QueryServiceRequestsNoQuery
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Retrieve the requested subset and return it
|
||||
ResultSetSubset subset = await InterServiceResultSubset(subsetParams);
|
||||
var result = new SubsetResult
|
||||
{
|
||||
Message = null,
|
||||
ResultSubset = await query.GetSubset(subsetParams.BatchIndex,
|
||||
subsetParams.ResultSetIndex, subsetParams.RowsStartIndex, subsetParams.RowsCount)
|
||||
ResultSubset = subset
|
||||
};
|
||||
await requestContext.SendResult(result);
|
||||
}
|
||||
catch (InvalidOperationException ioe)
|
||||
{
|
||||
// Return the error as a result
|
||||
await requestContext.SendResult(new SubsetResult
|
||||
{
|
||||
Message = ioe.Message
|
||||
});
|
||||
}
|
||||
catch (ArgumentOutOfRangeException aoore)
|
||||
{
|
||||
// Return the error as a result
|
||||
await requestContext.SendResult(new SubsetResult
|
||||
{
|
||||
Message = aoore.Message
|
||||
});
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// This was unexpected, so send back as error
|
||||
@@ -415,7 +386,6 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
/// <param name="ownerUri">The identifier of the query to be disposed</param>
|
||||
/// <param name="successAction">Action to perform on success</param>
|
||||
/// <param name="failureAction">Action to perform on failure</param>
|
||||
/// <returns></returns>
|
||||
public async Task InterServiceDisposeQuery(string ownerUri, Func<Task> successAction,
|
||||
Func<string, Task> failureAction)
|
||||
{
|
||||
@@ -444,6 +414,29 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the requested subset of rows from the requested result set. Intended to be
|
||||
/// called by another service.
|
||||
/// </summary>
|
||||
/// <param name="subsetParams">Parameters for the subset to retrieve</param>
|
||||
/// <returns>The requested subset</returns>
|
||||
/// <exception cref="ArgumentOutOfRangeException">The requested query does not exist</exception>
|
||||
public async Task<ResultSetSubset> InterServiceResultSubset(SubsetParams subsetParams)
|
||||
{
|
||||
Validate.IsNotNullOrEmptyString(nameof(subsetParams.OwnerUri), subsetParams.OwnerUri);
|
||||
|
||||
// Attempt to load the query
|
||||
Query query;
|
||||
if (!ActiveQueries.TryGetValue(subsetParams.OwnerUri, out query))
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(SR.QueryServiceRequestsNoQuery);
|
||||
}
|
||||
|
||||
// Retrieve the requested subset and return it
|
||||
return await query.GetSubset(subsetParams.BatchIndex, subsetParams.ResultSetIndex,
|
||||
subsetParams.RowsStartIndex, subsetParams.RowsCount);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Helpers
|
||||
|
||||
Reference in New Issue
Block a user