mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-28 09:35:37 -05:00
Edit Data: Create Row with Nullable Columns (#553)
* WIP * All the new RowCreate tests are working * Fixing a couple bugs with the row delete and row update tests * Regenerating localization files * Fixing multiple iteration in tests
This commit is contained in:
@@ -8,7 +8,6 @@ using System.Data.Common;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Castle.Components.DictionaryAdapter;
|
||||
using Microsoft.SqlTools.ServiceLayer.EditData;
|
||||
using Microsoft.SqlTools.ServiceLayer.EditData.Contracts;
|
||||
using Microsoft.SqlTools.ServiceLayer.EditData.UpdateManagement;
|
||||
@@ -50,7 +49,6 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
|
||||
EditSession session = new EditSession(metaFactory.Object);
|
||||
|
||||
|
||||
// Step 2) Initialize the Session
|
||||
// Mock connector that does nothing
|
||||
EditSession.Connector connector = () => Task.FromResult<DbConnection>(null);
|
||||
@@ -65,46 +63,6 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
return session;
|
||||
}
|
||||
|
||||
public static EditTableMetadata GetStandardMetadata(DbColumn[] columns, bool isMemoryOptimized = false, int defaultColumns = 0)
|
||||
{
|
||||
// Create column metadata providers
|
||||
var columnMetas = columns.Select((c, i) => new EditColumnMetadata
|
||||
{
|
||||
EscapedName = c.ColumnName,
|
||||
Ordinal = i,
|
||||
DefaultValue = i < defaultColumns ? DefaultValue : null
|
||||
}).ToArray();
|
||||
|
||||
// Create column wrappers
|
||||
var columnWrappers = columns.Select(c => new DbColumnWrapper(c)).ToArray();
|
||||
|
||||
// Create the table metadata
|
||||
EditTableMetadata editTableMetadata = new EditTableMetadata
|
||||
{
|
||||
Columns = columnMetas,
|
||||
EscapedMultipartName = TableName,
|
||||
IsMemoryOptimized = isMemoryOptimized
|
||||
};
|
||||
editTableMetadata.Extend(columnWrappers);
|
||||
return editTableMetadata;
|
||||
}
|
||||
|
||||
public static DbColumn[] GetColumns(bool includeIdentity)
|
||||
{
|
||||
List<DbColumn> columns = new List<DbColumn>();
|
||||
|
||||
if (includeIdentity)
|
||||
{
|
||||
columns.Add(new TestDbColumn("id") {IsKey = true, IsIdentity = true, IsAutoIncrement = true});
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
columns.Add(new TestDbColumn($"col{i}"));
|
||||
}
|
||||
return columns.ToArray();
|
||||
}
|
||||
|
||||
public static async Task<Query> GetQuery(DbColumn[] columns, bool includIdentity, int rowCount = 1)
|
||||
{
|
||||
Query q = QueryExecution.Common.GetBasicExecutedQuery();
|
||||
@@ -133,6 +91,32 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
return new TestDbDataReader(new [] {testResultSet}, false);
|
||||
}
|
||||
|
||||
public static EditTableMetadata GetCustomEditTableMetadata(DbColumn[] columns)
|
||||
{
|
||||
// Create column metadata providers and column wrappers
|
||||
var columnMetas = new List<EditColumnMetadata>();
|
||||
var columnWrappers = new List<DbColumnWrapper>();
|
||||
for (int i = 0; i < columns.Length; i++)
|
||||
{
|
||||
columnMetas.Add(new EditColumnMetadata
|
||||
{
|
||||
EscapedName = columns[i].ColumnName,
|
||||
Ordinal = i
|
||||
});
|
||||
columnWrappers.Add(new DbColumnWrapper(columns[i]));
|
||||
}
|
||||
|
||||
// Create the table metadata
|
||||
EditTableMetadata editTableMetadata = new EditTableMetadata
|
||||
{
|
||||
Columns = columnMetas.ToArray(),
|
||||
EscapedMultipartName = TableName,
|
||||
IsMemoryOptimized = false
|
||||
};
|
||||
editTableMetadata.Extend(columnWrappers.ToArray());
|
||||
return editTableMetadata;
|
||||
}
|
||||
|
||||
public static void AddCells(RowEditBase rc, int colsToSkip)
|
||||
{
|
||||
// Skip the first column since if identity, since identity columns can't be updated
|
||||
@@ -141,5 +125,101 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.EditData
|
||||
rc.SetCell(i, "123");
|
||||
}
|
||||
}
|
||||
|
||||
public class TestDbColumnsWithTableMetadata
|
||||
{
|
||||
public TestDbColumnsWithTableMetadata(bool isMemoryOptimized, bool identityCol, int defaultCols, int nullableCols)
|
||||
{
|
||||
List<DbColumn> dbColumns = new List<DbColumn>();
|
||||
List<DbColumnWrapper> columnWrappers = new List<DbColumnWrapper>();
|
||||
List<EditColumnMetadata> columnMetadatas = new List<EditColumnMetadata>();
|
||||
|
||||
int startingOrdinal = 0;
|
||||
|
||||
// Add the identity column at the front of the table
|
||||
if (identityCol)
|
||||
{
|
||||
const string colName = "id";
|
||||
|
||||
DbColumn dbColumn = new TestDbColumn(colName)
|
||||
{
|
||||
IsKey = true,
|
||||
IsIdentity = true,
|
||||
IsAutoIncrement = true
|
||||
};
|
||||
EditColumnMetadata columnMetadata = new EditColumnMetadata
|
||||
{
|
||||
EscapedName = colName,
|
||||
Ordinal = startingOrdinal,
|
||||
DefaultValue = null
|
||||
};
|
||||
dbColumns.Add(dbColumn);
|
||||
columnWrappers.Add(new DbColumnWrapper(dbColumn));
|
||||
columnMetadatas.Add(columnMetadata);
|
||||
|
||||
startingOrdinal++;
|
||||
}
|
||||
|
||||
// Add each column to the table
|
||||
for (int i = startingOrdinal; i < 3 + startingOrdinal; i++)
|
||||
{
|
||||
string colName = $"col{i}";
|
||||
DbColumn dbColumn;
|
||||
EditColumnMetadata columnMetadata;
|
||||
|
||||
if (i < defaultCols + startingOrdinal)
|
||||
{
|
||||
// This column will have a default value
|
||||
dbColumn = new TestDbColumn(colName) {AllowDBNull = false};
|
||||
columnMetadata = new EditColumnMetadata
|
||||
{
|
||||
EscapedName = colName,
|
||||
Ordinal = i,
|
||||
DefaultValue = DefaultValue
|
||||
};
|
||||
}
|
||||
else if (i < nullableCols + defaultCols + startingOrdinal)
|
||||
{
|
||||
// This column will be nullable
|
||||
dbColumn = new TestDbColumn(colName) {AllowDBNull = true};
|
||||
columnMetadata = new EditColumnMetadata
|
||||
{
|
||||
EscapedName = colName,
|
||||
Ordinal = i,
|
||||
DefaultValue = null
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
// This column doesn't have a default value or is nullable
|
||||
dbColumn = new TestDbColumn(colName) {AllowDBNull = false};
|
||||
columnMetadata = new EditColumnMetadata
|
||||
{
|
||||
EscapedName = colName,
|
||||
Ordinal = i,
|
||||
DefaultValue = null
|
||||
};
|
||||
}
|
||||
dbColumns.Add(dbColumn);
|
||||
columnWrappers.Add(new DbColumnWrapper(dbColumn));
|
||||
columnMetadatas.Add(columnMetadata);
|
||||
}
|
||||
|
||||
// Put together the table metadata
|
||||
EditTableMetadata editTableMetadata = new EditTableMetadata
|
||||
{
|
||||
Columns = columnMetadatas.ToArray(),
|
||||
EscapedMultipartName = TableName,
|
||||
IsMemoryOptimized = isMemoryOptimized
|
||||
};
|
||||
editTableMetadata.Extend(columnWrappers.ToArray());
|
||||
|
||||
DbColumns = dbColumns.ToArray();
|
||||
TableMetadata = editTableMetadata;
|
||||
}
|
||||
|
||||
public DbColumn[] DbColumns { get; }
|
||||
public EditTableMetadata TableMetadata { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user