public void DestinationWithIdentityColumn(IConnectionManager connection) { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture(connection, "SourceDynamicIDCol"); source2Columns.InsertTestData(); CreateTableTask.Create(connection, "DestinationDynamicIdCol", new List <TableColumn>() { new TableColumn("Id", "BIGINT", allowNulls: false, isPrimaryKey: true, isIdentity: true), new TableColumn("Col2", "VARCHAR(100)", allowNulls: true), new TableColumn("Col1", "INT", allowNulls: true), new TableColumn("ColX", "INT", allowNulls: true), }); //Act DbSource <ExpandoObject> source = new DbSource <ExpandoObject>(connection, "SourceDynamicIDCol"); DbDestination <ExpandoObject> dest = new DbDestination <ExpandoObject>(connection, "DestinationDynamicIdCol"); source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert string QB = ConnectionManagerSpecifics.GetBeginQuotation(connection); string QE = ConnectionManagerSpecifics.GetEndQuotation(connection); Assert.Equal(3, RowCountTask.Count(connection, "DestinationDynamicIdCol")); Assert.Equal(1, RowCountTask.Count(connection, "DestinationDynamicIdCol", $"{QB}Col1{QE} = 1 AND {QB}Col2{QE}='Test1' AND {QB}Id{QE} > 0 AND {QB}ColX{QE} IS NULL")); Assert.Equal(1, RowCountTask.Count(connection, "DestinationDynamicIdCol", $"{QB}Col1{QE} = 2 AND {QB}Col2{QE}='Test2' AND {QB}Id{QE} > 0 AND {QB}ColX{QE} IS NULL")); Assert.Equal(1, RowCountTask.Count(connection, "DestinationDynamicIdCol", $"{QB}Col1{QE} = 3 AND {QB}Col2{QE}='Test3' AND {QB}Id{QE} > 0 AND {QB}ColX{QE} IS NULL")); }
public void InsertIntoTable() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("Source"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture("CustomDestination"); //Act DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(SqlConnection, "Source"); CustomDestination <MySimpleRow> dest = new CustomDestination <MySimpleRow>( row => { SqlTask.ExecuteNonQuery(SqlConnection, "Insert row", $"INSERT INTO dbo.CustomDestination VALUES({row.Col1},'{row.Col2}')"); } ); source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert dest2Columns.AssertTestData(); }
public void NoIdColumn(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "DBMergeSource"); s2c.InsertTestData(); s2c.InsertTestDataSet2(); TwoColumnsTableFixture d2c = new TwoColumnsTableFixture(connection, "DBMergeDestination"); d2c.InsertTestDataSet3(); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>("DBMergeSource", connection); //Act DbMerge <MySimpleRow> dest = new DbMerge <MySimpleRow>(MergeMode.Full, "DBMergeDestination", connection); source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.True(dest.UseTruncateMethod == true); Assert.Equal(6, RowCountTask.Count(connection, "DBMergeDestination", $"{d2c.QB}Col1{d2c.QE} BETWEEN 1 AND 7 AND {d2c.QB}Col2{d2c.QE} LIKE 'Test%'")); Assert.True(dest.DeltaTable.Count == 7); Assert.True(dest.DeltaTable.Where(row => row.ChangeAction == ChangeAction.Update).Count() == 3); Assert.True(dest.DeltaTable.Where(row => row.ChangeAction == ChangeAction.Delete && row.Key == 10).Count() == 1); Assert.True(dest.DeltaTable.Where(row => row.ChangeAction == ChangeAction.Insert).Count() == 3); }
public void DataIsInList() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("RowDuplicationStringArraySource"); source2Columns.InsertTestData(); DbSource <string[]> source = new DbSource <string[]>(SqlConnection, "RowDuplicationStringArraySource"); RowDuplication <string[]> duplication = new RowDuplication <string[]>(); MemoryDestination <string[]> dest = new MemoryDestination <string[]>(); //Act source.LinkTo(duplication); duplication.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Collection(dest.Data, d => Assert.True(d[0] == "1" && d[1] == "Test1"), d => Assert.True(d[0] == "1" && d[1] == "Test1"), d => Assert.True(d[0] == "2" && d[1] == "Test2"), d => Assert.True(d[0] == "2" && d[1] == "Test2"), d => Assert.True(d[0] == "3" && d[1] == "Test3"), d => Assert.True(d[0] == "3" && d[1] == "Test3") ); }
public void UsingDifferentObjectTypes() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("SourceMultipleLinks"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture("DestinationMultipleLinks"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(SqlConnection, "SourceMultipleLinks"); DbDestination <MyOtherRow> dest = new DbDestination <MyOtherRow>(SqlConnection, "DestinationMultipleLinks"); RowTransformation <MySimpleRow, MyOtherRow> trans1 = new RowTransformation <MySimpleRow, MyOtherRow> (row => { return(new MyOtherRow() { ColA = row.Col1, ColB = row.Col2 }); } ); //Act source.LinkTo <MyOtherRow>(trans1).LinkTo(dest); //Assert source.Execute(); dest.Wait(); dest2Columns.AssertTestData(); }
public void CommitTransaction(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "TransactionSource"); s2c.InsertTestData(); TwoColumnsTableFixture d2c = new TwoColumnsTableFixture(connection, "TransactionDest"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(connection, "TransactionSource"); DbDestination <MySimpleRow> dest = new DbDestination <MySimpleRow>(connection, "TransactionDest", batchSize: 2); //Act & Assert connection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert if (connection.GetType() == typeof(SqlConnectionManager)) { Assert.Equal(3, RowCountTask.Count(connection.Clone(), "TransactionDest", RowCountOptions.NoLock)); } connection.CommitTransaction(); Assert.Equal(3, RowCountTask.Count(connection, "TransactionDest")); Assert.Equal(3, RowCountTask.Count(connection.Clone(), "TransactionDest")); //Assert Connections are closed Assert.True(dest.BulkInsertConnectionManager.State == null); Assert.True(connection.State == null); }
public void UsingTableDefinitions(IConnectionManager connection) { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture(connection, "SourceTableDef"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture(connection, "DestinationTableDef"); //Act DbSource <string[]> source = new DbSource <string[]>() { SourceTableDefinition = source2Columns.TableDefinition, ConnectionManager = connection }; DbDestination <string[]> dest = new DbDestination <string[]>() { DestinationTableDefinition = dest2Columns.TableDefinition, ConnectionManager = connection }; source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert dest2Columns.AssertTestData(); }
public void ColumnMapping(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "SpecialCharacterSource"); InsertTestData(connection, "SpecialCharacterSource"); TwoColumnsTableFixture d2c = new TwoColumnsTableFixture(connection, "SpecialCharacterDestination"); //Act DbSource <string[]> source = new DbSource <string[]>() { ConnectionManager = connection, SourceTableDefinition = s2c.TableDefinition }; DbDestination <string[]> dest = new DbDestination <string[]>() { ConnectionManager = connection, DestinationTableDefinition = d2c.TableDefinition }; source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Equal(4, RowCountTask.Count(connection, "SpecialCharacterDestination")); }
public void WithSqlNotMatchingColumns(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "SourceNotMatchingCols"); s2c.InsertTestData(); SqlTask.ExecuteNonQuery(connection, "Create destination table", $@"CREATE TABLE destination_notmatchingcols ( col3 VARCHAR(100) NULL , col4 VARCHAR(100) NULL , {s2c.QB}Col1{s2c.QE} VARCHAR(100) NULL)"); //Act DbSource <string[]> source = new DbSource <string[]>( $"SELECT {s2c.QB}Col1{s2c.QE}, {s2c.QB}Col2{s2c.QE} FROM {s2c.QB}SourceNotMatchingCols{s2c.QE}", connection ); DbDestination <string[]> dest = new DbDestination <string[]>("destination_notmatchingcols", connection); source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Equal(3, RowCountTask.Count(connection, "destination_notmatchingcols")); Assert.Equal(1, RowCountTask.Count(connection, "destination_notmatchingcols", $"col3 = '1' AND col4='Test1'")); Assert.Equal(1, RowCountTask.Count(connection, "destination_notmatchingcols", $"col3 = '2' AND col4='Test2'")); Assert.Equal(1, RowCountTask.Count(connection, "destination_notmatchingcols", $"col3 = '3' AND col4='Test3'")); }
public void Test(IConnectionManager sourceConnection, IConnectionManager destConnection) { //Arrange string QB = destConnection.QB; string QE = destConnection.QE; CreateSourceAndDestinationTables(sourceConnection, destConnection, QB, QE); //Act var nameSource = new DbSource <Name>(sourceConnection, "Name"); var personMerge = new DbMerge <People>(destConnection, "People"); var transform = new RowTransformation <Name, People>(d => { return(new People() { FirstName = d.FIRST_NAME, LastName = d.LAST_NAME, Id = d.ID }); }); nameSource.LinkTo(transform); transform.LinkTo(personMerge); nameSource.Execute(); personMerge.Wait(); //Assert Assert.Equal(1, RowCountTask.Count(destConnection, "People", $"{QB}Id{QE} = 1 AND {QB}FirstName{QE} = 'Bugs' AND {QB}LastName{QE} IS NULL")); Assert.Equal(1, RowCountTask.Count(destConnection, "People", $"{QB}Id{QE} = 2 AND {QB}FirstName{QE} IS NULL AND {QB}LastName{QE} = 'Pig'")); Assert.Equal(1, RowCountTask.Count(destConnection, "People", $"{QB}Id{QE} = 3 AND {QB}FirstName{QE} = 'Franky' AND {QB}LastName{QE} IS NULL")); }
public void PredicateFilteringWithInteger() { //Arrange TwoColumnsTableFixture sourceTable = new TwoColumnsTableFixture("Source"); sourceTable.InsertTestData(); TwoColumnsTableFixture dest1Table = new TwoColumnsTableFixture("Destination1"); TwoColumnsTableFixture dest2Table = new TwoColumnsTableFixture("Destination2"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(Connection, "Source"); DbDestination <MySimpleRow> dest1 = new DbDestination <MySimpleRow>(Connection, "Destination1"); DbDestination <MySimpleRow> dest2 = new DbDestination <MySimpleRow>(Connection, "Destination2"); //Act Multicast <MySimpleRow> multicast = new Multicast <MySimpleRow>(); source.LinkTo(multicast); multicast.LinkTo(dest1, row => row.Col1 <= 2); multicast.LinkTo(dest2, row => row.Col1 > 2); source.Execute(); dest1.Wait(); dest2.Wait(); //Assert Assert.Equal(1, RowCountTask.Count(Connection, "Destination1", "Col1 = 1 AND Col2='Test1'")); Assert.Equal(1, RowCountTask.Count(Connection, "Destination1", "Col1 = 2 AND Col2='Test2'")); Assert.Equal(1, RowCountTask.Count(Connection, "Destination2", "Col1 = 3 AND Col2='Test3'")); }
public void ConvertObjects() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("BlockTransSource"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture("BlockTransDest"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(Connection, "BlockTransSource"); DbDestination <MyOtherRow> dest = new DbDestination <MyOtherRow>(Connection, "BlockTransDest"); //Act BlockTransformation <MySimpleRow, MyOtherRow> block = new BlockTransformation <MySimpleRow, MyOtherRow>( inputData => { return(inputData.Select(row => new MyOtherRow() { Col3 = row.Col1, Col4 = row.Col2 }).ToList()); }); source.LinkTo(block); block.LinkTo(dest); source.Execute(); dest.Wait(); //Assert dest2Columns.AssertTestData(); }
public void ModifyInputDataList() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("BlockTransSource"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture("BlockTransDest"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(Connection, "BlockTransSource"); DbDestination <MySimpleRow> dest = new DbDestination <MySimpleRow>(Connection, "BlockTransDest"); //Act BlockTransformation <MySimpleRow> block = new BlockTransformation <MySimpleRow>( inputData => { inputData.RemoveRange(1, 2); inputData.Add(new MySimpleRow() { Col1 = 4, Col2 = "Test4" }); return(inputData); }); source.LinkTo(block); block.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Equal(2, RowCountTask.Count(Connection, "BlockTransDest")); Assert.Equal(1, RowCountTask.Count(Connection, "BlockTransDest", "Col1 = 1 AND Col2='Test1'")); Assert.Equal(1, RowCountTask.Count(Connection, "BlockTransDest", "Col1 = 4 AND Col2='Test4'")); }
public void SortSimpleDataDescending() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("SortSource"); source2Columns.InsertTestData(); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(Connection, "SortSource"); //Act List <MySimpleRow> actual = new List <MySimpleRow>(); CustomDestination <MySimpleRow> dest = new CustomDestination <MySimpleRow>( row => actual.Add(row) ); Comparison <MySimpleRow> comp = new Comparison <MySimpleRow>( (x, y) => y.Col1 - x.Col1 ); Sort <MySimpleRow> block = new Sort <MySimpleRow>(comp); source.LinkTo(block); block.LinkTo(dest); source.Execute(); dest.Wait(); //Assert List <int> expected = new List <int>() { 3, 2, 1 }; Assert.Equal(expected, actual.Select(row => row.Col1).ToList()); }
public void TwoTransactionsAndParallelWriting(IConnectionManager connection) { if (connection.ConnectionManagerType == ConnectionManagerType.SQLite) { return; } //Arrange var concopy = connection.Clone(); TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "TransactionSourceParallelWrite"); s2c.InsertTestData(); TwoColumnsTableFixture d2c1 = new TwoColumnsTableFixture(connection, "TransactionDest1"); TwoColumnsTableFixture d2c2 = new TwoColumnsTableFixture(connection, "TransactionDest2"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(connection, "TransactionSourceParallelWrite"); DbDestination <MySimpleRow> dest1 = new DbDestination <MySimpleRow>(connection, "TransactionDest1", batchSize: 2); DbDestination <MySimpleRow> dest2 = new DbDestination <MySimpleRow>(concopy, "TransactionDest2", batchSize: 2); Multicast <MySimpleRow> multicast = new Multicast <MySimpleRow>(); //Act & Assert connection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); concopy.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); source.LinkTo(multicast); multicast.LinkTo(dest1); multicast.LinkTo(dest2); source.Execute(); dest1.Wait(); dest2.Wait(); connection.CommitTransaction(); concopy.CommitTransaction(); Assert.Equal(3, RowCountTask.Count(connection, "TransactionDest1")); Assert.Equal(3, RowCountTask.Count(connection, "TransactionDest2")); }
public void SortSimpleDataDescending() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("SortSourceNonGeneric"); source2Columns.InsertTestData(); DbSource <string[]> source = new DbSource <string[]>(Connection, "SortSourceNonGeneric"); //Act List <string[]> actual = new List <string[]>(); CustomDestination <string[]> dest = new CustomDestination <string[]>( row => actual.Add(row) ); Comparison <string[]> comp = new Comparison <string[]>( (x, y) => int.Parse(y[0]) - int.Parse(x[0]) ); Sort <string[]> block = new Sort <string[]>(comp); source.LinkTo(block); block.LinkTo(dest); source.Execute(); dest.Wait(); //Assert List <int> expected = new List <int>() { 3, 2, 1 }; Assert.Equal(expected, actual.Select(row => int.Parse(row[0])).ToList()); }
public void OneTransactionAndParallelWritingWithMARS() { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(SqlConnection, "TransactionSourceParallelWrite"); s2c.InsertTestData(); TwoColumnsTableFixture d2c1 = new TwoColumnsTableFixture(SqlConnection, "TransactionDest1"); TwoColumnsTableFixture d2c2 = new TwoColumnsTableFixture(SqlConnection, "TransactionDest2"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(SqlConnection, "TransactionSourceParallelWrite"); string constring = $"{Config.SqlConnection.RawConnectionString("DataFlow")};MultipleActiveResultSets=True;"; var marscon = new SqlConnectionManager(constring); DbDestination <MySimpleRow> dest1 = new DbDestination <MySimpleRow>(marscon, "TransactionDest1", batchSize: 2); DbDestination <MySimpleRow> dest2 = new DbDestination <MySimpleRow>(marscon, "TransactionDest2", batchSize: 2); Multicast <MySimpleRow> multicast = new Multicast <MySimpleRow>(); //Act & Assert marscon.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); source.LinkTo(multicast); multicast.LinkTo(dest1); multicast.LinkTo(dest2); source.Execute(); dest1.Wait(); dest2.Wait(); marscon.CommitTransaction(); d2c1.AssertTestData(); d2c1.AssertTestData(); }
public void SimpleFlowWithDefaultConnection() { //Arrange CreateTableTask.Create("TestSourceTable", new List <TableColumn>() { new TableColumn("Col1", "VARCHAR(100)") }); SqlTask.ExecuteNonQuery("Insert test data", "INSERT INTO TestSourceTable VALUES ('T');"); CreateTableTask.Create("TestDestinationTable", new List <TableColumn>() { new TableColumn("Col1", "VARCHAR(100)") }); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>("TestSourceTable"); DbDestination <MySimpleRow> dest = new DbDestination <MySimpleRow>("TestDestinationTable"); //Act source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.True(RowCountTask.Count("TestDestinationTable").Value == 1); }
public void DynamicObjectJoin() { //Arrange TwoColumnsTableFixture table1 = new TwoColumnsTableFixture(SqlConnection, "CrossJoinSource1"); table1.InsertTestData(); TwoColumnsTableFixture table2 = new TwoColumnsTableFixture(SqlConnection, "CrossJoinSource2"); table2.InsertTestData(); DbSource <ExpandoObject> source1 = new DbSource <ExpandoObject>(SqlConnection, "CrossJoinSource1"); DbSource <ExpandoObject> source2 = new DbSource <ExpandoObject>(SqlConnection, "CrossJoinSource2"); MemoryDestination dest = new MemoryDestination(); CrossJoin crossJoin = new CrossJoin( (data1, data2) => { dynamic d1 = data1 as dynamic; dynamic d2 = data1 as dynamic; dynamic res = new ExpandoObject(); res.Val = d1.Col1 + d2.Col2; return(res); } ); //Act source1.LinkTo(crossJoin.InMemoryTarget); source2.LinkTo(crossJoin.PassingTarget); crossJoin.LinkTo(dest); source1.Execute(); source2.Execute(); dest.Wait(); //Assert Assert.Equal(9, dest.Data.Count); }
public void InsertIntoTable() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("CustomDestinationDynamicSource"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture("CustomDestinationDynamicDestination"); //Act DbSource <ExpandoObject> source = new DbSource <ExpandoObject>("CustomDestinationDynamicSource", SqlConnection); CustomDestination <ExpandoObject> dest = new CustomDestination <ExpandoObject>( row => { dynamic r = row as ExpandoObject; SqlTask.ExecuteNonQuery(SqlConnection, "Insert row", $"INSERT INTO dbo.CustomDestinationDynamicDestination VALUES({r.Col1},'{r.Col2}')"); } ); source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert dest2Columns.AssertTestData(); }
public void ColumnMapping(IConnectionManager connection) { //Arrange FourColumnsTableFixture source4Columns = new FourColumnsTableFixture(connection, "Source"); source4Columns.InsertTestData(); FourColumnsTableFixture dest4Columns = new FourColumnsTableFixture(connection, "Destination", identityColumnIndex: 2); DbSource <string[]> source = new DbSource <string[]>(connection, "Source"); RowTransformation <string[], MyExtendedRow> trans = new RowTransformation <string[], MyExtendedRow>( row => new MyExtendedRow() { Id = int.Parse(row[0]), Text = row[1], Value = row[2] != null ? (long?)long.Parse(row[2]) : null, Percentage = decimal.Parse(row[3]) }); //Act DbDestination <MyExtendedRow> dest = new DbDestination <MyExtendedRow>(connection, "Destination"); source.LinkTo(trans); trans.LinkTo(dest); source.Execute(); dest.Wait(); //Assert dest4Columns.AssertTestData(); }
public void WithPredicate() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("RowDuplicationSource"); source2Columns.InsertTestData(); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(SqlConnection, "RowDuplicationSource"); RowDuplication <MySimpleRow> duplication = new RowDuplication <MySimpleRow>( row => row.Col1 == 1 || row.Col2 == "Test3" ); MemoryDestination <MySimpleRow> dest = new MemoryDestination <MySimpleRow>(); //Act source.LinkTo(duplication); duplication.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Collection(dest.Data, d => Assert.True(d.Col1 == 1 && d.Col2 == "Test1"), d => Assert.True(d.Col1 == 1 && d.Col2 == "Test1"), d => Assert.True(d.Col1 == 2 && d.Col2 == "Test2"), d => Assert.True(d.Col1 == 3 && d.Col2 == "Test3"), d => Assert.True(d.Col1 == 3 && d.Col2 == "Test3") ); }
public void RedirectErrorWithObject(IConnectionManager connection) { if (connection.GetType() == typeof(SQLiteConnectionManager)) { Task.Delay(100).Wait(); //Database was locked and needs to recover after exception } //Arrange CreateSourceTable(connection, "DbSourceErrorLinking"); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture(connection, "DbDestinationErrorLinking"); //Act DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(connection, "DbSourceErrorLinking"); DbDestination <MySimpleRow> dest = new DbDestination <MySimpleRow>(connection, "DbDestinationErrorLinking"); MemoryDestination <ETLBoxError> errorDest = new MemoryDestination <ETLBoxError>(); source.LinkTo(dest); source.LinkErrorTo(errorDest); source.Execute(); dest.Wait(); errorDest.Wait(); //Assert dest2Columns.AssertTestData(); Assert.Collection <ETLBoxError>(errorDest.Data, d => Assert.True(!string.IsNullOrEmpty(d.RecordAsJson) && !string.IsNullOrEmpty(d.ErrorText)), d => Assert.True(!string.IsNullOrEmpty(d.RecordAsJson) && !string.IsNullOrEmpty(d.ErrorText)), d => Assert.True(!string.IsNullOrEmpty(d.RecordAsJson) && !string.IsNullOrEmpty(d.ErrorText)) ); }
public void ThrowExceptionWithoutHandling() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("BlockTransSource"); source2Columns.InsertTestData(); TwoColumnsTableFixture dest2Columns = new TwoColumnsTableFixture("BlockTransDest"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(Connection, "BlockTransSource"); DbDestination <MySimpleRow> dest = new DbDestination <MySimpleRow>(Connection, "BlockTransDest"); //Act BlockTransformation <MySimpleRow> block = new BlockTransformation <MySimpleRow>( inputData => { throw new Exception("Test"); }); source.LinkTo(block); block.LinkTo(dest); //Assert Assert.Throws <AggregateException>(() => { source.Execute(); dest.Wait(); }); }
public void SplitInto2Tables() { //Arrange TwoColumnsTableFixture sourceTable = new TwoColumnsTableFixture("Source"); sourceTable.InsertTestData(); TwoColumnsTableFixture dest1Table = new TwoColumnsTableFixture("Destination1"); TwoColumnsTableFixture dest2Table = new TwoColumnsTableFixture("Destination2"); DbSource <string[]> source = new DbSource <string[]>("Source", Connection); DbDestination <string[]> dest1 = new DbDestination <string[]>("Destination1", Connection); DbDestination <string[]> dest2 = new DbDestination <string[]>("Destination2", Connection); //Act Multicast <string[]> multicast = new Multicast <string[]>(); source.LinkTo(multicast); multicast.LinkTo(dest1); multicast.LinkTo(dest2); source.Execute(); dest1.Wait(); dest2.Wait(); //Assert dest1Table.AssertTestData(); dest2Table.AssertTestData(); }
public void DuplicateDataInto3Destinations() { //Arrange TwoColumnsTableFixture sourceTable = new TwoColumnsTableFixture("Source"); sourceTable.InsertTestData(); TwoColumnsTableFixture dest1Table = new TwoColumnsTableFixture("Destination1"); TwoColumnsTableFixture dest2Table = new TwoColumnsTableFixture("Destination2"); TwoColumnsTableFixture dest3Table = new TwoColumnsTableFixture("Destination3"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(Connection, "Source"); DbDestination <MySimpleRow> dest1 = new DbDestination <MySimpleRow>(Connection, "Destination1"); DbDestination <MySimpleRow> dest2 = new DbDestination <MySimpleRow>(Connection, "Destination2"); DbDestination <MySimpleRow> dest3 = new DbDestination <MySimpleRow>(Connection, "Destination3"); //Act Multicast <MySimpleRow> multicast = new Multicast <MySimpleRow>(); source.LinkTo(multicast); multicast.LinkTo(dest1); multicast.LinkTo(dest2); multicast.LinkTo(dest3); source.Execute(); dest1.Wait(); dest2.Wait(); dest3.Wait(); //Assert dest1Table.AssertTestData(); dest2Table.AssertTestData(); dest3Table.AssertTestData(); }
public void WithPredicate() { //Arrange TwoColumnsTableFixture source2Columns = new TwoColumnsTableFixture("RowDuplicationSource"); source2Columns.InsertTestData(); DbSource source = new DbSource(SqlConnection, "RowDuplicationSource"); RowDuplication duplication = new RowDuplication( row => { dynamic r = row as dynamic; return(r.Col1 == 1 || r.Col2 == "Test3"); }); MemoryDestination dest = new MemoryDestination(); //Act source.LinkTo(duplication); duplication.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Collection(dest.Data, row => { dynamic d = row as dynamic; Assert.True(d.Col1 == 1 && d.Col2 == "Test1"); }, row => { dynamic d = row as dynamic; Assert.True(d.Col1 == 1 && d.Col2 == "Test1"); }, row => { dynamic d = row as dynamic; Assert.True(d.Col1 == 2 && d.Col2 == "Test2"); }, row => { dynamic d = row as dynamic; Assert.True(d.Col1 == 3 && d.Col2 == "Test3"); }, row => { dynamic d = row as dynamic; Assert.True(d.Col1 == 3 && d.Col2 == "Test3"); } ); }
public void LeaveOpen(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "TransactionSource"); s2c.InsertTestData(); TwoColumnsTableFixture d2c = new TwoColumnsTableFixture(connection, "TransactionDest"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>(connection, "TransactionSource"); DbDestination <MySimpleRow> dest = new DbDestination <MySimpleRow>(connection, "TransactionDest", batchSize: 2); //Act connection.LeaveOpen = true; connection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); source.LinkTo(dest); source.Execute(); dest.Wait(); connection.CommitTransaction(); //Assert Assert.Equal(connection, dest.BulkInsertConnectionManager); //Assert Connections are closed Assert.True(dest.BulkInsertConnectionManager.State == System.Data.ConnectionState.Open); Assert.True(connection.State == System.Data.ConnectionState.Open); Assert.Equal(3, RowCountTask.Count(connection, "TransactionDest")); }
public void WithDeltaDestination(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "DBMergeSource"); s2c.InsertTestData(); s2c.InsertTestDataSet2(); TwoColumnsTableFixture d2c = new TwoColumnsTableFixture(connection, "DBMergeDestination"); d2c.InsertTestDataSet3(); TwoColumnsDeltaTableFixture delta2Columns = new TwoColumnsDeltaTableFixture(connection, "DBMergeDelta"); DbSource <MySimpleRow> source = new DbSource <MySimpleRow>("DBMergeSource", connection); //Act DbMerge <MySimpleRow> merge = new DbMerge <MySimpleRow>(MergeMode.Full, "DBMergeDestination", connection); DbDestination <MySimpleRow> delta = new DbDestination <MySimpleRow>("DBMergeDelta", connection); source.LinkTo(merge); merge.LinkTo(delta); source.Execute(); merge.Wait(); delta.Wait(); //Assert Assert.True(merge.UseTruncateMethod == true); Assert.Equal(6, RowCountTask.Count(connection, "DBMergeDestination", $"{d2c.QB}Col1{d2c.QE} BETWEEN 1 AND 7 AND {d2c.QB}Col2{d2c.QE} LIKE 'Test%'")); Assert.Equal(7, RowCountTask.Count(connection, "DBMergeDelta", $"{d2c.QB}Col1{d2c.QE} BETWEEN 1 AND 10 AND {d2c.QB}Col2{d2c.QE} LIKE 'Test%'")); Assert.Equal(1, RowCountTask.Count(connection, "DBMergeDelta", $"{d2c.QB}ChangeAction{d2c.QE} = 'D' AND {d2c.QB}Col1{d2c.QE} = 10")); Assert.Equal(3, RowCountTask.Count(connection, "DBMergeDelta", $"{d2c.QB}ChangeAction{d2c.QE} = 'U' AND {d2c.QB}Col1{d2c.QE} IN (1,2,4)")); Assert.Equal(3, RowCountTask.Count(connection, "DBMergeDelta", $"{d2c.QB}ChangeAction{d2c.QE} = 'I' AND {d2c.QB}Col1{d2c.QE} IN (3,5,6)")); }
public void DisablingDeletion(IConnectionManager connection) { //Arrange TwoColumnsTableFixture s2c = new TwoColumnsTableFixture(connection, "DBMergeSource"); s2c.InsertTestData(); TwoColumnsTableFixture d2c = new TwoColumnsTableFixture(connection, "DBMergeDestination"); d2c.InsertTestDataSet3(); DbSource <MyMergeRow> source = new DbSource <MyMergeRow>(connection, "DBMergeSource"); //Act DbMerge <MyMergeRow> dest = new DbMerge <MyMergeRow>(connection, "DBMergeDestination"); dest.DeltaMode = DeltaMode.NoDeletions; //dest.DisableDeletion = true; source.LinkTo(dest); source.Execute(); dest.Wait(); //Assert Assert.Equal(5, RowCountTask.Count(connection, "DBMergeDestination")); Assert.True(dest.DeltaTable.Count == 3); Assert.True(dest.DeltaTable.Where(row => row.ChangeAction == "I" && row.Key == 3).Count() == 1); Assert.True(dest.DeltaTable.Where(row => row.ChangeAction == "U" && row.Key == 2).Count() == 1); Assert.True(dest.DeltaTable.Where(row => row.ChangeAction == "E" && row.Key == 1).Count() == 1); }