Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlDataDocument.cs
Go to the documentation of this file.
4using System.Data;
7using System.IO;
9
10namespace System.Xml;
11
12[Obsolete("XmlDataDocument has been deprecated and is not supported.")]
14{
16
18
20
21 private int _countAddPointer;
22
24
26
27 private bool _fBoundToDataSet;
28
29 private bool _fBoundToDocument;
30
32
33 private bool _ignoreXmlEvents;
34
36
37 private bool _isFoliationEnabled;
38
39 private bool _optimizeStorage;
40
42
43 private bool _fAssociateDataRow;
44
45 private object _foliationLock;
46
47 private bool _bForceExpandEntity;
48
50
51 internal bool _bLoadFromDataSet;
52
53 internal bool _bHasXSINIL;
54
56 {
57 get
58 {
60 }
61 set
62 {
64 }
65 }
66
68
69 internal bool IgnoreXmlEvents
70 {
71 get
72 {
73 return _ignoreXmlEvents;
74 }
75 set
76 {
78 }
79 }
80
81 internal bool IgnoreDataSetEvents
82 {
83 get
84 {
86 }
87 set
88 {
90 }
91 }
92
93 internal bool IsFoliationEnabled
94 {
95 get
96 {
98 }
99 set
100 {
102 }
103 }
104
106
108 {
110 {
112 if (_countAddPointer >= 5)
113 {
116 {
118 if (!xmlDataVirtualNode.IsInUse())
119 {
121 }
122 }
123 for (int i = 0; i < arrayList.Count; i++)
124 {
126 }
128 }
130 }
131 }
132
133 [MemberNotNull("_dataSet")]
134 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
136 {
137 if (ds.FBoundToDocument)
138 {
140 }
141 ds.FBoundToDocument = true;
142 _dataSet = ds;
144 }
145
146 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
148 {
150 {
151 if (row != null && xmlBoundElement.ElementState == ElementState.Defoliated)
152 {
153 return;
154 }
155 if (row != null)
156 {
160 if (parentRow != null)
161 {
163 }
164 if (fAddRowsToTable && row.RowState == DataRowState.Detached)
165 {
166 row.Table.Rows.Add(row);
167 }
168 parentRow = row;
169 }
170 }
171 for (XmlNode xmlNode = node.FirstChild; xmlNode != null; xmlNode = xmlNode.NextSibling)
172 {
174 }
175 }
176
177 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
178 internal void SyncTree(XmlNode node)
179 {
182 DataRow parentRow = null;
183 bool flag = IsConnected(node);
184 if (rowElem != null)
185 {
186 DataRow row = rowElem.Row;
187 if (row != null && rowElem.ElementState == ElementState.Defoliated)
188 {
189 return;
190 }
191 if (row != null)
192 {
194 if (node == rowElem)
195 {
196 rowElem.ElementState = ElementState.WeakFoliation;
198 }
199 if (flag && row.RowState == DataRowState.Detached)
200 {
201 row.Table.Rows.Add(row);
202 }
203 parentRow = row;
204 }
205 }
206 for (XmlNode xmlNode = node.FirstChild; xmlNode != null; xmlNode = xmlNode.NextSibling)
207 {
208 SyncRows(parentRow, xmlNode, flag);
209 }
210 }
211
212 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
213 private void BindForLoad()
214 {
217 if (_dataSet.Tables.Count > 0)
218 {
220 }
222 _ignoreDataSetEvents = false;
223 }
224
225 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
226 private void Bind(bool fLoadFromDataSet)
227 {
229 _ignoreXmlEvents = true;
231 if (base.DocumentElement != null)
232 {
235 }
236 else if (fLoadFromDataSet)
237 {
238 _bLoadFromDataSet = true;
241 }
242 _ignoreDataSetEvents = false;
243 _ignoreXmlEvents = false;
244 }
245
246 internal void Bind(DataRow r, XmlBoundElement e)
247 {
248 r.Element = e;
249 e.Row = r;
250 }
251
252 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
258
259 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
265
266 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
267 private void BindListeners()
268 {
271 }
272
273 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
302
303 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
317
318 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
333
334 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "This whole class is unsafe. Constructors are marked as such.")]
335 public override XmlElement CreateElement(string? prefix, string localName, string? namespaceURI)
336 {
337 if (prefix == null)
338 {
339 prefix = string.Empty;
340 }
341 if (namespaceURI == null)
342 {
343 namespaceURI = string.Empty;
344 }
346 {
347 return new XmlBoundElement(prefix, localName, namespaceURI, this);
348 }
351 if (dataTable != null)
352 {
353 DataRow dataRow = dataTable.CreateEmptyRow();
354 foreach (DataColumn column in dataTable.Columns)
355 {
356 if (column.ColumnMapping != MappingType.Hidden)
357 {
359 }
360 }
361 XmlBoundElement element = dataRow.Element;
363 return element;
364 }
365 return new XmlBoundElement(prefix, localName, namespaceURI, this);
366 }
367
372
374 {
375 if (!_optimizeStorage || rowElem.ElementState != ElementState.WeakFoliation || !_mapper.IsRegionRadical(rowElem))
376 {
377 return;
378 }
380 IgnoreXmlEvents = true;
382 try
383 {
384 rowElem.RemoveAllAttributes();
385 XmlNode xmlNode = rowElem.FirstChild;
386 while (xmlNode != null)
387 {
388 XmlNode nextSibling = xmlNode.NextSibling;
389 if (xmlNode is XmlBoundElement { Row: not null })
390 {
391 break;
392 }
393 rowElem.RemoveChild(xmlNode);
395 }
397 }
398 finally
399 {
401 }
402 }
403
404 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
406 {
407 XmlElement xmlElement = base.DocumentElement;
408 if (xmlElement == null)
409 {
411 if (text == null || text.Length == 0)
412 {
413 text = "Xml";
414 }
415 string text2 = DataSet.Namespace;
416 if (text2 == null)
417 {
418 text2 = string.Empty;
419 }
420 xmlElement = new XmlBoundElement(string.Empty, text, text2, this);
422 }
423 return xmlElement;
424 }
425
426 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
428 {
429 XmlElement documentElement = base.DocumentElement;
430 if (documentElement == null)
431 {
432 return EnsureDocumentElement();
433 }
435 if (rowFromElement == null)
436 {
437 return documentElement;
438 }
439 return DemoteDocumentElement();
440 }
441
442 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
451
452 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
453 private void EnsurePopulatedMode()
454 {
456 {
460 _fAssociateDataRow = true;
461 }
462 }
463
465 {
467 {
468 DataRow[] childRows = row.GetChildRows(nestedChildRelation);
469 foreach (DataRow dataRow in childRows)
470 {
471 XmlElement element = dataRow.Element;
472 if (element != null && element.ParentNode != rowElement)
473 {
474 element.ParentNode.RemoveChild(element);
475 rowElement.AppendChild(element);
476 }
477 }
478 }
479 }
480
481 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
483 {
485 {
486 if (node.ElementState == ElementState.Defoliated)
487 {
489 }
490 else if (node.ElementState == ElementState.WeakFoliation && newState == ElementState.StrongFoliation)
491 {
493 }
494 }
495 }
496
497 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
498 private void Foliate(XmlElement element)
499 {
500 if (element is XmlBoundElement)
501 {
502 ((XmlBoundElement)element).Foliate(ElementState.WeakFoliation);
503 }
504 }
505
506 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
508 {
510 {
512 IsFoliationEnabled = true;
513 try
514 {
516 }
517 finally
518 {
520 }
521 }
522 }
523
524 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
526 {
527 if (!rowElem.IsFoliated)
528 {
530 }
531 }
532
533 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
535 {
537 {
538 if (node.ElementState != ElementState.Defoliated)
539 {
540 return;
541 }
544 IgnoreXmlEvents = true;
545 try
546 {
547 XmlNode xmlNode = null;
548 DataRow row = node.Row;
549 DataRowVersion version = ((row.RowState == DataRowState.Detached) ? DataRowVersion.Proposed : DataRowVersion.Current);
550 foreach (DataColumn column in row.Table.Columns)
551 {
552 if (IsNotMapped(column))
553 {
554 continue;
555 }
556 object value = row[column, version];
557 if (!Convert.IsDBNull(value))
558 {
559 if (column.ColumnMapping == MappingType.Attribute)
560 {
561 node.SetAttribute(column.EncodedColumnName, column.Namespace, column.ConvertObjectToXml(value));
562 continue;
563 }
564 XmlNode xmlNode2 = null;
565 if (column.ColumnMapping == MappingType.Element)
566 {
567 xmlNode2 = new XmlBoundElement(string.Empty, column.EncodedColumnName, column.Namespace, this);
568 xmlNode2.AppendChild(CreateTextNode(column.ConvertObjectToXml(value)));
569 if (xmlNode != null)
570 {
571 node.InsertAfter(xmlNode2, xmlNode);
572 }
573 else if (node.FirstChild != null)
574 {
575 node.InsertBefore(xmlNode2, node.FirstChild);
576 }
577 else
578 {
579 node.AppendChild(xmlNode2);
580 }
582 }
583 else
584 {
585 xmlNode2 = CreateTextNode(column.ConvertObjectToXml(value));
586 if (node.FirstChild != null)
587 {
588 node.InsertBefore(xmlNode2, node.FirstChild);
589 }
590 else
591 {
592 node.AppendChild(xmlNode2);
593 }
594 if (xmlNode == null)
595 {
597 }
598 }
599 }
600 else if (column.ColumnMapping == MappingType.SimpleContent)
601 {
602 XmlAttribute xmlAttribute = CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance");
603 xmlAttribute.Value = "true";
604 node.SetAttributeNode(xmlAttribute);
605 _bHasXSINIL = true;
606 }
607 }
608 }
609 finally
610 {
613 }
615 }
616 }
617
619 {
620 XmlNode result = null;
621 XmlNode xmlNode = null;
622 if (IsTextOnly(col))
623 {
624 return null;
625 }
626 xmlNode = rowElement.FirstChild;
627 while (xmlNode != null && IsTextLikeNode(xmlNode))
628 {
629 result = xmlNode;
630 xmlNode = xmlNode.NextSibling;
631 }
632 while (xmlNode != null && xmlNode.NodeType == XmlNodeType.Element)
633 {
635 if (_mapper.GetRowFromElement(e) != null)
636 {
637 break;
638 }
641 {
642 break;
643 }
644 result = xmlNode;
645 xmlNode = xmlNode.NextSibling;
646 }
647 return result;
648 }
649
651 {
653 foreach (DataRelation childRelation in row.Table.ChildRelations)
654 {
655 if (childRelation.Nested)
656 {
658 }
659 }
660 return arrayList;
661 }
662
664 {
666 if (nestedParentRelation != null)
667 {
668 return row.GetParentRow(nestedParentRelation);
669 }
670 return null;
671 }
672
674 {
675 DataRelation[] nestedParentRelations = row.Table.NestedParentRelations;
676 if (nestedParentRelations.Length == 0)
677 {
678 return null;
679 }
680 return nestedParentRelations[0];
681 }
682
684 {
685 return row.Table.XmlText;
686 }
687
689 {
690 return _mapper.GetRowFromElement(e);
691 }
692
694 {
696 int num = 0;
697 for (num = 0; num < row.Table.Rows.Count && row != row.Table.Rows[num]; num++)
698 {
699 }
700 int num2 = num;
702 for (num = num2 + 1; num < row.Table.Rows.Count; num++)
703 {
704 dataRow = row.Table.Rows[num];
706 {
707 break;
708 }
709 }
710 if (num < row.Table.Rows.Count)
711 {
713 }
714 return null;
715 }
716
718 {
719 return r.Element;
720 }
721
722 internal bool HasPointers(XmlNode node)
723 {
724 while (true)
725 {
726 try
727 {
728 if (_pointers.Count > 0)
729 {
730 object obj = null;
732 {
733 obj = pointer.Value;
734 if (((IXmlDataVirtualNode)obj).IsOnNode(node))
735 {
736 return true;
737 }
738 }
739 }
740 return false;
741 }
743 {
744 }
745 }
746 }
747
748 private bool IsFoliated(XmlElement element)
749 {
750 if (element is XmlBoundElement)
751 {
752 return ((XmlBoundElement)element).IsFoliated;
753 }
754 return true;
755 }
756
758 {
759 return be.IsFoliated;
760 }
761
762 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
789
790 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
792 {
795 try
796 {
797 dataPointer.AddPointer();
798 if (xmlNode.NodeType == XmlNodeType.Element)
799 {
800 int attributeCount = dataPointer.AttributeCount;
801 for (int i = 0; i < attributeCount; i++)
802 {
803 dataPointer.MoveToOwnerElement();
804 if (dataPointer.MoveToAttribute(i))
805 {
807 }
808 }
809 dataPointer.MoveTo(other);
810 }
811 bool flag = dataPointer.MoveToFirstChild();
812 while (flag)
813 {
815 flag = dataPointer.MoveToNextSibling();
816 }
817 return xmlNode;
818 }
819 finally
820 {
821 dataPointer.SetNoLongerUse();
822 }
823 }
824
825 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "This whole class is unsafe. Constructors are marked as such.")]
826 public override XmlNode CloneNode(bool deep)
827 {
831 if (deep)
832 {
833 DataPointer dataPointer = new DataPointer(this, this);
834 try
835 {
836 dataPointer.AddPointer();
837 bool flag = dataPointer.MoveToFirstChild();
838 while (flag)
839 {
841 xmlDataDocument.AppendChild(newChild);
842 flag = dataPointer.MoveToNextSibling();
843 }
844 }
845 finally
846 {
847 dataPointer.SetNoLongerUse();
848 }
849 }
850 return xmlDataDocument;
851 }
852
853 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
855 {
856 return dp.NodeType switch
857 {
859 XmlNodeType.DocumentType => CreateDocumentType(dp.Name, dp.PublicId, dp.SystemId, dp.InternalSubset),
860 XmlNodeType.XmlDeclaration => CreateXmlDeclaration(dp.Version, dp.Encoding, dp.Standalone),
867 XmlNodeType.Element => CreateElement(dp.Prefix, dp.LocalName, dp.NamespaceURI),
868 XmlNodeType.Attribute => CreateAttribute(dp.Prefix, dp.LocalName, dp.NamespaceURI),
870 _ => throw new InvalidOperationException(System.SR.Format(System.SR.DataDom_CloneNode, dp.NodeType.ToString())),
871 };
872 }
873
874 internal static bool IsTextLikeNode(XmlNode n)
875 {
876 switch (n.NodeType)
877 {
878 case XmlNodeType.Text:
879 case XmlNodeType.CDATA:
880 case XmlNodeType.Whitespace:
881 case XmlNodeType.SignificantWhitespace:
882 return true;
883 case XmlNodeType.EntityReference:
884 return false;
885 default:
886 return false;
887 }
888 }
889
890 internal bool IsNotMapped(DataColumn c)
891 {
892 return DataSetMapper.IsNotMapped(c);
893 }
894
895 private bool IsSame(DataColumn c, int recNo1, int recNo2)
896 {
897 if (c.Compare(recNo1, recNo2) == 0)
898 {
899 return true;
900 }
901 return false;
902 }
903
904 internal bool IsTextOnly(DataColumn c)
905 {
906 return c.ColumnMapping == MappingType.SimpleContent;
907 }
908
909 public override void Load(string filename)
910 {
911 _bForceExpandEntity = true;
912 base.Load(filename);
913 _bForceExpandEntity = false;
914 }
915
916 public override void Load(Stream inStream)
917 {
918 _bForceExpandEntity = true;
919 base.Load(inStream);
920 _bForceExpandEntity = false;
921 }
922
923 public override void Load(TextReader txtReader)
924 {
925 _bForceExpandEntity = true;
926 base.Load(txtReader);
927 _bForceExpandEntity = false;
928 }
929
930 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "This whole class is unsafe. Constructors are marked as such.")]
931 public override void Load(XmlReader reader)
932 {
933 if (FirstChild != null)
934 {
936 }
937 try
938 {
939 _ignoreXmlEvents = true;
941 {
943 }
944 _fAssociateDataRow = false;
945 _isFoliationEnabled = false;
947 {
948 ((XmlTextReader)reader).EntityHandling = EntityHandling.ExpandEntities;
949 }
950 base.Load(reader);
951 BindForLoad();
952 }
953 finally
954 {
955 _ignoreXmlEvents = false;
956 _isFoliationEnabled = true;
957 _autoFoliationState = ElementState.StrongFoliation;
958 _fAssociateDataRow = true;
959 }
960 }
961
962 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
963 private void LoadDataSetFromTree()
964 {
966 _ignoreXmlEvents = true;
968 IsFoliationEnabled = false;
971 try
972 {
973 LoadRows(null, base.DocumentElement);
974 SyncRows(null, base.DocumentElement, fAddRowsToTable: true);
976 }
977 finally
978 {
979 _ignoreDataSetEvents = false;
980 _ignoreXmlEvents = false;
982 }
983 }
984
985 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
987 {
989 _ignoreXmlEvents = true;
991 IsFoliationEnabled = false;
992 _fAssociateDataRow = false;
994 try
995 {
996 foreach (DataTable dataTable in array)
997 {
998 foreach (DataRow row in dataTable.Rows)
999 {
1001 switch (row.RowState)
1002 {
1003 case DataRowState.Unchanged:
1004 case DataRowState.Added:
1005 case DataRowState.Modified:
1006 OnAddRow(row);
1007 break;
1008 }
1009 }
1010 }
1011 }
1012 finally
1013 {
1014 _ignoreDataSetEvents = false;
1015 _ignoreXmlEvents = false;
1017 _fAssociateDataRow = true;
1018 }
1019 }
1020
1021 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1023 {
1025 {
1027 if (dataTable != null)
1028 {
1030 if (xmlBoundElement.ElementState == ElementState.None)
1031 {
1033 }
1034 rowFromElement = dataTable.CreateEmptyRow();
1037 }
1038 }
1039 for (XmlNode xmlNode = node.FirstChild; xmlNode != null; xmlNode = xmlNode.NextSibling)
1040 {
1042 }
1043 }
1044
1045 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1046 internal void OnDataRowCreated(object oDataSet, DataRow row)
1047 {
1048 OnNewRow(row);
1049 }
1050
1051 internal void OnClearCalled(object oDataSet, DataTable table)
1052 {
1054 }
1055
1056 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1058 {
1059 Bind(fLoadFromDataSet: true);
1060 OnNewRow(row);
1061 }
1062
1063 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1064 internal void OnNewRow(DataRow row)
1065 {
1067 }
1068
1069 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1079
1081 {
1082 DataTable table = row.Table;
1083 if (table._xmlText == null)
1084 {
1085 return false;
1086 }
1087 object value = row[table._xmlText];
1088 return Convert.IsDBNull(value);
1089 }
1090
1091 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1112
1113 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1115 {
1116 if (!IsNotMapped(col))
1117 {
1118 object value = row[col];
1119 if (col.ColumnMapping == MappingType.SimpleContent && Convert.IsDBNull(value) && !rowElement.IsFoliated)
1120 {
1121 ForceFoliation(rowElement, ElementState.WeakFoliation);
1122 }
1123 else if (!IsFoliated(rowElement))
1124 {
1125 goto IL_0318;
1126 }
1127 if (IsTextOnly(col))
1128 {
1129 if (Convert.IsDBNull(value))
1130 {
1131 value = string.Empty;
1132 XmlAttribute attributeNode = rowElement.GetAttributeNode("xsi:nil");
1133 if (attributeNode == null)
1134 {
1135 attributeNode = CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance");
1136 attributeNode.Value = "true";
1137 rowElement.SetAttributeNode(attributeNode);
1138 _bHasXSINIL = true;
1139 }
1140 else
1141 {
1142 attributeNode.Value = "true";
1143 }
1144 }
1145 else
1146 {
1147 XmlAttribute attributeNode2 = rowElement.GetAttributeNode("xsi:nil");
1148 if (attributeNode2 != null)
1149 {
1150 attributeNode2.Value = "false";
1151 }
1152 }
1153 ReplaceInitialChildText(rowElement, col.ConvertObjectToXml(value));
1154 }
1155 else
1156 {
1157 bool flag = false;
1158 if (col.ColumnMapping == MappingType.Attribute)
1159 {
1160 foreach (XmlAttribute attribute in rowElement.Attributes)
1161 {
1162 if (attribute.LocalName == col.EncodedColumnName && attribute.NamespaceURI == col.Namespace)
1163 {
1164 if (Convert.IsDBNull(value))
1165 {
1166 attribute.OwnerElement.Attributes.Remove(attribute);
1167 }
1168 else
1169 {
1170 attribute.Value = col.ConvertObjectToXml(value);
1171 }
1172 flag = true;
1173 break;
1174 }
1175 }
1176 if (!flag && !Convert.IsDBNull(value))
1177 {
1178 rowElement.SetAttribute(col.EncodedColumnName, col.Namespace, col.ConvertObjectToXml(value));
1179 }
1180 }
1181 else
1182 {
1184 bool flag2 = regionIterator.Next();
1185 while (true)
1186 {
1187 if (flag2)
1188 {
1189 if (regionIterator.CurrentNode.NodeType == XmlNodeType.Element)
1190 {
1192 if (xmlElement is XmlBoundElement { Row: not null })
1193 {
1194 flag2 = regionIterator.NextRight();
1195 continue;
1196 }
1197 if (xmlElement.LocalName == col.EncodedColumnName && xmlElement.NamespaceURI == col.Namespace)
1198 {
1199 flag = true;
1200 if (Convert.IsDBNull(value))
1201 {
1203 flag2 = regionIterator.NextRight();
1204 xmlElement.ParentNode.RemoveChild(xmlElement);
1205 continue;
1206 }
1207 ReplaceInitialChildText(xmlElement, col.ConvertObjectToXml(value));
1208 XmlAttribute attributeNode3 = xmlElement.GetAttributeNode("xsi:nil");
1209 if (attributeNode3 != null)
1210 {
1211 attributeNode3.Value = "false";
1212 }
1213 break;
1214 }
1215 }
1216 flag2 = regionIterator.Next();
1217 continue;
1218 }
1219 if (!flag && !Convert.IsDBNull(value))
1220 {
1221 XmlElement xmlElement2 = new XmlBoundElement(string.Empty, col.EncodedColumnName, col.Namespace, this);
1222 xmlElement2.AppendChild(CreateTextNode(col.ConvertObjectToXml(value)));
1224 if (columnInsertAfterLocation != null)
1225 {
1227 }
1228 else if (rowElement.FirstChild != null)
1229 {
1230 rowElement.InsertBefore(xmlElement2, rowElement.FirstChild);
1231 }
1232 else
1233 {
1234 rowElement.AppendChild(xmlElement2);
1235 }
1236 }
1237 break;
1238 }
1239 }
1240 }
1241 }
1242 goto IL_0318;
1243 IL_0318:
1245 if (nestedParentRelation != null && nestedParentRelation.ChildKey.ContainsColumn(col))
1246 {
1248 }
1249 }
1250
1251 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1253 {
1255 {
1256 return;
1257 }
1259 _ignoreXmlEvents = true;
1261 IsFoliationEnabled = false;
1262 try
1263 {
1264 DataRow row = args.Row;
1265 DataColumn column = args.Column;
1266 if (row.RowState == DataRowState.Detached)
1267 {
1268 XmlBoundElement element = row.Element;
1269 if (element.IsFoliated)
1270 {
1271 OnColumnValueChanged(row, column, element);
1272 }
1273 }
1274 }
1275 finally
1276 {
1279 }
1280 }
1281
1282 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1284 {
1285 if (_columnChangeList.Count > 0)
1286 {
1287 if (((DataColumn)_columnChangeList[0]).Table == row.Table)
1288 {
1290 {
1292 }
1293 }
1294 else
1295 {
1296 foreach (DataColumn column in row.Table.Columns)
1297 {
1299 }
1300 }
1301 }
1302 else
1303 {
1304 foreach (DataColumn column2 in row.Table.Columns)
1305 {
1307 }
1308 }
1310 }
1311
1312 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1314 {
1315 if (rowElement == base.DocumentElement)
1316 {
1318 }
1320 rowElement.ParentNode.RemoveChild(rowElement);
1321 }
1322
1323 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1325 {
1327 {
1328 return;
1329 }
1331 IgnoreXmlEvents = true;
1333 IsFoliationEnabled = true;
1334 try
1335 {
1337 }
1338 finally
1339 {
1342 }
1343 }
1344
1346 {
1347 while (true)
1348 {
1349 try
1350 {
1351 if (_pointers.Count <= 0)
1352 {
1353 break;
1354 }
1355 foreach (DictionaryEntry pointer in _pointers)
1356 {
1357 object value = pointer.Value;
1358 ((IXmlDataVirtualNode)value).OnFoliated(node);
1359 }
1360 break;
1361 }
1363 {
1364 }
1365 }
1366 }
1367
1369 {
1370 DataColumn[] columnsReference = relation.ChildKey.ColumnsReference;
1371 for (int i = 0; i < columnsReference.Length; i++)
1372 {
1373 if (childCol == columnsReference[i])
1374 {
1375 return relation.ParentKey.ColumnsReference[i];
1376 }
1377 }
1378 return null;
1379 }
1380
1381 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1383 {
1386 if (dataRow == nestedParent)
1387 {
1388 return;
1389 }
1390 if (nestedParent != null)
1391 {
1393 elementFromRow.AppendChild(childElement);
1394 return;
1395 }
1397 if (childCol == null || nestedParentRelation == null || Convert.IsDBNull(child[childCol]))
1398 {
1400 return;
1401 }
1403 object value = dataColumn.ConvertValue(child[childCol]);
1404 if (dataRow._tempRecord != -1 && dataColumn.CompareValueTo(dataRow._tempRecord, value) != 0)
1405 {
1407 }
1408 }
1409
1410 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1411 private void OnNodeChanged(object sender, XmlNodeChangedEventArgs args)
1412 {
1413 if (_ignoreXmlEvents)
1414 {
1415 return;
1416 }
1420 _ignoreDataSetEvents = true;
1421 _ignoreXmlEvents = true;
1422 IsFoliationEnabled = false;
1425 try
1426 {
1427 XmlBoundElement rowElem = null;
1428 if (_mapper.GetRegion(args.Node, out rowElem))
1429 {
1431 }
1432 }
1433 finally
1434 {
1439 }
1440 }
1441
1442 private void OnNodeChanging(object sender, XmlNodeChangedEventArgs args)
1443 {
1445 {
1446 return;
1447 }
1449 }
1450
1451 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1452 private void OnNodeInserted(object sender, XmlNodeChangedEventArgs args)
1453 {
1454 if (_ignoreXmlEvents)
1455 {
1456 return;
1457 }
1461 _ignoreDataSetEvents = true;
1462 _ignoreXmlEvents = true;
1463 IsFoliationEnabled = false;
1466 try
1467 {
1468 XmlNode node = args.Node;
1469 XmlNode oldParent = args.OldParent;
1470 XmlNode newParent = args.NewParent;
1472 {
1474 }
1475 else
1476 {
1478 }
1479 }
1480 finally
1481 {
1486 }
1487 }
1488
1489 private void OnNodeInserting(object sender, XmlNodeChangedEventArgs args)
1490 {
1492 {
1493 return;
1494 }
1496 }
1497
1498 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1499 private void OnNodeRemoved(object sender, XmlNodeChangedEventArgs args)
1500 {
1501 if (_ignoreXmlEvents)
1502 {
1503 return;
1504 }
1508 _ignoreDataSetEvents = true;
1509 _ignoreXmlEvents = true;
1510 IsFoliationEnabled = false;
1513 try
1514 {
1515 XmlNode node = args.Node;
1516 XmlNode oldParent = args.OldParent;
1518 {
1520 }
1521 else
1522 {
1524 }
1525 }
1526 finally
1527 {
1532 }
1533 }
1534
1535 private void OnNodeRemoving(object sender, XmlNodeChangedEventArgs args)
1536 {
1538 {
1539 return;
1540 }
1542 }
1543
1544 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1546 {
1548 {
1550 }
1551 if (node is XmlBoundElement { Row: not null } xmlBoundElement)
1552 {
1554 }
1556 bool flag = treeIterator.NextRowElement();
1557 while (flag)
1558 {
1561 flag = treeIterator.NextRowElement();
1562 }
1563 }
1564
1565 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1567 {
1569 {
1570 DataRow row = rowElem.Row;
1571 if (rowElem.Row.RowState == DataRowState.Detached)
1572 {
1574 }
1575 }
1576 if (node is XmlBoundElement { Row: not null } xmlBoundElement)
1577 {
1579 return;
1580 }
1582 bool flag = treeIterator.NextRowElement();
1583 while (flag)
1584 {
1587 flag = treeIterator.NextRightRowElement();
1588 }
1589 }
1590
1591 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1592 private void OnRowChanged(object sender, DataRowChangeEventArgs args)
1593 {
1595 {
1596 return;
1597 }
1598 _ignoreXmlEvents = true;
1600 IsFoliationEnabled = false;
1601 try
1602 {
1603 DataRow row = args.Row;
1604 XmlBoundElement element = row.Element;
1605 switch (args.Action)
1606 {
1607 case DataRowAction.Add:
1608 OnAddRow(row);
1609 break;
1610 case DataRowAction.Delete:
1611 OnDeleteRow(row, element);
1612 break;
1613 case DataRowAction.Rollback:
1614 switch (_rollbackState)
1615 {
1616 case DataRowState.Deleted:
1617 OnUndeleteRow(row, element);
1618 UpdateAllColumns(row, element);
1619 break;
1620 case DataRowState.Added:
1621 element.ParentNode.RemoveChild(element);
1622 break;
1623 case DataRowState.Modified:
1624 OnColumnValuesChanged(row, element);
1625 break;
1626 }
1627 break;
1628 case DataRowAction.Change:
1629 OnColumnValuesChanged(row, element);
1630 break;
1631 case DataRowAction.Commit:
1632 if (row.RowState == DataRowState.Detached)
1633 {
1634 element.RemoveAll();
1635 }
1636 break;
1637 }
1638 }
1639 finally
1640 {
1642 _ignoreXmlEvents = false;
1643 }
1644 }
1645
1646 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1647 private void OnRowChanging(object sender, DataRowChangeEventArgs args)
1648 {
1649 DataRow row = args.Row;
1650 if (args.Action == DataRowAction.Delete && row.Element != null)
1651 {
1652 OnDeletingRow(row, row.Element);
1653 }
1654 else
1655 {
1657 {
1658 return;
1659 }
1661 IsFoliationEnabled = false;
1662 try
1663 {
1664 _ignoreXmlEvents = true;
1666 int num = -1;
1667 int num2 = -1;
1668 if (elementFromRow == null)
1669 {
1670 return;
1671 }
1672 switch (args.Action)
1673 {
1674 case DataRowAction.Rollback:
1675 _rollbackState = row.RowState;
1676 switch (_rollbackState)
1677 {
1678 case DataRowState.Modified:
1680 num = row.GetRecordFromVersion(DataRowVersion.Original);
1681 num2 = row.GetRecordFromVersion(DataRowVersion.Current);
1682 {
1683 foreach (DataColumn column in row.Table.Columns)
1684 {
1685 if (!IsSame(column, num, num2))
1686 {
1688 }
1689 }
1690 break;
1691 }
1692 }
1693 break;
1694 case DataRowAction.Change:
1696 num = row.GetRecordFromVersion(DataRowVersion.Proposed);
1697 num2 = row.GetRecordFromVersion(DataRowVersion.Current);
1698 {
1699 foreach (DataColumn column2 in row.Table.Columns)
1700 {
1701 object value = row[column2, DataRowVersion.Proposed];
1702 object value2 = row[column2, DataRowVersion.Current];
1703 if (Convert.IsDBNull(value) && !Convert.IsDBNull(value2) && column2.ColumnMapping != MappingType.Hidden)
1704 {
1706 }
1707 if (!IsSame(column2, num, num2))
1708 {
1710 }
1711 }
1712 break;
1713 }
1714 }
1715 }
1716 finally
1717 {
1718 _ignoreXmlEvents = false;
1720 }
1721 }
1722 }
1723
1725 {
1726 if (args.PropertyName == "DataSetName")
1727 {
1729 }
1730 }
1731
1733 {
1734 if (args.PropertyName == "ColumnName")
1735 {
1737 }
1738 if (args.PropertyName == "Namespace")
1739 {
1741 }
1742 if (args.PropertyName == "ColumnMapping")
1743 {
1745 }
1746 }
1747
1749 {
1750 if (args.PropertyName == "TableName")
1751 {
1753 }
1754 if (args.PropertyName == "Namespace")
1755 {
1757 }
1758 }
1759
1764
1769
1771 {
1773 if (dataRelation != null && dataRelation.Nested)
1774 {
1776 }
1777 if (args.Action != CollectionChangeAction.Refresh)
1778 {
1779 return;
1780 }
1782 {
1783 if (item.Nested)
1784 {
1786 }
1787 }
1788 }
1789
1791 {
1792 if (args.PropertyName == "Nested")
1793 {
1795 }
1796 }
1797
1798 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1800 {
1801 if (rowElement.ParentNode != null)
1802 {
1803 rowElement.ParentNode.RemoveChild(rowElement);
1804 }
1809 {
1811 }
1812 else
1813 {
1814 xmlElement.AppendChild(rowElement);
1815 }
1817 }
1818
1820 {
1821 if (child.ParentNode != null)
1822 {
1823 child.ParentNode.RemoveChild(child);
1824 }
1825 prevSibling.ParentNode.InsertAfter(child, prevSibling);
1826 }
1827
1828 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1829 private void PromoteInnerRegions(XmlNode parent)
1830 {
1833 bool flag = treeIterator.NextRowElement();
1834 while (flag)
1835 {
1837 flag = treeIterator.NextRightRowElement();
1840 }
1841 }
1842
1844 {
1845 XmlNode prevSibling = parent;
1846 XmlNode xmlNode = parent.FirstChild;
1847 bool flag = true;
1848 XmlNode xmlNode2 = null;
1849 while (xmlNode != null)
1850 {
1851 xmlNode2 = xmlNode.NextSibling;
1852 if (!flag || !IsTextLikeNode(xmlNode))
1853 {
1854 flag = false;
1855 xmlNode2 = xmlNode.NextSibling;
1858 }
1859 xmlNode = xmlNode2;
1860 }
1861 }
1862
1864 {
1865 while (node != null && IsTextLikeNode(node))
1866 {
1867 XmlNode nextSibling = node.NextSibling;
1868 node.ParentNode.RemoveChild(node);
1869 node = nextSibling;
1870 }
1871 }
1872
1873 private void ReplaceInitialChildText(XmlNode parent, string value)
1874 {
1875 XmlNode xmlNode = parent.FirstChild;
1876 while (xmlNode != null && xmlNode.NodeType == XmlNodeType.Whitespace)
1877 {
1878 xmlNode = xmlNode.NextSibling;
1879 }
1880 if (xmlNode != null)
1881 {
1882 if (xmlNode.NodeType == XmlNodeType.Text)
1883 {
1885 }
1886 else
1887 {
1889 }
1890 RemoveInitialTextNodes(xmlNode.NextSibling);
1891 }
1892 else
1893 {
1895 }
1896 }
1897
1899 {
1901 {
1902 return xmlBoundElement.SafeFirstChild;
1903 }
1904 return n.FirstChild;
1905 }
1906
1908 {
1910 {
1911 return xmlBoundElement.SafeNextSibling;
1912 }
1913 return n.NextSibling;
1914 }
1915
1917 {
1919 {
1920 return xmlBoundElement.SafePreviousSibling;
1921 }
1922 return n.PreviousSibling;
1923 }
1924
1925 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1927 {
1928 if (!row.IsNull(col))
1929 {
1930 row[col] = DBNull.Value;
1931 }
1932 }
1933
1934 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1936 {
1937 object obj;
1938 try
1939 {
1940 obj = col.ConvertXmlToObject(xmlText);
1941 }
1943 {
1945 return;
1946 }
1947 if (!obj.Equals(row[col]))
1948 {
1949 row[col] = obj;
1950 }
1951 }
1952
1953 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1958
1959 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1961 {
1962 DataRow row = rowElement.Row;
1963 if (row.RowState != DataRowState.Deleted)
1964 {
1965 row.BeginEdit();
1967 row.EndEdit();
1968 }
1969 }
1970
1971 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
1973 {
1974 DataRow row = rowElement.Row;
1975 Hashtable hashtable = new Hashtable();
1976 string empty = string.Empty;
1979 bool flag;
1980 if (textOnlyColumn != null)
1981 {
1982 hashtable[textOnlyColumn] = textOnlyColumn;
1983 flag = regionIterator.NextInitialTextLikeNodes(out var value);
1984 if (value.Length == 0 && ((empty = rowElement.GetAttribute("xsi:nil")) == "1" || empty == "true"))
1985 {
1987 }
1988 else
1989 {
1991 }
1992 }
1993 else
1994 {
1995 flag = regionIterator.Next();
1996 }
1997 while (flag)
1998 {
1999 if (!(regionIterator.CurrentNode is XmlElement xmlElement))
2000 {
2001 flag = regionIterator.Next();
2002 continue;
2003 }
2004 if (xmlElement is XmlBoundElement { Row: not null })
2005 {
2007 flag = regionIterator.NextRight();
2008 continue;
2009 }
2011 if (columnSchemaForNode != null && hashtable[columnSchemaForNode] == null)
2012 {
2014 flag = regionIterator.NextInitialTextLikeNodes(out var value2);
2015 if (value2.Length == 0 && ((empty = xmlElement.GetAttribute("xsi:nil")) == "1" || empty == "true"))
2016 {
2018 }
2019 else
2020 {
2022 }
2023 }
2024 else
2025 {
2026 flag = regionIterator.Next();
2027 }
2028 }
2029 foreach (XmlAttribute attribute in rowElement.Attributes)
2030 {
2032 if (columnSchemaForNode2 != null && hashtable[columnSchemaForNode2] == null)
2033 {
2036 }
2037 }
2038 foreach (DataColumn column in row.Table.Columns)
2039 {
2040 if (hashtable[column] == null && !IsNotMapped(column))
2041 {
2042 if (!column.AutoIncrement)
2043 {
2045 }
2046 else
2047 {
2048 column.Init(row._tempRecord);
2049 }
2050 }
2051 }
2052 }
2053
2054 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2056 {
2057 foreach (DataColumn column in row.Table.Columns)
2058 {
2060 }
2061 }
2062
2063 [RequiresUnreferencedCode("XmlDataDocument is used for serialization and deserialization. Members from serialized types may be trimmed if not referenced directly.")]
2066 {
2067 Init();
2068 AttachDataSet(new DataSet());
2070 }
2071
2072 [RequiresUnreferencedCode("XmlDataDocument is used for serialization and deserialization. Members from serialized types may be trimmed if not referenced directly.")]
2078
2079 [RequiresUnreferencedCode("XmlDataDocument is used for serialization and deserialization. Members from serialized types may be trimmed if not referenced directly.")]
2081 : base(imp)
2082 {
2083 _dataSet = null;
2084 _pointers = null;
2085 _columnChangeList = null;
2086 _mapper = null;
2087 _foliationLock = null;
2088 _attrXml = null;
2089 }
2090
2091 [MemberNotNull("_pointers")]
2092 [MemberNotNull("_columnChangeList")]
2093 [MemberNotNull("_mapper")]
2094 [MemberNotNull("_foliationLock")]
2095 [MemberNotNull("_attrXml")]
2096 private void Init()
2097 {
2098 _pointers = new Hashtable();
2099 _countAddPointer = 0;
2101 _ignoreDataSetEvents = false;
2102 _isFoliationEnabled = true;
2103 _optimizeStorage = true;
2105 _autoFoliationState = ElementState.StrongFoliation;
2106 _fAssociateDataRow = true;
2107 _mapper = new DataSetMapper();
2108 _foliationLock = new object();
2109 _ignoreXmlEvents = true;
2110 _attrXml = CreateAttribute("xmlns", "xml", "http://www.w3.org/2000/xmlns/");
2111 _attrXml.Value = "http://www.w3.org/XML/1998/namespace";
2112 _ignoreXmlEvents = false;
2113 }
2114
2115 [MemberNotNull("_pointers")]
2116 [MemberNotNull("_columnChangeList")]
2117 [MemberNotNull("_mapper")]
2118 [MemberNotNull("_foliationLock")]
2119 [MemberNotNull("_attrXml")]
2120 [MemberNotNull("_dataSet")]
2121 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2122 private void Init(DataSet ds)
2123 {
2124 if (ds == null)
2125 {
2127 }
2128 Init();
2129 if (ds.FBoundToDocument)
2130 {
2132 }
2133 ds.FBoundToDocument = true;
2134 _dataSet = ds;
2135 Bind(fLoadFromDataSet: true);
2136 }
2137
2139 {
2140 while (true)
2141 {
2142 if (node == null)
2143 {
2144 return false;
2145 }
2146 if (node == this)
2147 {
2148 break;
2149 }
2151 }
2152 return true;
2153 }
2154
2155 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2157 {
2159 if (nestedParentRelation != null)
2160 {
2161 if (parentRow == null || nestedParentRelation.ParentKey.Table != parentRow.Table)
2162 {
2163 childRow.SetParentRow(null, nestedParentRelation);
2164 }
2165 else
2166 {
2168 }
2169 }
2170 }
2171
2172 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2174 {
2177 {
2178 if (rowElem == node)
2179 {
2181 }
2182 else
2183 {
2185 }
2186 }
2187 else
2188 {
2190 bool flag = treeIterator.NextRowElement();
2191 while (flag)
2192 {
2193 arrayList.Add(treeIterator.CurrentNode);
2194 flag = treeIterator.NextRightRowElement();
2195 }
2196 }
2197 while (arrayList.Count > 0)
2198 {
2200 arrayList.RemoveAt(0);
2202 }
2203 }
2204
2205 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2207 {
2209 {
2210 return;
2211 }
2212 if (rowElem == node)
2213 {
2215 return;
2216 }
2219 while (arrayList.Count > 0)
2220 {
2222 arrayList.RemoveAt(0);
2224 }
2225 }
2226
2227 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2229 {
2230 DataRow row = rowElem.Row;
2231 switch (row.RowState)
2232 {
2233 case DataRowState.Detached:
2234 row.Table.Rows.Add(row);
2236 if (rowElemList != null)
2237 {
2239 bool flag = regionIterator.NextRowElement();
2240 while (flag)
2241 {
2242 rowElemList.Add(regionIterator.CurrentNode);
2243 flag = regionIterator.NextRightRowElement();
2244 }
2245 }
2246 break;
2247 case DataRowState.Deleted:
2248 row.RejectChanges();
2251 break;
2252 }
2253 }
2254
2255 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2257 {
2258 DataRow row = rowElem.Row;
2259 switch (row.RowState)
2260 {
2261 case DataRowState.Detached:
2263 break;
2264 case DataRowState.Unchanged:
2265 case DataRowState.Modified:
2266 EnsureFoliation(rowElem, ElementState.WeakFoliation);
2267 row.Delete();
2268 break;
2269 case DataRowState.Added:
2270 EnsureFoliation(rowElem, ElementState.WeakFoliation);
2271 row.Delete();
2273 break;
2274 }
2275 }
2276
2277 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2279 {
2280 DataRow row = rowElement.Row;
2282 if (rowElemList != null)
2283 {
2285 bool flag = treeIterator.NextRowElement();
2286 while (flag)
2287 {
2288 rowElemList.Add(treeIterator.CurrentNode);
2289 flag = treeIterator.NextRightRowElement();
2290 }
2291 }
2292 }
2293
2294 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2303
2304 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2310
2311 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
2313 {
2314 DataRow row = childRowElem.Row;
2315 if (parentRowElem == null)
2316 {
2317 SetNestedParentRow(row, null);
2318 return;
2319 }
2321 DataRelation[] nestedParentRelations = row.Table.NestedParentRelations;
2322 if (nestedParentRelations.Length != 0 && nestedParentRelations[0].ParentTable == row2.Table)
2323 {
2325 }
2326 else
2327 {
2328 SetNestedParentRow(row, null);
2329 }
2330 }
2331
2332 internal static bool IsTextNode(XmlNodeType nt)
2333 {
2334 if ((uint)(nt - 3) <= 1u || (uint)(nt - 13) <= 1u)
2335 {
2336 return true;
2337 }
2338 return false;
2339 }
2340
2341 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "This whole class is unsafe. Constructors are marked as such.")]
2343 {
2345 {
2346 return null;
2347 }
2348 if (IsTextNode(node.NodeType))
2349 {
2350 XmlNode xmlNode = node.ParentNode;
2351 if (xmlNode != null && xmlNode.NodeType == XmlNodeType.Attribute)
2352 {
2353 return null;
2354 }
2355 XmlNode xmlNode2 = node.PreviousSibling;
2356 while (xmlNode2 != null && IsTextNode(xmlNode2.NodeType))
2357 {
2358 node = xmlNode2;
2360 }
2361 }
2362 return new DataDocumentXPathNavigator(this, node);
2363 }
2364
2369
2370 public override XmlNodeList GetElementsByTagName(string name)
2371 {
2372 XmlNodeList elementsByTagName = base.GetElementsByTagName(name);
2374 return elementsByTagName;
2375 }
2376
2378 {
2379 DataTable[] array = null;
2380 if (ds == null || ds.Tables.Count == 0)
2381 {
2382 array = Array.Empty<DataTable>();
2383 }
2384 else if (TablesAreOrdered(ds))
2385 {
2386 array = new DataTable[ds.Tables.Count];
2387 ds.Tables.CopyTo(array, 0);
2388 }
2389 if (array == null)
2390 {
2391 array = new DataTable[ds.Tables.Count];
2393 foreach (DataTable table in ds.Tables)
2394 {
2395 if (table.ParentRelations.Count == 0)
2396 {
2397 list.Add(table);
2398 }
2399 }
2400 if (list.Count > 0)
2401 {
2402 foreach (DataTable table2 in ds.Tables)
2403 {
2405 {
2406 list.Add(table2);
2407 }
2408 }
2409 for (int i = 0; i < list.Count; i++)
2410 {
2411 foreach (DataRelation childRelation in list[i].ChildRelations)
2412 {
2413 DataTable childTable = childRelation.ChildTable;
2414 if (!list.Contains(childTable))
2415 {
2417 }
2418 }
2419 }
2420 list.CopyTo(array);
2421 }
2422 else
2423 {
2424 ds.Tables.CopyTo(array, 0);
2425 }
2426 }
2427 return array;
2428 }
2429
2431 {
2433 bool flag = false;
2434 foreach (DataRelation childRelation in rootTable.ChildRelations)
2435 {
2436 DataTable childTable = childRelation.ChildTable;
2437 if (childTable == rootTable)
2438 {
2439 flag = true;
2440 break;
2441 }
2442 if (!list.Contains(childTable))
2443 {
2445 }
2446 }
2447 if (!flag)
2448 {
2449 for (int i = 0; i < list.Count; i++)
2450 {
2451 foreach (DataRelation childRelation2 in list[i].ChildRelations)
2452 {
2454 if (childTable2 == rootTable)
2455 {
2456 flag = true;
2457 break;
2458 }
2459 if (!list.Contains(childTable2))
2460 {
2462 }
2463 }
2464 if (flag)
2465 {
2466 break;
2467 }
2468 }
2469 }
2470 return flag;
2471 }
2472
2474 {
2475 foreach (DataTable table in ds.Tables)
2476 {
2477 if (table.Namespace != ds.Namespace)
2478 {
2479 return false;
2480 }
2481 }
2482 return true;
2483 }
2484}
virtual int Add(object? 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)
virtual void Remove(object key)
static bool IsDBNull([NotNullWhen(true)] object? value)
Definition Convert.cs:215
static readonly DBNull Value
Definition DBNull.cs:8
static bool IsCatchableExceptionType(Exception e)
Definition ADP.cs:790
int Compare(int record1, int record2)
DataRelationCollection Relations
Definition DataSet.cs:393
DataTableCollection Tables
Definition DataSet.cs:396
virtual DataSet Clone()
Definition DataSet.cs:977
DataRelationCollection ParentRelations
Definition DataTable.cs:572
static string DataDom_DataSetNestedRelationsChange
Definition SR.cs:700
static string DataDom_EnforceConstraintsShouldBeOff
Definition SR.cs:900
static string DataDom_TableColumnsChange
Definition SR.cs:696
static string DataDom_DataSetNull
Definition SR.cs:702
static string DataDom_MultipleDataSet
Definition SR.cs:710
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string DataDom_ColumnNameChange
Definition SR.cs:690
static string DataDom_NotSupport_EntRef
Definition SR.cs:714
static string DataDom_NotSupport_Clear
Definition SR.cs:716
static string DataDom_DataSetTablesChange
Definition SR.cs:698
static string DataDom_MultipleLoad
Definition SR.cs:708
static string DataDom_ColumnNamespaceChange
Definition SR.cs:692
static string DataDom_NotSupport_GetElementById
Definition SR.cs:712
static string DataDom_DataSetNameChange
Definition SR.cs:704
static string DataDom_CloneNode
Definition SR.cs:706
static string DataDom_ColumnMappingChange
Definition SR.cs:694
static string DataDom_TableNameChange
Definition SR.cs:686
static string DataDom_TableNamespaceChange
Definition SR.cs:688
Definition SR.cs:7
bool IsRegionRadical(XmlBoundElement rowElem)
bool GetRegion(XmlNode node, [NotNullWhen(true)] out XmlBoundElement rowElem)
DataRow GetRowFromElement(XmlElement e)
DataColumn GetColumnSchemaForNode(XmlBoundElement rowElem, XmlNode node)
static bool IsNotMapped(DataColumn c)
DataTable SearchMatchingTableSchema(string localName, string namespaceURI)
void SetupMapping(XmlDataDocument xd, DataSet ds)
static readonly int[] s_xmlNodeType_To_XpathNodeType_Map
static ? string EncodeLocalName(string? name)
Definition XmlConvert.cs:49
static void SetNestedParentRow(DataRow childRow, DataRow parentRow)
bool IsFoliated(XmlBoundElement be)
bool IsSame(DataColumn c, int recNo1, int recNo2)
void RemoveInitialTextNodes(XmlNode node)
void OnRelationPropertyChanging(object oRelationsCollection, PropertyChangedEventArgs args)
bool IsFoliated(XmlElement element)
void OnNodeChanged(object sender, XmlNodeChangedEventArgs args)
DataRow GetNestedParent(DataRow row)
static bool IsTextLikeNode(XmlNode n)
DataColumn FindAssociatedParentColumn(DataRelation relation, DataColumn childCol)
void OnRowChanged(object sender, DataRowChangeEventArgs args)
bool IsConnected(XmlNode node)
void ReplaceInitialChildText(XmlNode parent, string value)
void SynchronizeRowFromRowElement(XmlBoundElement rowElement, ArrayList rowElemList)
XmlNode CloneTreeInternal(DataPointer other)
void LoadRows(XmlBoundElement rowElem, XmlNode node)
void ForceFoliation(XmlBoundElement node, ElementState newState)
XmlBoundElement AttachBoundElementToDataRow(DataRow row)
void SynchronizeRowFromRowElement(XmlBoundElement rowElement)
void Bind(DataRow r, XmlBoundElement e)
DataTable[] OrderTables(DataSet ds)
ArrayList GetNestedChildRelations(DataRow row)
void OnNodeInsertedInTree(XmlNode node)
DataColumn GetTextOnlyColumn(DataRow row)
override XmlNodeList GetElementsByTagName(string name)
void EnsureFoliation(XmlBoundElement rowElem, ElementState foliation)
override? XmlElement GetElementById(string elemId)
XmlNode SafeFirstChild(XmlNode n)
void OnNestedParentChange(DataRow child, XmlBoundElement childElement, DataColumn childCol)
void OnDataSetRelationsChanging(object oRelationsCollection, CollectionChangeEventArgs args)
bool IsNotMapped(DataColumn c)
override void Load(TextReader txtReader)
void AddPointer(IXmlDataVirtualNode pointer)
void UpdateAllColumns(DataRow row, XmlBoundElement rowElement)
void EnsureDisconnectedDataRow(XmlBoundElement rowElem)
void SetNestedParentRegion(XmlBoundElement childRowElem)
void OnColumnChanged(object sender, DataColumnChangeEventArgs args)
void PromoteChild(XmlNode child, XmlNode prevSibling)
void OnNodeInserting(object sender, XmlNodeChangedEventArgs args)
void OnTableColumnsChanging(object oColumnsCollection, CollectionChangeEventArgs args)
void OnDeleteRow(DataRow row, XmlBoundElement rowElement)
XmlNode CloneNode(DataPointer dp)
void FixNestedChildren(DataRow row, XmlElement rowElement)
void OnNodeRemoved(object sender, XmlNodeChangedEventArgs args)
override XmlNode CloneNode(bool deep)
void OnNodeChanging(object sender, XmlNodeChangedEventArgs args)
XmlElement EnsureNonRowDocumentElement()
void OnNonRowElementInsertedInTree(XmlNode node, XmlBoundElement rowElement, ArrayList rowElemList)
XmlNode GetColumnInsertAfterLocation(DataRow row, DataColumn col, XmlBoundElement rowElement)
XmlNode CloneTree(DataPointer other)
void OnColumnPropertyChanging(object oColumn, PropertyChangedEventArgs args)
XmlNode GetRowInsertBeforeLocation(DataRow row, XmlElement rowElement, XmlNode parentElement)
void OnDataSetPropertyChanging(object oDataSet, PropertyChangedEventArgs args)
void BindToTable(DataTable t)
void OnClearCalled(object oDataSet, DataTable table)
override XmlElement CreateElement(string? prefix, string localName, string? namespaceURI)
void OnRowElementInsertedInTree(XmlBoundElement rowElem, ArrayList rowElemList)
static DataRelation GetNestedParentRelation(DataRow row)
void OnColumnValuesChanged(DataRow row, XmlBoundElement rowElement)
void DefoliateRegion(XmlBoundElement rowElem)
bool TablesAreOrdered(DataSet ds)
XmlElement GetElementFromRow(DataRow r)
void OnFoliated(XmlNode node)
bool HasPointers(XmlNode node)
void OnNodeInserted(object sender, XmlNodeChangedEventArgs args)
void OnNodeInsertedInFragment(XmlNode node)
static void SetRowValueFromXmlText(DataRow row, DataColumn col, string xmlText)
void OnNodeRemovedFromTree(XmlNode node, XmlNode oldParent)
override void Load(string filename)
void OnNodeRemovedFromFragment(XmlNode node, XmlNode oldParent)
bool NeedXSI_NilAttr(DataRow row)
override void Load(Stream inStream)
void OnDataRowCreated(object oDataSet, DataRow row)
XmlNode SafeNextSibling(XmlNode n)
void OnUndeleteRow(DataRow row, XmlElement rowElement)
DataRow? GetRowFromElement(XmlElement? e)
void FoliateIfDataPointers(DataRow row, XmlElement rowElement)
XmlNode SafePreviousSibling(XmlNode n)
void LoadTreeFromDataSet(DataSet ds)
bool IsTextOnly(DataColumn c)
void OnDataSetTablesChanging(object oTablesCollection, CollectionChangeEventArgs args)
void Foliate(XmlBoundElement node, ElementState newState)
void OnRowChanging(object sender, DataRowChangeEventArgs args)
override XmlEntityReference CreateEntityReference(string name)
void SetNestedParentRegion(XmlBoundElement childRowElem, XmlBoundElement parentRowElem)
void OnColumnValueChanged(DataRow row, DataColumn col, XmlBoundElement rowElement)
void Bind(bool fLoadFromDataSet)
void SyncTree(XmlNode node)
override? XPathNavigator CreateNavigator(XmlNode node)
bool IsSelfRelatedDataTable(DataTable rootTable)
static void SetRowValueToNull(DataRow row, DataColumn col)
void PromoteInnerRegions(XmlNode parent)
void OnNonRowElementInsertedInFragment(XmlNode node, XmlBoundElement rowElement, ArrayList rowElemList)
void OnNodeRemoving(object sender, XmlNodeChangedEventArgs args)
void SyncRows(DataRow parentRow, XmlNode node, bool fAddRowsToTable)
static bool IsTextNode(XmlNodeType nt)
void OnDataRowCreatedSpecial(object oDataSet, DataRow row)
void Foliate(XmlElement element)
void OnDeletingRow(DataRow row, XmlBoundElement rowElement)
void OnTablePropertyChanging(object oTable, PropertyChangedEventArgs args)
void PromoteNonValueChildren(XmlNode parent)
void SynchronizeRowFromRowElementEx(XmlBoundElement rowElement, ArrayList rowElemList)
override void Load(XmlReader reader)
XmlDataDocument(XmlImplementation imp)
virtual XmlDeclaration CreateXmlDeclaration(string version, string? encoding, string? standalone)
virtual XmlWhitespace CreateWhitespace(string? text)
virtual XmlText CreateTextNode(string? text)
virtual XmlDocumentFragment CreateDocumentFragment()
virtual XmlCDataSection CreateCDataSection(string? data)
virtual XmlProcessingInstruction CreateProcessingInstruction(string target, string data)
virtual XmlSignificantWhitespace CreateSignificantWhitespace(string? text)
override? XmlNode ParentNode
virtual XmlComment CreateComment(string? data)
virtual XmlDocumentType CreateDocumentType(string name, string? publicId, string? systemId, string? internalSubset)
XmlAttribute CreateAttribute(string name)
override? XmlNode ParentNode
Definition XmlElement.cs:47
override void RemoveAll()
virtual ? XmlNode AppendChild(XmlNode newChild)
Definition XmlNode.cs:739
virtual ? XmlNode ParentNode
Definition XmlNode.cs:76
virtual ? XmlNode InsertBefore(XmlNode newChild, XmlNode? refChild)
Definition XmlNode.cs:445
virtual XmlNode RemoveChild(XmlNode oldChild)
Definition XmlNode.cs:662
virtual ? XmlNode FirstChild
Definition XmlNode.cs:120