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"); }