protected override async Task <U1Pair> RunProxiedDbDataAdapterAsync(List <TestTable> randomDataSource, FakeProxiedDbDataAdapter adapter) { using (DbCommandBuilder cmdBuilder = await adapter.CreateCommandBuilderAsync().ConfigureAwait(false)) { DataSet dataSet = new DataSet(); Int32 rowsInFirstTable = await adapter.FillAsync(dataSet); rowsInFirstTable.ShouldBe(40); // Dictionary <String, Int32> rowsModified = DataTableMethods.MutateDataSet(dataSet); List <(String tableName, String command)> executedCommands = new List <(string tableName, string command)>(); // adapter.UpdateCommand = (FakeDbCommand)cmdBuilder.GetUpdateCommand(); adapter.UpdateCommand.NonQueryResultRowCountValue = (cmd) => DataTableMethods.GetUpdateStatementNonQueryResultRowCountValue(expectedTableName: "TODO", adapter, dataSet, cmd, rowsModified, executedCommands); // Int32 updatedRows = await adapter.Update1Async(dataSet); // updatedRows... in first table only? // updatedRows.ShouldBe( rowsModified ); return(dataSet, rowsModified, updatedRows); } }
// TODO: Variations of `UpdateNTest` that use custom Table/Column Mappings. // This is documented here: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataadapter-datatable-and-datacolumn-mappings // This would then cover the `Table`, `Table1`, etc. naming issues. protected override U1Pair RunDbDataAdapterSynchronous(List <TestTable> randomDataSource, FakeDbDataAdapter adapter) { using (FakeDbCommandBuilder cmdBuilder = adapter.CreateCommandBuilder()) { DataSet dataSet = new DataSet(); // `.Fill` returns the number of rows in the first table, not any subsequent tables. Yes, that's silly. Int32 rowsInFirstTable = adapter.Fill(dataSet); rowsInFirstTable.ShouldBe(40); // Dictionary <String, Int32> rowsModified = DataTableMethods.MutateDataSet(dataSet); List <(String tableName, String command)> executedCommands = new List <(string tableName, string command)>(); // adapter.UpdateCommand = cmdBuilder.GetUpdateCommand(); adapter.UpdateCommand.NonQueryResultRowCountValue = (cmd) => DataTableMethods.GetUpdateStatementNonQueryResultRowCountValue(expectedTableName: "TODO", adapter, dataSet, cmd, rowsModified, executedCommands); Int32 updatedRows = adapter.Update1(dataSet); // updatedRows... in first table only? // updatedRows.ShouldBe( rowsModified ); return(dataSet, rowsModified, updatedRows); } }
protected override async Task <U2Pair> RunBatchingProxiedDbDataAdapterAsync(List <TestTable> randomDataSource, BatchingFakeProxiedDbDataAdapter adapter) { using (DbCommandBuilder <FakeDbCommand> cmdBuilder = await adapter.CreateCommandBuilderAsync().ConfigureAwait(false)) { DataTable dataTable = new DataTable(); // `.Fill` returns the number of rows in the first table, not any subsequent tables. Yes, that's silly. Int32 rowsInFirstTable = adapter.Fill(dataTable); rowsInFirstTable.ShouldBe(40); // Dictionary <String, Int32> rowsModified = DataTableMethods.MutateDataTable(dataTable); // adapter.UpdateCommand = cmdBuilder.GetUpdateCommand(); adapter.UpdateCommand.NonQueryResultRowCountValue = (cmd) => DataTableMethods.GetUpdateStatementNonQueryResultRowCountValue(expectedTableName: "TODO", adapter, dataTable, cmd, rowsModified); DataRow[] rows = dataTable.Rows.Cast <DataRow>().ToArray(); Int32 updatedRows = await adapter.Update2Async(rows); // updatedRows.ShouldBe( rowsModified ); return(rows, rowsModified, updatedRows); } }
protected override void AssertResult(FS1Pair dbSynchronous, FS1Pair dbProxied, FS1Pair dbProxiedAsync, FS1Pair dbBatchingProxiedAsync) { DataTableMethods.DataSetEquals(dbSynchronous.Item1, dbProxied.Item1, out String diffs11).ShouldBeTrue(customMessage: diffs11); DataTableMethods.DataSetEquals(dbSynchronous.Item1, dbProxiedAsync.Item1, out String diffs12).ShouldBeTrue(customMessage: diffs12); DataTableMethods.DataSetEquals(dbSynchronous.Item1, dbBatchingProxiedAsync.Item1, out String diffs13).ShouldBeTrue(customMessage: diffs13); DataTableMethods.DataTablesEquals(dbSynchronous.Item2, dbProxied.Item2, out String diffs21).ShouldBeTrue(customMessage: diffs21); DataTableMethods.DataTablesEquals(dbSynchronous.Item2, dbProxiedAsync.Item2, out String diffs22).ShouldBeTrue(customMessage: diffs22); DataTableMethods.DataTablesEquals(dbSynchronous.Item2, dbBatchingProxiedAsync.Item2, out String diffs23).ShouldBeTrue(customMessage: diffs23); }
protected override U4Pair RunProxiedDbDataAdapter(List <TestTable> randomDataSource, FakeProxiedDbDataAdapter adapter) { using (FakeDbCommandBuilder cmdBuilder = new FakeDbCommandBuilder(adapter)) { DataSet dataSet = new DataSet(); // `.Fill` returns the number of rows in the first table, not any subsequent tables. Yes, that's silly. Int32 rowsInFirstTable = adapter.Fill(dataSet); rowsInFirstTable.ShouldBe(40); // Dictionary <String, Int32> rowsModified = DataTableMethods.MutateDataSet(dataSet); // adapter.UpdateCommand = cmdBuilder.GetUpdateCommand(); adapter.UpdateCommand.NonQueryResultRowCountValue = (cmd) => DataTableMethods.GetUpdateStatementNonQueryResultRowCountValue(expectedTableName: "TODO", adapter, dataSet, cmd, rowsModified); Int32 updatedRows = adapter.Update4(dataSet, srcTable: "RandomDataTable_2"); // updatedRows.ShouldBe( rowsModified ); return(dataSet, rowsModified, updatedRows); } }
protected override void AssertResult(DataSet dbSynchronous, DataSet dbProxied, DataSet dbProxiedAsync, DataSet dbBatchingProxiedAsync) { DataTableMethods.DataSetEquals(dbSynchronous, dbProxied, out String diffs1).ShouldBeTrue(customMessage: diffs1); DataTableMethods.DataSetEquals(dbSynchronous, dbProxiedAsync, out String diffs2).ShouldBeTrue(customMessage: diffs2); DataTableMethods.DataSetEquals(dbSynchronous, dbBatchingProxiedAsync, out String diffs3).ShouldBeTrue(customMessage: diffs3); }
protected override void AssertResult(DataTable dbSynchronous, DataTable dbProxied, DataTable dbProxiedAsync, DataTable dbBatchingProxiedAsync) { DataTableMethods.DataTableEquals(dbSynchronous, dbProxied, "1", out String differences1).ShouldBeTrue(customMessage: "First different row at index: " + differences1); DataTableMethods.DataTableEquals(dbSynchronous, dbProxiedAsync, "2", out String differences2).ShouldBeTrue(customMessage: "First different row at index: " + differences2); DataTableMethods.DataTableEquals(dbSynchronous, dbBatchingProxiedAsync, "3", out String differences3).ShouldBeTrue(customMessage: "First different row at index: " + differences3); }