public void CircularReferenceBreaker_Test() { XmlConfigurator.Configure(); var breaker = new CircularReferenceBreaker(); Assert.IsFalse(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Push<object, object, object>(this.TestMethod); Assert.IsTrue(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Push<object, object, object>(this.TestMethod); Assert.IsTrue(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Pop(); Assert.IsTrue(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Pop(); Assert.IsFalse(breaker.IsVisited<object, object, object>(this.TestMethod)); }
public void WritePrimaryKeyOperations_Test() { // Arrange var primaryKeyOperations = new[] { new Mock<InsertRecord>(this.insertRecordService, null, this.peers, null), new Mock<InsertRecord>(this.insertRecordService, null, this.peers, null), }; // Act var breaker = new CircularReferenceBreaker(); var currentOrder = new Counter(); var orderedOperations = new AbstractRepositoryOperation[0]; this.insertRecordService.WritePrimaryKeyOperations(this.writerMock.Object, primaryKeyOperations.Select(m => m.Object), breaker, currentOrder, orderedOperations); // Assert primaryKeyOperations.ToList() .ForEach( o => o.Verify(m => m.Write(breaker, this.writerMock.Object, currentOrder, orderedOperations), Times.Once)); }
private void TestMethod(CircularReferenceBreaker breaker, object arg1, object arg2, object arg3) { }
public override void Write(CircularReferenceBreaker breaker, IWritePrimitives writer, Counter order, AbstractRepositoryOperation[] orderedOperations) { InsertRecord.Logger.Debug("Entering Write:" + this); InsertRecord.Logger.Debug($"breaker: {breaker}"); if (breaker.IsVisited<IWritePrimitives, Counter, AbstractRepositoryOperation[]>(this.Write)) { InsertRecord.Logger.Debug("Write already visited. Exiting"); return; } if (this.IsWriteDone) { InsertRecord.Logger.Debug("Write already done. Exiting"); return; } breaker.Push<IWritePrimitives, Counter, AbstractRepositoryOperation[]>(this.Write); this.primaryKeyOperations = this.service.GetPrimaryKeyOperations(this.Peers).ToList(); this.service.WritePrimaryKeyOperations(writer, this.primaryKeyOperations, breaker, order, orderedOperations); Columns columnData = this.GetColumnData(writer); this.Order = order.Value++; InsertRecord.Logger.Debug($"this.Order: {this.Order}"); orderedOperations[this.Order] = this; TableName tableName = Helper.GetTableName(this.RecordReference.RecordType, this.attributeDecorator); this.service.WritePrimitives(writer, tableName.CatalogueName, tableName.Schema, tableName.Name, columnData.AllColumns, this.primaryKeyValues); this.service.CopyPrimaryToForeignKeyColumns(columnData.ForeignKeyColumns); this.IsWriteDone = true; breaker.Pop(); InsertRecord.Logger.Debug("Exiting Write"); }
public virtual void WritePrimaryKeyOperations(IWritePrimitives writer, IEnumerable<AbstractRepositoryOperation> primaryKeyOperations, CircularReferenceBreaker breaker, Counter order, AbstractRepositoryOperation[] orderedOperations) { InsertRecordService.Logger.Debug("Entering WritePrimaryKeyOperations"); primaryKeyOperations = primaryKeyOperations.ToList(); InsertRecordService.Logger.Debug($"primaryKeyOperations: {primaryKeyOperations.GetRecordTypesString()}"); InsertRecordService.Logger.Debug($"order: {order.Value}"); InsertRecordService.Logger.Debug($"orderedOperations: {orderedOperations.GetRecordTypesString()}"); primaryKeyOperations.ToList().ForEach(o => o.Write(breaker, writer, order, orderedOperations)); InsertRecordService.Logger.Debug("Exiting WritePrimaryKeyOperations"); }
public abstract void Write(CircularReferenceBreaker breaker, IWritePrimitives writer, Counter order, AbstractRepositoryOperation[] orderedOperations);