protected void InternalInsertRight(Program program, IRow oldRow, IRow newRow, BitArray valueFlags, bool uncheckedValue) { switch (PropagateInsertRight) { case PropagateAction.True: RightNode.Insert(program, oldRow, newRow, valueFlags, uncheckedValue); break; case PropagateAction.Ensure: case PropagateAction.Ignore: using (Row rightRow = new Row(program.ValueManager, RightNode.DataType.RowType)) { newRow.CopyTo(rightRow); using (IRow currentRow = RightNode.Select(program, rightRow)) { if (currentRow != null) { if (PropagateInsertRight == PropagateAction.Ensure) { RightNode.Update(program, currentRow, newRow, valueFlags, false, uncheckedValue); } } else { RightNode.Insert(program, oldRow, newRow, valueFlags, uncheckedValue); } } } break; } }