Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DataColumnCollection.cs
Go to the documentation of this file.
7
8namespace System.Data;
9
10[DefaultEvent("CollectionChanged")]
11[Editor("Microsoft.VSDesigner.Data.Design.ColumnsCollectionEditor, Microsoft.VSDesigner, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
13{
14 private readonly DataTable _table;
15
16 private readonly ArrayList _list = new ArrayList();
17
18 private int _defaultNameIndex = 1;
19
21
23
24 private bool _fInClear;
25
27
29
31
32 protected override ArrayList List => _list;
33
35
37
39
40 public DataColumn this[int index]
41 {
42 get
43 {
44 try
45 {
46 return (DataColumn)_list[index];
47 }
49 {
51 }
52 }
53 }
54
55 public DataColumn? this[string name]
56 {
57 get
58 {
59 if (name == null)
60 {
61 throw ExceptionBuilder.ArgumentNull("name");
62 }
63 if (!_columnFromName.TryGetValue(name, out var value) || value == null)
64 {
65 int num = IndexOfCaseInsensitive(name);
66 if (0 <= num)
67 {
68 return (DataColumn)_list[num];
69 }
70 if (-2 == num)
71 {
73 }
74 }
75 return value;
76 }
77 }
78
79 internal DataColumn? this[string name, string ns]
80 {
81 get
82 {
83 if (_columnFromName.TryGetValue(name, out var value) && value != null && value.Namespace == ns)
84 {
85 return value;
86 }
87 return null;
88 }
89 }
90
91 public event CollectionChangeEventHandler? CollectionChanged;
92
93 internal event CollectionChangeEventHandler? CollectionChanging;
94
95 internal event CollectionChangeEventHandler? ColumnPropertyChanged;
96
98 {
99 _table = table;
101 }
102
104 {
106 {
107 _list.Capacity = capacity + _list.Count;
108 }
109 }
110
111 public void Add(DataColumn column)
112 {
113 AddAt(-1, column);
114 }
115
116 internal void AddAt(int index, DataColumn column)
117 {
118 if (column != null && column.ColumnMapping == MappingType.SimpleContent)
119 {
120 if (_table.XmlText != null && _table.XmlText != column)
121 {
123 }
125 {
126 throw ExceptionBuilder.CannotAddColumn4(column.ColumnName);
127 }
130 if (index != -1)
131 {
133 }
134 else
135 {
137 }
138 _table.XmlText = column;
139 }
140 else
141 {
144 if (index != -1)
145 {
147 }
148 else
149 {
151 }
152 if (column.ColumnMapping == MappingType.Element)
153 {
155 }
156 }
157 if (!_table.fInitInProgress && column != null && column.Computed)
158 {
159 column.CopyExpressionFrom(column);
160 }
162 }
163
165 {
167 {
169 }
170 else
171 {
172 if (columns == null)
173 {
174 return;
175 }
176 foreach (DataColumn dataColumn in columns)
177 {
178 if (dataColumn != null)
179 {
181 }
182 }
183 }
184 }
185
186 [RequiresUnreferencedCode("Members might be trimmed for some data types or expressions.")]
193
200
201 public DataColumn Add(string? columnName)
202 {
205 return dataColumn;
206 }
207
209 {
212 return dataColumn;
213 }
214
216 {
218 column.SetOrdinalInternal(_list.Count - 1);
220 }
221
222 private void ArrayAdd(int index, DataColumn column)
223 {
226 }
227
229 {
230 column.SetOrdinalInternal(-1);
232 int count = _list.Count;
233 for (int i = 0; i < count; i++)
234 {
235 ((DataColumn)_list[i]).SetOrdinalInternal(i);
236 }
237 if (column.ImplementsIChangeTracking)
238 {
240 }
241 }
242
243 internal string AssignName()
244 {
245 string text = MakeName(_defaultNameIndex++);
247 {
249 }
250 return text;
251 }
252
253 private void BaseAdd([NotNull] DataColumn column)
254 {
255 if (column == null)
256 {
257 throw ExceptionBuilder.ArgumentNull("column");
258 }
259 if (column._table == _table)
260 {
261 throw ExceptionBuilder.CannotAddColumn1(column.ColumnName);
262 }
263 if (column._table != null)
264 {
265 throw ExceptionBuilder.CannotAddColumn2(column.ColumnName);
266 }
267 if (column.ColumnName.Length == 0)
268 {
269 column.ColumnName = AssignName();
270 }
271 RegisterColumnName(column.ColumnName, column);
272 try
273 {
274 column.SetTable(_table);
275 if (!_table.fInitInProgress && column.Computed && column.DataExpression.DependsOn(column))
276 {
278 }
279 if (0 < _table.RecordCapacity)
280 {
281 column.SetCapacity(_table.RecordCapacity);
282 }
283 for (int i = 0; i < _table.RecordCapacity; i++)
284 {
285 column.InitializeRecord(i);
286 }
287 if (_table.DataSet != null)
288 {
289 column.OnSetDataSet();
290 }
291 }
293 {
294 UnregisterName(column.ColumnName);
295 throw;
296 }
297 }
298
300 {
301 int num = 0;
302 for (int i = 0; i < oldLength; i++)
303 {
304 bool flag = false;
305 for (int j = num; j < newLength; j++)
306 {
307 if (oldArray[i] == newArray[j])
308 {
309 if (num == j)
310 {
311 num++;
312 }
313 flag = true;
314 break;
315 }
316 }
317 if (!flag && oldArray[i].Table == _table)
318 {
321 oldArray[i].SetOrdinalInternal(-1);
322 }
323 }
324 for (int k = 0; k < newLength; k++)
325 {
326 if (newArray[k].Table != _table)
327 {
330 }
331 newArray[k].SetOrdinalInternal(k);
332 }
333 }
334
336 {
337 if (!CanRemove(column, fThrowException: true))
338 {
339 return;
340 }
341 if (column._errors > 0)
342 {
343 for (int i = 0; i < _table.Rows.Count; i++)
344 {
345 _table.Rows[i].ClearError(column);
346 }
347 }
348 UnregisterName(column.ColumnName);
349 column.SetTable(null);
350 }
351
353 {
354 return CanRemove(column, fThrowException: false);
355 }
356
358 {
359 if (column == null)
360 {
361 if (!fThrowException)
362 {
363 return false;
364 }
365 throw ExceptionBuilder.ArgumentNull("column");
366 }
367 if (column._table != _table)
368 {
369 if (!fThrowException)
370 {
371 return false;
372 }
374 }
377 {
378 if (!fThrowException)
379 {
380 return false;
381 }
383 }
384 for (int i = 0; i < _table.ParentRelations.Count; i++)
385 {
386 if (_table.ParentRelations[i].ChildKey.ContainsColumn(column))
387 {
388 if (!fThrowException)
389 {
390 return false;
391 }
393 }
394 }
395 for (int j = 0; j < _table.ChildRelations.Count; j++)
396 {
397 if (_table.ChildRelations[j].ParentKey.ContainsColumn(column))
398 {
399 if (!fThrowException)
400 {
401 return false;
402 }
404 }
405 }
406 for (int k = 0; k < _table.Constraints.Count; k++)
407 {
408 if (_table.Constraints[k].ContainsColumn(column))
409 {
410 if (!fThrowException)
411 {
412 return false;
413 }
415 }
416 }
417 if (_table.DataSet != null)
418 {
421 {
422 Constraint constraint = parentForeignKeyConstraintEnumerator.GetConstraint();
423 if (((ForeignKeyConstraint)constraint).ParentKey.ContainsColumn(column))
424 {
425 if (!fThrowException)
426 {
427 return false;
428 }
430 }
431 }
432 }
433 if (column._dependentColumns != null)
434 {
435 for (int l = 0; l < column._dependentColumns.Count; l++)
436 {
437 DataColumn dataColumn = column._dependentColumns[l];
438 if ((_fInClear && (dataColumn.Table == _table || dataColumn.Table == null)) || dataColumn.Table == null)
439 {
440 continue;
441 }
443 if (dataExpression != null && dataExpression.DependsOn(column))
444 {
445 if (!fThrowException)
446 {
447 return false;
448 }
449 throw ExceptionBuilder.CannotRemoveExpression(dataColumn.ColumnName, dataColumn.Expression);
450 }
451 }
452 }
453 foreach (Index liveIndex in _table.LiveIndexes)
454 {
455 }
456 return true;
457 }
458
460 {
461 if (column.ImplementsIRevertibleChangeTracking)
462 {
466 }
467 else if (column.ImplementsIChangeTracking)
468 {
471 }
472 }
473
474 public void Clear()
475 {
476 int count = _list.Count;
478 _list.CopyTo(array, 0);
481 {
483 }
484 try
485 {
486 _fInClear = true;
488 _fInClear = false;
489 }
491 {
492 _fInClear = false;
494 _list.Clear();
495 for (int i = 0; i < count; i++)
496 {
497 _list.Add(array[i]);
498 }
499 throw;
500 }
501 _list.Clear();
502 _table.ElementColumnCount = 0;
504 }
505
506 public bool Contains(string name)
507 {
508 if (_columnFromName.TryGetValue(name, out var value) && value != null)
509 {
510 return true;
511 }
512 return IndexOfCaseInsensitive(name) >= 0;
513 }
514
515 internal bool Contains(string name, bool caseSensitive)
516 {
517 if (_columnFromName.TryGetValue(name, out var value) && value != null)
518 {
519 return true;
520 }
521 if (!caseSensitive)
522 {
523 return IndexOfCaseInsensitive(name) >= 0;
524 }
525 return false;
526 }
527
528 public void CopyTo(DataColumn[] array, int index)
529 {
530 if (array == null)
531 {
532 throw ExceptionBuilder.ArgumentNull("array");
533 }
534 if (index < 0)
535 {
537 }
538 if (array.Length - index < _list.Count)
539 {
541 }
542 for (int i = 0; i < _list.Count; i++)
543 {
544 array[index + i] = (DataColumn)_list[i];
545 }
546 }
547
549 {
550 int count = _list.Count;
551 for (int i = 0; i < count; i++)
552 {
553 if (column == (DataColumn)_list[i])
554 {
555 return i;
556 }
557 }
558 return -1;
559 }
560
561 public int IndexOf(string? columnName)
562 {
563 if (columnName != null && 0 < columnName.Length)
564 {
565 int count = Count;
567 {
569 if (num >= 0)
570 {
571 return num;
572 }
573 return -1;
574 }
575 for (int i = 0; i < count; i++)
576 {
577 if (value == _list[i])
578 {
579 return i;
580 }
581 }
582 }
583 return -1;
584 }
585
586 internal int IndexOfCaseInsensitive(string name)
587 {
589 int num = -1;
590 DataColumn dataColumn = null;
591 for (int i = 0; i < Count; i++)
592 {
594 if ((specialHashCode == 0 || dataColumn._hashCode == 0 || dataColumn._hashCode == specialHashCode) && NamesEqual(dataColumn.ColumnName, name, fCaseSensitive: false, _table.Locale) != 0)
595 {
596 if (num != -1)
597 {
598 return -2;
599 }
600 num = i;
601 }
602 }
603 return num;
604 }
605
606 internal void FinishInitCollection()
607 {
608 if (_delayedAddRangeColumns == null)
609 {
610 return;
611 }
614 {
615 if (dataColumn != null)
616 {
618 }
619 }
621 for (int j = 0; j < delayedAddRangeColumns2.Length; j++)
622 {
623 delayedAddRangeColumns2[j]?.FinishInitInProgress();
624 }
626 }
627
628 private string MakeName(int index)
629 {
630 if (index != 1)
631 {
632 return "Column" + index.ToString(CultureInfo.InvariantCulture);
633 }
634 return "Column1";
635 }
636
638 {
639 if (0 > newPosition || newPosition > Count - 1)
640 {
642 }
643 if (column.ImplementsIChangeTracking)
644 {
646 }
649 int count = _list.Count;
650 for (int i = 0; i < count; i++)
651 {
652 ((DataColumn)_list[i]).SetOrdinalInternal(i);
653 }
656 }
657
659 {
661 this.CollectionChanged?.Invoke(this, ccevent);
662 }
663
665 {
666 this.CollectionChanging?.Invoke(this, ccevent);
667 }
668
670 {
672 this.ColumnPropertyChanged?.Invoke(this, ccevent);
673 }
674
675 internal void RegisterColumnName(string name, DataColumn column)
676 {
677 try
678 {
680 if (column != null)
681 {
682 column._hashCode = _table.GetSpecialHashCode(name);
683 }
684 }
685 catch (ArgumentException)
686 {
687 if (_columnFromName[name] != null)
688 {
689 if (column != null)
690 {
692 }
694 }
696 }
697 if (column == null && NamesEqual(name, MakeName(_defaultNameIndex), fCaseSensitive: true, _table.Locale) != 0)
698 {
699 do
700 {
702 }
704 }
705 }
706
707 internal bool CanRegisterName(string name)
708 {
709 return !_columnFromName.ContainsKey(name);
710 }
711
723
724 public void RemoveAt(int index)
725 {
727 if (dataColumn == null)
728 {
730 }
732 }
733
734 public void Remove(string name)
735 {
736 DataColumn dataColumn = this[name];
737 if (dataColumn == null)
738 {
740 }
742 }
743
744 internal void UnregisterName(string name)
745 {
748 {
749 do
750 {
752 }
754 }
755 }
756
765
767 {
769 DataColumn[] array = new DataColumn[columnsImplementingIChangeTracking.Length - 1];
770 int i = 0;
771 int num = 0;
772 for (; i < columnsImplementingIChangeTracking.Length; i++)
773 {
775 {
777 }
778 }
780 }
781}
virtual void Remove(object? obj)
virtual int Add(object? value)
virtual void CopyTo(Array array)
virtual void Insert(int index, object? value)
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void CopyTo(KeyValuePair< TKey, TValue >[] array, int index)
void Add(TKey key, TValue value)
static bool IsCatchableOrSecurityExceptionType(Exception e)
Definition ADP.cs:800
virtual string ConstraintName
Definition Constraint.cs:24
readonly Dictionary< string, DataColumn > _columnFromName
void CheckIChangeTracking(DataColumn column)
void MoveTo(DataColumn column, int newPosition)
DataColumn Add(string? columnName, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields|DynamicallyAccessedMemberTypes.PublicProperties)] Type type, string expression)
DataColumn Add(string? columnName, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields|DynamicallyAccessedMemberTypes.PublicProperties)] Type type)
bool Contains(string name, bool caseSensitive)
void CopyTo(DataColumn[] array, int index)
CollectionChangeEventHandler? ColumnPropertyChanged
void BaseGroupSwitch(DataColumn[] oldArray, int oldLength, DataColumn[] newArray, int newLength)
void OnCollectionChanging(CollectionChangeEventArgs ccevent)
void AddRange(DataColumn[] columns)
CollectionChangeEventHandler? CollectionChanged
void OnColumnPropertyChanged(CollectionChangeEventArgs ccevent)
CollectionChangeEventHandler? CollectionChanging
void AddAt(int index, DataColumn column)
void RegisterColumnName(string name, DataColumn column)
DataColumn Add(string? columnName)
void ArrayAdd(int index, DataColumn column)
void BaseAdd([NotNull] DataColumn column)
bool CanRemove(DataColumn column, bool fThrowException)
void AddColumnsImplementingIChangeTrackingList(DataColumn dataColumn)
void OnCollectionChanged(CollectionChangeEventArgs ccevent)
void RemoveColumnsImplementingIChangeTrackingList(DataColumn dataColumn)
void OnRemoveColumnInternal(DataColumn column)
int GetSpecialHashCode(string name)
DataRowCollection Rows
Definition DataTable.cs:701
UniqueConstraint _primaryKey
Definition DataTable.cs:124
DataColumn? XmlText
Definition DataTable.cs:855
void UpdatePropertyDescriptorCollectionCache()
ConstraintCollection Constraints
Definition DataTable.cs:332
DataRelationCollection ParentRelations
Definition DataTable.cs:572
DataRelationCollection ChildRelations
Definition DataTable.cs:324
List< Index > LiveIndexes
Definition DataTable.cs:269
static Exception ColumnOutOfRange(int index)
static Exception CannotRemovePrimaryKey()
static Exception CannotRemoveColumn()
static Exception CannotAddDuplicate2(string table)
static Exception CannotRemoveChildKey(string relation)
static Exception CaseInsensitiveNameConflict(string name)
static Exception CannotRemoveConstraint(string constraint, string table)
static Exception ExpressionCircular()
static Exception CannotAddDuplicate(string column)
static Exception CannotAddColumn1(string column)
static Exception CannotAddDuplicate3(string table)
static Exception ArgumentOutOfRange(string paramName)
static Exception CannotRemoveExpression(string column, string expression)
static Exception CannotAddColumn2(string column)
static Exception ColumnNotInTheTable(string column, string table)
static Exception InvalidOffsetLength()
static Exception CannotAddColumn3()
static Exception CannotAddColumn4(string column)
static Exception InvalidOrdinal(string name, int ordinal)
static Exception ArgumentNull(string paramName)
static readonly CollectionChangeEventArgs s_refreshEventArgs
int NamesEqual(string s1, string s2, bool fCaseSensitive, CultureInfo locale)
static CultureInfo InvariantCulture
bool ContainsColumn(DataColumn column)
Definition DataKey.cs:117