mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-24 01:25:42 -05:00
Edit Data: Better errors for possible truncation (#514)
* Fix to make sql exceptions surface properly to user (with important notes!) * Adding support for detecting column size issues when updating a cell * Adding unit tests for the exception on read scenario
This commit is contained in:
committed by
Karl Burtram
parent
9499d73cec
commit
e9bc97e290
@@ -36,7 +36,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
{
|
||||
// If: I attempt to create a CellUpdate to set it to NULL
|
||||
const string nullString = "NULL";
|
||||
DbColumnWrapper col = GetWrapper<string>("ntext", true);
|
||||
DbColumnWrapper col = GetWrapper<string>("ntext");
|
||||
CellUpdate cu = new CellUpdate(col, nullString);
|
||||
|
||||
// Then: The value should be a DBNull and the string value should be the same as what
|
||||
@@ -46,7 +46,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
Assert.Equal(nullString, cu.ValueAsString);
|
||||
Assert.Equal(col, cu.Column);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void NullStringNotAllowedTest()
|
||||
{
|
||||
@@ -69,6 +69,17 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
Assert.Equal(col, cu.Column);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("This is way too long")]
|
||||
[InlineData("TooLong")]
|
||||
public void StringTooLongTest(string value)
|
||||
{
|
||||
// If: I attempt to create a CellUpdate to set it to a large string
|
||||
// Then: I should get an exception thrown
|
||||
DbColumnWrapper col = GetWrapper<string>("nvarchar", false, 6);
|
||||
Assert.Throws<FormatException>(() => new CellUpdate(col, value));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(ByteArrayTestParams))]
|
||||
public void ByteArrayTest(string strValue, byte[] expectedValue, string expectedString)
|
||||
@@ -274,16 +285,17 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
Assert.True(ec.IsDirty);
|
||||
}
|
||||
|
||||
private static DbColumnWrapper GetWrapper<T>(string dataTypeName, bool allowNull = true)
|
||||
private static DbColumnWrapper GetWrapper<T>(string dataTypeName, bool allowNull = true, int? colSize = null)
|
||||
{
|
||||
return new DbColumnWrapper(new CellUpdateTestDbColumn(typeof(T), dataTypeName, allowNull));
|
||||
return new DbColumnWrapper(new CellUpdateTestDbColumn(typeof(T), dataTypeName, allowNull, colSize));
|
||||
}
|
||||
|
||||
private class CellUpdateTestDbColumn : DbColumn
|
||||
{
|
||||
public CellUpdateTestDbColumn(Type dataType, string dataTypeName, bool allowNull = true)
|
||||
public CellUpdateTestDbColumn(Type dataType, string dataTypeName, bool allowNull = true, int? colSize = null)
|
||||
{
|
||||
AllowDBNull = allowNull;
|
||||
ColumnSize = colSize;
|
||||
DataType = dataType;
|
||||
DataTypeName = dataTypeName;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
? Enumerable.Repeat(new object[] { "id", "1", "2", "3" }, rowCount)
|
||||
: Enumerable.Repeat(new object[] { "1", "2", "3" }, rowCount);
|
||||
var testResultSet = new TestResultSet(columns, rows);
|
||||
var reader = new TestDbDataReader(new[] { testResultSet });
|
||||
var reader = new TestDbDataReader(new[] { testResultSet }, false);
|
||||
var resultSet = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());
|
||||
await resultSet.ReadResultToEnd(reader, CancellationToken.None);
|
||||
return resultSet;
|
||||
@@ -130,7 +130,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
? new[] {new object[] {"id", "q", "q", "q"}}
|
||||
: new[] {new object[] {"q", "q", "q"}};
|
||||
var testResultSet = new TestResultSet(columns, rows);
|
||||
return new TestDbDataReader(new [] {testResultSet});
|
||||
return new TestDbDataReader(new [] {testResultSet}, false);
|
||||
}
|
||||
|
||||
public static void AddCells(RowEditBase rc, bool includeIdentity)
|
||||
|
||||
@@ -293,7 +293,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
}};
|
||||
object[][] rows = {};
|
||||
var testResultSet = new TestResultSet(cols, rows);
|
||||
var testReader = new TestDbDataReader(new[] {testResultSet});
|
||||
var testReader = new TestDbDataReader(new[] {testResultSet}, false);
|
||||
var rs = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());
|
||||
await rs.ReadResultToEnd(testReader, CancellationToken.None);
|
||||
|
||||
|
||||
@@ -243,7 +243,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
{
|
||||
object[][] rows = {row};
|
||||
var testResultSet = new TestResultSet(columns, rows);
|
||||
var testReader = new TestDbDataReader(new [] {testResultSet});
|
||||
var testReader = new TestDbDataReader(new [] {testResultSet}, false);
|
||||
var resultSet = new ResultSet(0,0, MemoryFileSystem.GetFileStreamFactory());
|
||||
await resultSet.ReadResultToEnd(testReader, CancellationToken.None);
|
||||
return resultSet;
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
};
|
||||
object[][] rows = { new object[]{new byte[] {0x00}}};
|
||||
var testResultSet = new TestResultSet(cols, rows);
|
||||
var testReader = new TestDbDataReader(new[] { testResultSet });
|
||||
var testReader = new TestDbDataReader(new[] { testResultSet }, false);
|
||||
var rs = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());
|
||||
rs.ReadResultToEnd(testReader, CancellationToken.None).Wait();
|
||||
|
||||
|
||||
@@ -363,7 +363,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
.Returns(etm);
|
||||
|
||||
// ... Create a query execution service that will return a successful query
|
||||
var qes = QueryExecution.Common.GetPrimedExecutionService(mockQueryResults, true, false, null);
|
||||
var qes = QueryExecution.Common.GetPrimedExecutionService(mockQueryResults, true, false, false, null);
|
||||
|
||||
// ... Create a connection service that doesn't throw when asked for a connection
|
||||
var cs = new Mock<ConnectionService>();
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
};
|
||||
|
||||
// @TODO: Fix when the connection service is fixed
|
||||
ConnectionInfo ci = QueryExecution.Common.CreateConnectedConnectionInfo(results, false);
|
||||
ConnectionInfo ci = QueryExecution.Common.CreateConnectedConnectionInfo(results, false, false);
|
||||
ConnectionService.Instance.OwnerToConnectionMap[ci.OwnerUri] = ci;
|
||||
|
||||
var fsf = MemoryFileSystem.GetFileStreamFactory();
|
||||
|
||||
Reference in New Issue
Block a user