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

◆ HandleTable() [2/2]

XmlElement System.Data.XmlTreeGen.HandleTable ( DataTable table,
XmlDocument dc,
XmlElement schema,
bool genNested )
inlinepackage

Definition at line 1540 of file XmlTreeGen.cs.

1541 {
1542 XmlElement xmlElement = dc.CreateElement("xs", "element", "http://www.w3.org/2001/XMLSchema");
1543 bool flag = false;
1544 bool flag2 = false;
1545 if ((table.DataSet == null || (_ds != null && table.Namespace != _ds.Namespace)) && _schFormat == SchemaFormat.Remoting)
1546 {
1547 xmlElement.SetAttribute("targetNamespace", "urn:schemas-microsoft-com:xml-msdata", table.Namespace);
1548 }
1549 xmlElement.SetAttribute("name", table.EncodedTableName);
1550 if (table.Namespace.Length == 0)
1551 {
1552 DataTable dataTable = table;
1553 string text = dataTable.Namespace;
1554 while (string.IsNullOrEmpty(text))
1555 {
1556 DataRelation[] nestedParentRelations = dataTable.NestedParentRelations;
1557 if (nestedParentRelations.Length == 0)
1558 {
1559 text = ((_ds != null) ? _ds.Namespace : "");
1560 break;
1561 }
1562 int num = -1;
1563 for (int i = 0; i < nestedParentRelations.Length; i++)
1564 {
1565 if (nestedParentRelations[i].ParentTable != dataTable)
1566 {
1567 num = i;
1568 break;
1569 }
1570 }
1571 if (num == -1)
1572 {
1573 break;
1574 }
1575 dataTable = nestedParentRelations[num].ParentTable;
1576 text = dataTable.Namespace;
1577 }
1578 if (table.Namespace != text)
1579 {
1580 xmlElement.SetAttribute("form", "unqualified");
1581 flag2 = true;
1582 }
1583 }
1584 if (table.ShouldSerializeCaseSensitive())
1585 {
1586 xmlElement.SetAttribute("CaseSensitive", "urn:schemas-microsoft-com:xml-msdata", table.CaseSensitive.ToString());
1587 }
1588 if (table.ShouldSerializeLocale())
1589 {
1590 xmlElement.SetAttribute("Locale", "urn:schemas-microsoft-com:xml-msdata", table.Locale.ToString());
1591 }
1593 DataColumnCollection columns = table.Columns;
1594 int count = columns.Count;
1595 int num2 = 0;
1596 if (count == 1 || count == 2)
1597 {
1598 for (int j = 0; j < count; j++)
1599 {
1600 DataColumn dataColumn = columns[j];
1601 if (dataColumn.ColumnMapping == MappingType.Hidden)
1602 {
1603 DataRelationCollection childRelations = table.ChildRelations;
1604 for (int k = 0; k < childRelations.Count; k++)
1605 {
1606 if (childRelations[k].Nested && childRelations[k].ParentKey.ColumnsReference.Length == 1 && childRelations[k].ParentKey.ColumnsReference[0] == dataColumn)
1607 {
1608 num2++;
1609 }
1610 }
1611 }
1612 if (dataColumn.ColumnMapping == MappingType.Element)
1613 {
1614 num2++;
1615 }
1616 }
1617 }
1618 if (table._repeatableElement && num2 == 1)
1619 {
1620 DataColumn dataColumn2 = table.Columns[0];
1621 string text2 = XmlDataTypeName(dataColumn2.DataType);
1622 if (text2 == null || text2.Length == 0)
1623 {
1624 text2 = "anyType";
1625 }
1626 xmlElement.SetAttribute("type", XSDSchema.QualifiedName(text2));
1627 return xmlElement;
1628 }
1629 XmlElement xmlElement2 = dc.CreateElement("xs", "complexType", "http://www.w3.org/2001/XMLSchema");
1630 if (!table.TypeName.IsEmpty && _schFormat != SchemaFormat.Remoting)
1631 {
1632 XmlElement xmlElement3 = GetSchema(table.TypeName.Namespace);
1633 if (string.IsNullOrEmpty(table.TypeName.Namespace))
1634 {
1635 xmlElement3 = ((_ds != null) ? (flag2 ? GetSchema(_ds.Namespace) : GetSchema(table.Namespace)) : GetSchema(table.Namespace));
1636 }
1637 if (FindTypeNode(xmlElement3, table.TypeName.Name) == null)
1638 {
1639 xmlElement3.AppendChild(xmlElement2);
1640 }
1641 xmlElement2.SetAttribute("name", table.TypeName.Name);
1642 }
1643 else
1644 {
1645 xmlElement.AppendChild(xmlElement2);
1646 }
1647 if (!table.TypeName.IsEmpty && _schFormat != SchemaFormat.Remoting)
1648 {
1649 xmlElement.SetAttribute("type", NewDiffgramGen.QualifiedName((string)_prefixes[table.TypeName.Namespace], table.TypeName.Name));
1650 }
1651 XmlElement xmlElement4 = null;
1652 DataColumn xmlText = table.XmlText;
1653 if (xmlText != null)
1654 {
1655 XmlElement xmlElement5 = dc.CreateElement("xs", "simpleContent", "http://www.w3.org/2001/XMLSchema");
1656 if (xmlText.GetType() != typeof(DataColumn))
1657 {
1659 }
1660 else
1661 {
1663 }
1664 AddExtendedProperties(xmlText._extendedProperties, xmlElement5);
1665 if (xmlText.AllowDBNull)
1666 {
1667 xmlElement.SetAttribute("nillable", string.Empty, "true");
1668 }
1669 if (!xmlText.DefaultValueIsNull)
1670 {
1672 xmlElement5.SetAttribute("DefaultValue", "urn:schemas-microsoft-com:xml-msdata", xmlText.ConvertObjectToXml(xmlText.DefaultValue));
1673 }
1674 xmlElement5.SetAttribute("ColumnName", "urn:schemas-microsoft-com:xml-msdata", xmlText.ColumnName);
1675 xmlElement5.SetAttribute("Ordinal", "urn:schemas-microsoft-com:xml-msdata", xmlText.Ordinal.ToString(CultureInfo.InvariantCulture));
1676 xmlElement2.AppendChild(xmlElement5);
1677 XmlElement xmlElement6 = dc.CreateElement("xs", "extension", "http://www.w3.org/2001/XMLSchema");
1681 }
1682 xmlElement4 = dc.CreateElement("xs", "sequence", "http://www.w3.org/2001/XMLSchema");
1683 xmlElement2.AppendChild(xmlElement4);
1684 flag = HasMixedColumns(table);
1685 for (int l = 0; l < count; l++)
1686 {
1687 DataColumn dataColumn3 = columns[l];
1688 if (dataColumn3.ColumnMapping != MappingType.SimpleContent && (dataColumn3.ColumnMapping == MappingType.Attribute || dataColumn3.ColumnMapping == MappingType.Element || dataColumn3.ColumnMapping == MappingType.Hidden) && !IsAutoGenerated(dataColumn3))
1689 {
1690 bool flag3 = dataColumn3.ColumnMapping != MappingType.Element;
1694 }
1695 }
1696 if (table.XmlText == null && genNested)
1697 {
1698 DataRelationCollection childRelations2 = table.ChildRelations;
1699 for (int m = 0; m < childRelations2.Count; m++)
1700 {
1701 if (!childRelations2[m].Nested)
1702 {
1703 continue;
1704 }
1705 DataTable childTable = childRelations2[m].ChildTable;
1707 if (childTable == table)
1708 {
1709 xmlElement8 = dc.CreateElement("xs", "element", "http://www.w3.org/2001/XMLSchema");
1710 xmlElement8.SetAttribute("ref", table.EncodedTableName);
1711 }
1712 else if (childTable.NestedParentsCount > 1)
1713 {
1714 xmlElement8 = dc.CreateElement("xs", "element", "http://www.w3.org/2001/XMLSchema");
1715 xmlElement8.SetAttribute("ref", childTable.EncodedTableName);
1716 }
1717 else
1718 {
1720 }
1721 if (childTable.Namespace == table.Namespace)
1722 {
1723 xmlElement8.SetAttribute("minOccurs", "0");
1724 xmlElement8.SetAttribute("maxOccurs", "unbounded");
1725 }
1726 if (childTable.Namespace == table.Namespace || childTable.Namespace.Length == 0 || _schFormat == SchemaFormat.Remoting)
1727 {
1728 xmlElement4.AppendChild(xmlElement8);
1729 }
1730 else
1731 {
1732 if (childTable.NestedParentsCount <= 1)
1733 {
1735 }
1736 xmlElement8 = dc.CreateElement("xs", "element", "http://www.w3.org/2001/XMLSchema");
1737 xmlElement8.SetAttribute("ref", (string)_prefixes[childTable.Namespace] + ":" + childTable.EncodedTableName);
1739 }
1740 if (childRelations2[m].ChildKeyConstraint == null)
1741 {
1742 XmlElement xmlElement9 = _dc.CreateElement("xs", "annotation", "http://www.w3.org/2001/XMLSchema");
1744 XmlElement xmlElement10 = _dc.CreateElement("xs", "appinfo", "http://www.w3.org/2001/XMLSchema");
1747 }
1748 }
1749 }
1750 if (xmlElement4 != null && !xmlElement4.HasChildNodes)
1751 {
1753 }
1754 ConstraintCollection constraints = table.Constraints;
1755 string text3 = ((_ds == null) ? string.Empty : ((_ds.Namespace.Length != 0) ? "mstns:" : string.Empty));
1756 if (_schFormat != SchemaFormat.Remoting)
1757 {
1758 GetSchema(table.Namespace);
1759 text3 = ((table.Namespace.Length != 0) ? ((string)_prefixes[table.Namespace] + ":") : string.Empty);
1760 }
1761 for (int n = 0; n < constraints.Count; n++)
1762 {
1763 XmlElement xmlElement11 = null;
1764 if (constraints[n] is UniqueConstraint)
1765 {
1766 UniqueConstraint uniqueConstraint = (UniqueConstraint)constraints[n];
1768 {
1769 continue;
1770 }
1771 DataColumn[] columnsReference = uniqueConstraint.Key.ColumnsReference;
1772 xmlElement11 = dc.CreateElement("xs", "unique", "http://www.w3.org/2001/XMLSchema");
1773 if (_ds == null || _ds.Tables.InternalIndexOf(table.TableName) == -3)
1774 {
1775 xmlElement11.SetAttribute("TableNamespace", "urn:schemas-microsoft-com:xml-msdata", table.Namespace);
1776 }
1777 xmlElement11.SetAttribute("name", XmlConvert.EncodeLocalName(uniqueConstraint.SchemaName));
1778 if (uniqueConstraint.ConstraintName != uniqueConstraint.SchemaName)
1779 {
1780 xmlElement11.SetAttribute("ConstraintName", "urn:schemas-microsoft-com:xml-msdata", uniqueConstraint.ConstraintName);
1781 }
1783 XmlElement xmlElement12 = dc.CreateElement("xs", "selector", "http://www.w3.org/2001/XMLSchema");
1784 xmlElement12.SetAttribute("xpath", ".//" + text3 + table.EncodedTableName);
1785 xmlElement11.AppendChild(xmlElement12);
1786 if (uniqueConstraint.IsPrimaryKey)
1787 {
1788 xmlElement11.SetAttribute("PrimaryKey", "urn:schemas-microsoft-com:xml-msdata", "true");
1789 }
1790 if (columnsReference.Length != 0)
1791 {
1793 for (int num3 = 0; num3 < columnsReference.Length; num3++)
1794 {
1796 if (_schFormat != SchemaFormat.Remoting)
1797 {
1798 GetSchema(columnsReference[num3].Namespace);
1799 if (!string.IsNullOrEmpty(columnsReference[num3].Namespace))
1800 {
1801 stringBuilder.Append(_prefixes[columnsReference[num3].Namespace]).Append(':');
1802 }
1803 stringBuilder.Append(columnsReference[num3].EncodedColumnName);
1804 }
1805 else
1806 {
1807 stringBuilder.Append(text3).Append(columnsReference[num3].EncodedColumnName);
1808 }
1809 if (columnsReference[num3].ColumnMapping == MappingType.Attribute || columnsReference[num3].ColumnMapping == MappingType.Hidden)
1810 {
1811 stringBuilder.Insert(0, '@');
1812 }
1813 XmlElement xmlElement13 = dc.CreateElement("xs", "field", "http://www.w3.org/2001/XMLSchema");
1814 xmlElement13.SetAttribute("xpath", stringBuilder.ToString());
1815 xmlElement11.AppendChild(xmlElement13);
1816 }
1817 }
1819 }
1820 else
1821 {
1822 if (!(constraints[n] is ForeignKeyConstraint && genNested))
1823 {
1824 continue;
1825 }
1826 ForeignKeyConstraint foreignKeyConstraint = (ForeignKeyConstraint)constraints[n];
1828 {
1829 continue;
1830 }
1831 DataRelation dataRelation = foreignKeyConstraint.FindParentRelation();
1832 DataColumn[] columnsReference = foreignKeyConstraint.RelatedColumnsReference;
1833 UniqueConstraint uniqueConstraint2 = (UniqueConstraint)foreignKeyConstraint.RelatedTable.Constraints.FindConstraint(new UniqueConstraint("TEMP", columnsReference));
1835 if (uniqueConstraint2 == null)
1836 {
1837 xmlElement11 = dc.CreateElement("xs", "key", "http://www.w3.org/2001/XMLSchema");
1839 if (_ds == null || _ds.Tables.InternalIndexOf(table.TableName) == -3)
1840 {
1841 xmlElement11.SetAttribute("TableNamespace", "urn:schemas-microsoft-com:xml-msdata", table.Namespace);
1842 }
1843 xmlElement12 = dc.CreateElement("xs", "selector", "http://www.w3.org/2001/XMLSchema");
1844 xmlElement12.SetAttribute("xpath", ".//" + text3 + foreignKeyConstraint.RelatedTable.EncodedTableName);
1845 xmlElement11.AppendChild(xmlElement12);
1846 if (columnsReference.Length != 0)
1847 {
1849 for (int num4 = 0; num4 < columnsReference.Length; num4++)
1850 {
1852 if (_schFormat != SchemaFormat.Remoting)
1853 {
1854 GetSchema(columnsReference[num4].Namespace);
1855 if (!string.IsNullOrEmpty(columnsReference[num4].Namespace))
1856 {
1857 stringBuilder2.Append(_prefixes[columnsReference[num4].Namespace]).Append(':');
1858 }
1859 stringBuilder2.Append(columnsReference[num4].EncodedColumnName);
1860 }
1861 else
1862 {
1863 stringBuilder2.Append(text3).Append(columnsReference[num4].EncodedColumnName);
1864 }
1865 if (columnsReference[num4].ColumnMapping == MappingType.Attribute || columnsReference[num4].ColumnMapping == MappingType.Hidden)
1866 {
1867 stringBuilder2.Insert(0, '@');
1868 }
1869 XmlElement xmlElement13 = dc.CreateElement("xs", "field", "http://www.w3.org/2001/XMLSchema");
1870 xmlElement13.SetAttribute("xpath", stringBuilder2.ToString());
1871 xmlElement11.AppendChild(xmlElement13);
1872 }
1873 }
1875 }
1876 xmlElement11 = dc.CreateElement("xs", "keyref", "http://www.w3.org/2001/XMLSchema");
1877 xmlElement11.SetAttribute("name", XmlConvert.EncodeLocalName(foreignKeyConstraint.SchemaName));
1878 if (_ds == null || _ds.Tables.InternalIndexOf(foreignKeyConstraint.RelatedTable.TableName) == -3)
1879 {
1880 xmlElement11.SetAttribute("TableNamespace", "urn:schemas-microsoft-com:xml-msdata", foreignKeyConstraint.Table.Namespace);
1881 }
1882 if (uniqueConstraint2 == null)
1883 {
1884 xmlElement11.SetAttribute("refer", XmlConvert.EncodeLocalName(foreignKeyConstraint.SchemaName));
1885 }
1886 else
1887 {
1888 xmlElement11.SetAttribute("refer", XmlConvert.EncodeLocalName(uniqueConstraint2.SchemaName));
1889 }
1890 AddExtendedProperties(foreignKeyConstraint._extendedProperties, xmlElement11, typeof(ForeignKeyConstraint));
1891 if (foreignKeyConstraint.ConstraintName != foreignKeyConstraint.SchemaName)
1892 {
1893 xmlElement11.SetAttribute("ConstraintName", "urn:schemas-microsoft-com:xml-msdata", foreignKeyConstraint.ConstraintName);
1894 }
1895 if (dataRelation == null)
1896 {
1897 xmlElement11.SetAttribute("ConstraintOnly", "urn:schemas-microsoft-com:xml-msdata", "true");
1898 }
1899 else
1900 {
1901 if (dataRelation.Nested)
1902 {
1903 xmlElement11.SetAttribute("IsNested", "urn:schemas-microsoft-com:xml-msdata", "true");
1904 }
1905 AddExtendedProperties(dataRelation._extendedProperties, xmlElement11, typeof(DataRelation));
1906 if (foreignKeyConstraint.ConstraintName != dataRelation.RelationName)
1907 {
1908 xmlElement11.SetAttribute("RelationName", "urn:schemas-microsoft-com:xml-msdata", XmlConvert.EncodeLocalName(dataRelation.RelationName));
1909 }
1910 }
1911 xmlElement12 = dc.CreateElement("xs", "selector", "http://www.w3.org/2001/XMLSchema");
1912 xmlElement12.SetAttribute("xpath", ".//" + text3 + table.EncodedTableName);
1913 xmlElement11.AppendChild(xmlElement12);
1914 if (foreignKeyConstraint.AcceptRejectRule != 0)
1915 {
1916 xmlElement11.SetAttribute("AcceptRejectRule", "urn:schemas-microsoft-com:xml-msdata", TranslateAcceptRejectRule(foreignKeyConstraint.AcceptRejectRule));
1917 }
1918 if (foreignKeyConstraint.UpdateRule != Rule.Cascade)
1919 {
1920 xmlElement11.SetAttribute("UpdateRule", "urn:schemas-microsoft-com:xml-msdata", TranslateRule(foreignKeyConstraint.UpdateRule));
1921 }
1922 if (foreignKeyConstraint.DeleteRule != Rule.Cascade)
1923 {
1924 xmlElement11.SetAttribute("DeleteRule", "urn:schemas-microsoft-com:xml-msdata", TranslateRule(foreignKeyConstraint.DeleteRule));
1925 }
1927 if (columnsReference.Length != 0)
1928 {
1930 for (int num5 = 0; num5 < columnsReference.Length; num5++)
1931 {
1933 if (_schFormat != SchemaFormat.Remoting)
1934 {
1935 GetSchema(columnsReference[num5].Namespace);
1936 if (!string.IsNullOrEmpty(columnsReference[num5].Namespace))
1937 {
1938 stringBuilder3.Append(_prefixes[columnsReference[num5].Namespace]).Append(':');
1939 }
1940 stringBuilder3.Append(columnsReference[num5].EncodedColumnName);
1941 }
1942 else
1943 {
1944 stringBuilder3.Append(text3).Append(columnsReference[num5].EncodedColumnName);
1945 }
1946 if (columnsReference[num5].ColumnMapping == MappingType.Attribute || columnsReference[num5].ColumnMapping == MappingType.Hidden)
1947 {
1948 stringBuilder3.Insert(0, '@');
1949 }
1950 XmlElement xmlElement13 = dc.CreateElement("xs", "field", "http://www.w3.org/2001/XMLSchema");
1951 xmlElement13.SetAttribute("xpath", stringBuilder3.ToString());
1952 xmlElement11.AppendChild(xmlElement13);
1953 }
1954 }
1956 }
1957 }
1958 AddExtendedProperties(table._extendedProperties, xmlElement);
1959 return xmlElement;
1960 }
virtual bool Contains(object? item)
DataTableCollection Tables
Definition DataSet.cs:396
static void ValidateColumnMapping(Type columnType)
readonly ArrayList _tables
Definition XmlTreeGen.cs:26
static string TranslateRule(Rule rule)
static string XmlDataTypeName(Type type)
void HandleColumnType(DataColumn col, XmlDocument dc, XmlElement root, XmlElement schema)
XmlElement HandleColumn(DataColumn col, XmlDocument dc, XmlElement schema, bool fWriteOrdinal)
XmlElement GetSchema(string NamespaceURI)
static string TranslateAcceptRejectRule(AcceptRejectRule rule)
void AddXdoProperties(object instance, XmlElement root, XmlDocument xd)
Definition XmlTreeGen.cs:83
void AddColumnProperties(DataColumn col, XmlElement root)
XmlElement HandleRelation(DataRelation rel, XmlDocument dc)
readonly SchemaFormat _schFormat
Definition XmlTreeGen.cs:36
bool IsAutoGenerated(object o)
static void AddExtendedProperties(PropertyCollection props, XmlElement node)
Definition XmlTreeGen.cs:55
XmlElement _constraintSeparator
Definition XmlTreeGen.cs:46
XmlElement FindTypeNode(XmlElement node, string strType)
XmlElement HandleTable(DataTable table, XmlDocument dc, XmlElement schema)
bool HasMixedColumns(DataTable table)
static CultureInfo InvariantCulture
static ? string EncodeLocalName(string? name)
Definition XmlConvert.cs:49
XmlElement CreateElement(string name)
virtual void SetAttribute(string name, string? value)
virtual ? XmlNode AppendChild(XmlNode newChild)
Definition XmlNode.cs:739
virtual ? XmlNode PrependChild(XmlNode newChild)
Definition XmlNode.cs:734
virtual ? XmlNode InsertAfter(XmlNode newChild, XmlNode? refChild)
Definition XmlNode.cs:548
virtual ? XmlNode InsertBefore(XmlNode newChild, XmlNode? refChild)
Definition XmlNode.cs:445
virtual XmlNode RemoveChild(XmlNode oldChild)
Definition XmlNode.cs:662

References System.Data.XmlTreeGen._constraintSeparator, System.Data.XmlTreeGen._dc, System.Data.XmlTreeGen._ds, System.Data.XmlTreeGen._dsElement, System.Data.DataTable._extendedProperties, System.Data.XmlTreeGen._prefixes, System.Data.DataTable._repeatableElement, System.Data.XmlTreeGen._schFormat, System.Data.XmlTreeGen._tables, System.Data.XmlTreeGen.AddColumnProperties(), System.Data.XmlTreeGen.AddExtendedProperties(), System.Data.XmlTreeGen.AddXdoProperties(), System.Xml.XmlNode.AppendChild(), System.Data.DataTable.CaseSensitive, System.Data.DataTable.ChildRelations, System.Data.DataTable.Columns, System.Data.DataTable.Constraints, System.Collections.ArrayList.Contains(), System.Data.InternalDataCollectionBase.Count, System.count, System.Collections.ArrayList.Count, System.Xml.XmlDocument.CreateElement(), System.Data.DataTable.DataSet, System.Xml.Dictionary, System.Data.DataTable.EncodedTableName, System.Xml.XmlConvert.EncodeLocalName(), System.Data.XmlTreeGen.FindTypeNode(), System.Data.XmlTreeGen.GetSchema(), System.Data.XmlTreeGen.HandleColumn(), System.Data.XmlTreeGen.HandleColumnType(), System.Data.XmlTreeGen.HandleRelation(), System.Data.XmlTreeGen.HandleTable(), System.Data.XmlTreeGen.HasMixedColumns(), System.Xml.XmlNode.InsertAfter(), System.Xml.XmlNode.InsertBefore(), System.Data.DataTableCollection.InternalIndexOf(), System.Globalization.CultureInfo.InvariantCulture, System.Data.XmlTreeGen.IsAutoGenerated(), System.Xml.XmlQualifiedName.IsEmpty, System.Data.DataTable.Locale, System.Xml.XmlQualifiedName.Name, System.Data.DataSet.Namespace, System.Data.DataTable.Namespace, System.Xml.XmlQualifiedName.Namespace, System.Xml.XmlNode.PrependChild(), System.Data.XSDSchema.QualifiedName(), System.Data.NewDiffgramGen.QualifiedName(), System.Xml.XmlNode.RemoveChild(), System.Xml.XmlElement.SetAttribute(), System.Data.DataTable.ShouldSerializeCaseSensitive(), System.Data.DataTable.ShouldSerializeLocale(), System.Data.DataTable.TableName, System.Data.DataSet.Tables, System.text, System.Globalization.CultureInfo.ToString(), System.Data.XmlTreeGen.TranslateAcceptRejectRule(), System.Data.XmlTreeGen.TranslateRule(), System.Data.DataTable.TypeName, System.Data.XmlTreeGen.ValidateColumnMapping(), System.Data.XmlTreeGen.XmlDataTypeName(), and System.Data.DataTable.XmlText.