Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CascadeDelete()

void System.Data.ForeignKeyConstraint.CascadeDelete ( DataRow row)
inlinepackage

Definition at line 306 of file ForeignKeyConstraint.cs.

307 {
308 if (-1 == row._newRecord)
309 {
310 return;
311 }
312 object[] keyValues = row.GetKeyValues(_parentKey, DataRowVersion.Current);
313 if (IsKeyNull(keyValues))
314 {
315 return;
316 }
317 Index sortIndex = _childKey.GetSortIndex();
318 switch (DeleteRule)
319 {
320 case Rule.None:
321 if (row.Table.DataSet.EnforceConstraints)
322 {
323 Range range2 = sortIndex.FindRecords(keyValues);
324 if (!range2.IsNull && (range2.Count != 1 || sortIndex.GetRow(range2.Min) != row))
325 {
326 throw ExceptionBuilder.FailedCascadeDelete(ConstraintName);
327 }
328 }
329 break;
330 case Rule.Cascade:
331 {
332 object[] keyValues2 = row.GetKeyValues(_parentKey, DataRowVersion.Default);
333 Range range4 = sortIndex.FindRecords(keyValues2);
334 if (range4.IsNull)
335 {
336 break;
337 }
338 DataRow[] rows3 = sortIndex.GetRows(range4);
339 foreach (DataRow dataRow in rows3)
340 {
341 if (!dataRow._inCascade)
342 {
343 dataRow.Table.DeleteRow(dataRow);
344 }
345 }
346 break;
347 }
348 case Rule.SetNull:
349 {
350 object[] array2 = new object[_childKey.ColumnsReference.Length];
351 for (int k = 0; k < _childKey.ColumnsReference.Length; k++)
352 {
353 array2[k] = DBNull.Value;
354 }
355 Range range3 = sortIndex.FindRecords(keyValues);
356 if (range3.IsNull)
357 {
358 break;
359 }
360 DataRow[] rows2 = sortIndex.GetRows(range3);
361 for (int l = 0; l < rows2.Length; l++)
362 {
363 if (row != rows2[l])
364 {
365 rows2[l].SetKeyValues(_childKey, array2);
366 }
367 }
368 break;
369 }
370 case Rule.SetDefault:
371 {
372 object[] array = new object[_childKey.ColumnsReference.Length];
373 for (int i = 0; i < _childKey.ColumnsReference.Length; i++)
374 {
376 }
377 Range range = sortIndex.FindRecords(keyValues);
378 if (range.IsNull)
379 {
380 break;
381 }
382 DataRow[] rows = sortIndex.GetRows(range);
383 for (int j = 0; j < rows.Length; j++)
384 {
385 if (row != rows[j])
386 {
387 rows[j].SetKeyValues(_childKey, array);
388 }
389 }
390 break;
391 }
392 }
393 }
virtual string ConstraintName
Definition Constraint.cs:24
Index GetSortIndex()
Definition DataKey.cs:184
DataColumn[] ColumnsReference
Definition DataKey.cs:7

References System.Data.ForeignKeyConstraint._childKey, System.Data.DataRow._inCascade, System.Data.DataRow._newRecord, System.Data.ForeignKeyConstraint._parentKey, System.array, System.Data.DataKey.ColumnsReference, System.Data.Constraint.ConstraintName, System.Data.Range.Count, System.Data.DataTable.DataSet, System.Data.DataColumn.DefaultValue, System.Data.DataTable.DeleteRow(), System.Data.ForeignKeyConstraint.DeleteRule, System.Data.DataSet.EnforceConstraints, System.Data.ExceptionBuilder.FailedCascadeDelete(), System.Data.Index.FindRecords(), System.Data.DataRow.GetKeyValues(), System.Data.Index.GetRow(), System.Data.Index.GetRows(), System.Data.DataKey.GetSortIndex(), System.Data.ForeignKeyConstraint.IsKeyNull(), System.Data.Range.IsNull, System.Data.Range.Min, System.Data.DataRow.SetKeyValues(), System.Data.DataRow.Table, and System.DBNull.Value.

Referenced by System.Data.ForeignKeyConstraint.CheckCascade().