mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 18:47:57 -05:00
Fix empty result set error handling and metadata service returning correct type name (#535)
- HandleSimpleExecuteRequest now handles the case where no rows are in a result by cleanly returning a success message but with no rows included. This is handled in the front-end instead and goes through the standard path (with a clean explanation message) instead of showing a `error: no results to return` - MetadataService was always meant to include the type name in the return result, as otherwise the front end has to guess. In order to fix a bug where this resulted in scripting based on the metadata failing (as front-end used `Procedure` instead of `StoredProcedure`), I'm returning the data here. I'll have a matching front end fix but this is overall a good solution to have.
This commit is contained in:
committed by
Karl Burtram
parent
f711aaea5b
commit
185978eb80
@@ -184,22 +184,27 @@ namespace Microsoft.SqlTools.ServiceLayer.Metadata
|
|||||||
var objectType = reader[2] as string;
|
var objectType = reader[2] as string;
|
||||||
|
|
||||||
MetadataType metadataType;
|
MetadataType metadataType;
|
||||||
|
string metadataTypeName;
|
||||||
if (objectType.StartsWith("V"))
|
if (objectType.StartsWith("V"))
|
||||||
{
|
{
|
||||||
metadataType = MetadataType.View;
|
metadataType = MetadataType.View;
|
||||||
|
metadataTypeName = "View";
|
||||||
}
|
}
|
||||||
else if (objectType.StartsWith("P"))
|
else if (objectType.StartsWith("P"))
|
||||||
{
|
{
|
||||||
metadataType = MetadataType.SProc;
|
metadataType = MetadataType.SProc;
|
||||||
|
metadataTypeName = "StoredProcedure";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
metadataType = MetadataType.Table;
|
metadataType = MetadataType.Table;
|
||||||
|
metadataTypeName = "Table";
|
||||||
}
|
}
|
||||||
|
|
||||||
metadata.Add(new ObjectMetadata
|
metadata.Add(new ObjectMetadata
|
||||||
{
|
{
|
||||||
MetadataType = metadataType,
|
MetadataType = metadataType,
|
||||||
|
MetadataTypeName = metadataTypeName,
|
||||||
Schema = schemaName,
|
Schema = schemaName,
|
||||||
Name = objectName
|
Name = objectName
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -230,8 +230,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
|||||||
{
|
{
|
||||||
// check to make sure any results were recieved
|
// check to make sure any results were recieved
|
||||||
if (query.Batches.Length == 0
|
if (query.Batches.Length == 0
|
||||||
|| query.Batches[0].ResultSets.Count == 0
|
|| query.Batches[0].ResultSets.Count == 0)
|
||||||
|| query.Batches[0].ResultSets[0].RowCount == 0)
|
|
||||||
{
|
{
|
||||||
await requestContext.SendError(SR.QueryServiceResultSetHasNoResults);
|
await requestContext.SendError(SR.QueryServiceResultSetHasNoResults);
|
||||||
return;
|
return;
|
||||||
@@ -245,6 +244,15 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SimpleExecuteResult result = new SimpleExecuteResult
|
||||||
|
{
|
||||||
|
RowCount = rowCount,
|
||||||
|
ColumnInfo = query.Batches[0].ResultSets[0].Columns,
|
||||||
|
Rows = new DbCellValue[0][]
|
||||||
|
};
|
||||||
|
|
||||||
|
if (rowCount > 0)
|
||||||
|
{
|
||||||
SubsetParams subsetRequestParams = new SubsetParams
|
SubsetParams subsetRequestParams = new SubsetParams
|
||||||
{
|
{
|
||||||
OwnerUri = randomUri,
|
OwnerUri = randomUri,
|
||||||
@@ -255,12 +263,8 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryExecution
|
|||||||
};
|
};
|
||||||
// get the data to send back
|
// get the data to send back
|
||||||
ResultSetSubset subset = await InterServiceResultSubset(subsetRequestParams);
|
ResultSetSubset subset = await InterServiceResultSubset(subsetRequestParams);
|
||||||
SimpleExecuteResult result = new SimpleExecuteResult
|
result.Rows = subset.Rows;
|
||||||
{
|
}
|
||||||
RowCount = query.Batches[0].ResultSets[0].RowCount,
|
|
||||||
ColumnInfo = query.Batches[0].ResultSets[0].Columns,
|
|
||||||
Rows = subset.Rows
|
|
||||||
};
|
|
||||||
await requestContext.SendResult(result);
|
await requestContext.SendResult(result);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
Reference in New Issue
Block a user