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

◆ LoadTable()

void System.Data.XmlDataLoader.LoadTable ( DataTable table,
bool isNested )
inlineprivate

Definition at line 694 of file XmlDataLoader.cs.

695 {
696 DataRow dataRow = null;
697 int depth = _dataReader.Depth;
699 DataColumnCollection columns = table.Columns;
700 object[] array = new object[columns.Count];
701 int pos = -1;
702 string key = string.Empty;
703 string text = null;
704 bool flag = false;
705 for (int num = _dataReader.AttributeCount - 1; num >= 0; num--)
706 {
709 {
710 array[dataColumn.Ordinal] = dataColumn.ConvertXmlToObject(_dataReader.Value);
711 }
712 if (_isDiffgram)
713 {
714 if (_dataReader.NamespaceURI == "urn:schemas-microsoft-com:xml-diffgram-v1")
715 {
716 switch (_dataReader.LocalName)
717 {
718 case "id":
720 break;
721 case "hasChanges":
723 break;
724 case "hasErrors":
725 flag = (bool)Convert.ChangeType(_dataReader.Value, typeof(bool), CultureInfo.InvariantCulture);
726 break;
727 }
728 }
729 else if (_dataReader.NamespaceURI == "urn:schemas-microsoft-com:xml-msdata")
730 {
731 if (_dataReader.LocalName == "rowOrder")
732 {
733 pos = (int)Convert.ChangeType(_dataReader.Value, typeof(int), CultureInfo.InvariantCulture);
734 }
735 else if (_dataReader.LocalName.StartsWith("hidden", StringComparison.Ordinal))
736 {
737 DataColumn dataColumn2 = columns[XmlConvert.DecodeName(_dataReader.LocalName.Substring(6))];
738 if (dataColumn2 != null && dataColumn2.ColumnMapping == MappingType.Hidden)
739 {
740 array[dataColumn2.Ordinal] = dataColumn2.ConvertXmlToObject(_dataReader.Value);
741 }
742 }
743 }
744 }
745 }
746 if (_dataReader.Read() && depth < _dataReader.Depth)
747 {
748 while (depth < _dataReader.Depth)
749 {
750 switch (_dataReader.NodeType)
751 {
752 case XmlNodeType.Element:
753 {
755 if (columnSchema is DataColumn dataColumn3)
756 {
757 if (array[dataColumn3.Ordinal] == null)
758 {
760 }
761 else
762 {
764 }
765 }
766 else if (columnSchema is DataTable table2)
767 {
769 }
770 else if (!ProcessXsdSchema())
771 {
773 if (tableForNode != null)
774 {
776 }
777 else
778 {
780 }
781 }
782 break;
783 }
784 case XmlNodeType.EntityReference:
785 throw ExceptionBuilder.FoundEntity();
786 case XmlNodeType.Text:
787 case XmlNodeType.CDATA:
788 case XmlNodeType.Whitespace:
789 case XmlNodeType.SignificantWhitespace:
790 {
791 string s = _dataReader.ReadString();
792 DataColumn dataColumn2 = table._xmlText;
793 if (dataColumn2 != null && array[dataColumn2.Ordinal] == null)
794 {
795 array[dataColumn2.Ordinal] = dataColumn2.ConvertXmlToObject(s);
796 }
797 break;
798 }
799 default:
801 break;
802 }
803 }
805 }
806 if (_isDiffgram)
807 {
808 dataRow = table.NewRow(table.NewUninitializedRecord());
809 dataRow.BeginEdit();
810 for (int num2 = array.Length - 1; num2 >= 0; num2--)
811 {
812 DataColumn dataColumn2 = columns[num2];
813 dataColumn2[dataRow._tempRecord] = ((array[num2] != null) ? array[num2] : DBNull.Value);
814 }
815 dataRow.EndEdit();
816 table.Rows.DiffInsertAt(dataRow, pos);
817 if (text == null)
818 {
819 dataRow._oldRecord = dataRow._newRecord;
820 }
821 if (text == "modified" || flag)
822 {
823 table.RowDiffId[key] = dataRow;
824 }
825 }
826 else
827 {
828 for (int num3 = array.Length - 1; num3 >= 0; num3--)
829 {
830 if (array[num3] == null)
831 {
832 DataColumn dataColumn2 = columns[num3];
833 if (dataColumn2.AllowDBNull && dataColumn2.ColumnMapping != MappingType.Hidden && !dataColumn2.AutoIncrement)
834 {
835 array[num3] = DBNull.Value;
836 }
837 }
838 }
839 dataRow = table.Rows.AddWithColumnEvents(array);
840 }
841 while (count < _childRowsStack.Count)
842 {
843 DataRow dataRow2 = _childRowsStack.Pop();
844 bool flag2 = dataRow2.RowState == DataRowState.Unchanged;
845 dataRow2.SetNestedParentRow(dataRow, setNonNested: false);
846 if (flag2)
847 {
848 dataRow2._oldRecord = dataRow2._newRecord;
849 }
850 }
851 if (isNested)
852 {
854 }
855 }
void LoadTable(DataTable table, bool isNested)
void LoadColumn(DataColumn column, object[] foundColumns)
readonly Stack< DataRow > _childRowsStack
XmlToDatasetMap _nodeToSchemaMap
bool FIgnoreNamespace(XmlNode node)
DataTable GetTableForNode(XmlReader node, bool fIgnoreNamespace)
object GetColumnSchema(XmlNode node, bool fIgnoreNamespace)
static CultureInfo InvariantCulture
static ? string DecodeName(string? name)
Definition XmlConvert.cs:55
bool MoveToAttribute(string name)
XmlNodeType NodeType
Definition XmlReader.cs:62
virtual string ReadString()
Definition XmlReader.cs:570

References System.Data.XmlDataLoader._childRowsStack, System.Data.XmlDataLoader._dataReader, System.Data.XmlDataLoader._isDiffgram, System.Data.XmlDataLoader._nodeToSchemaMap, System.Data.DataTable._xmlText, System.Data.DataRowCollection.AddWithColumnEvents(), System.array, System.Xml.XmlReader.AttributeCount, System.Convert.ChangeType(), System.Data.DataTable.Columns, System.count, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.XmlConvert.DecodeName(), System.Xml.XmlReader.Depth, System.Xml.Dictionary, System.Data.DataRowCollection.DiffInsertAt(), System.Data.XmlDataLoader.FIgnoreNamespace(), System.Data.ExceptionBuilder.FoundEntity(), System.Data.XmlToDatasetMap.GetColumnSchema(), System.Data.XmlToDatasetMap.GetTableForNode(), System.Globalization.CultureInfo.InvariantCulture, System.key, System.Data.XmlDataLoader.LoadColumn(), System.Data.XmlDataLoader.LoadTable(), System.Xml.XmlReader.LocalName, System.Xml.XmlReader.MoveToAttribute(), System.Xml.XmlReader.NamespaceURI, System.Data.DataTable.NewRow(), System.Data.DataTable.NewUninitializedRecord(), System.Xml.XmlReader.NodeType, System.Data.XmlDataLoader.ProcessXsdSchema(), System.Xml.XmlReader.Read(), System.Xml.XmlReader.ReadString(), System.Data.DataTable.RowDiffId, System.Data.DataTable.Rows, System.s, System.text, System.DBNull.Value, and System.Xml.XmlReader.Value.

Referenced by System.Data.XmlDataLoader.LoadColumn(), System.Data.XmlDataLoader.LoadData(), System.Data.XmlDataLoader.LoadTable(), and System.Data.XmlDataLoader.LoadTopMostTable().