public override void JoinApplicationTransaction(Program program, IRow row) { Schema.RowType rowType = new Schema.RowType(); foreach (Schema.Column column in row.DataType.Columns) { rowType.Columns.Add(column.Copy()); } foreach (Schema.Column column in SourceNode.DataType.Columns) { if (!DataType.Columns.ContainsName(column.Name)) { rowType.Columns.Add(column.Copy()); } } Row localRow = new Row(program.ValueManager, rowType); try { row.CopyTo(localRow); // Get the SourceNode select set for this row, and join on each result foreach (var sourceRow in SourceNode.SelectAll(program, localRow)) { try { base.JoinApplicationTransaction(program, sourceRow); } finally { sourceRow.Dispose(); } } } finally { localRow.Dispose(); } }