private void PerformInsert(Program program, TableNode tableNode, IRow oldRow, IRow newRow, BitArray valueFlags, bool uncheckedValue) { switch (PropagateInsert) { case PropagateAction.True: tableNode.Insert(program, oldRow, newRow, valueFlags, uncheckedValue); break; case PropagateAction.Ensure: case PropagateAction.Ignore: using (Row sourceRow = new Row(program.ValueManager, tableNode.DataType.RowType)) { newRow.CopyTo(sourceRow); using (IRow currentRow = tableNode.Select(program, sourceRow)) { if (currentRow != null) { if (PropagateInsert == PropagateAction.Ensure) { tableNode.Update(program, currentRow, newRow, valueFlags, false, uncheckedValue); } } else { tableNode.Insert(program, oldRow, newRow, valueFlags, uncheckedValue); } } } break; } }