Drop of Mainsoft.System.Data
[mono.git] / mcs / class / System.Data / System.Data / XmlDataInferenceLoader.cs
index fc4640aa865e92d33a818dfd004b62b009112df6..d5e9747fbd486e708bbcd7630dd99c88449d449a 100755 (executable)
@@ -118,36 +118,34 @@ namespace System.Data
                        return GetColumn (name) != null;\r
                }\r
 \r
-               public DataColumn GetColumn (string name)
-               {
-                       foreach (DataColumn col in Elements)
-                               if (col.ColumnName == name)
-                                       return col;
-                       foreach (DataColumn col in Attributes)
-                               if (col.ColumnName == name)
-                                       return col;
-                       if (SimpleContent != null && name == SimpleContent.ColumnName)
-                               return SimpleContent;
-                       if (PrimaryKey != null && name == PrimaryKey.ColumnName)
-                               return PrimaryKey;
-                       return null;
-               }
-
-               public void RemoveElementColumn (string name)
-               {
-                       foreach (DataColumn col in Elements) {
-                               if (col.ColumnName == name) {
-                                       Elements.Remove (col);
-                                       return;
-                               }
-                       }
-               }
+               public DataColumn GetColumn (string name)\r
+               {\r
+                       foreach (DataColumn col in Elements)\r
+                               if (col.ColumnName == name)\r
+                                       return col;\r
+                       foreach (DataColumn col in Attributes)\r
+                               if (col.ColumnName == name)\r
+                                       return col;\r
+                       if (SimpleContent != null && name == SimpleContent.ColumnName)\r
+                               return SimpleContent;\r
+                       if (PrimaryKey != null && name == PrimaryKey.ColumnName)\r
+                               return PrimaryKey;\r
+                       return null;\r
+               }\r
+\r
+               public void RemoveElementColumn (string name)\r
+               {\r
+                       foreach (DataColumn col in Elements) {\r
+                               if (col.ColumnName == name) {\r
+                                       Elements.Remove (col);\r
+                                       return;\r
+                               }\r
+                       }\r
+               }\r
        }\r
 \r
        internal class XmlDataInferenceLoader\r
        {\r
-               const string XmlnsNS = "http://www.w3.org/2000/xmlns/";\r
-\r
                public static void Infer (DataSet dataset, XmlDocument document, XmlReadMode mode, string [] ignoredNamespaces)\r
                {\r
                        new XmlDataInferenceLoader (dataset, document, mode, ignoredNamespaces).ReadXml ();\r
@@ -348,9 +346,10 @@ namespace System.Data
                        bool hasText = false;\r
 \r
                        foreach (XmlAttribute attr in el.Attributes) {\r
-                               if (attr.NamespaceURI == XmlnsNS)\r
+                               if (attr.NamespaceURI == XmlConstants.XmlnsNS)\r
                                        continue;\r
-                               if (ignoredNamespaces.Contains (attr.NamespaceURI))\r
+                               if (ignoredNamespaces != null &&\r
+                                       ignoredNamespaces.Contains (attr.NamespaceURI))\r
                                        continue;\r
 \r
                                hasAttributes = true;\r
@@ -374,7 +373,7 @@ namespace System.Data
                                        XmlElement cel = n as XmlElement;\r
                                        string childLocalName = XmlConvert.DecodeName (cel.LocalName);\r
 \r
-                                       switch (GetElementMappingType (cel)) {\r
+                                       switch (GetElementMappingType (cel, ignoredNamespaces)) {\r
                                        case ElementMappingType.Simple:\r
                                                InferColumnElement (table, cel);\r
                                                break;\r
@@ -457,12 +456,13 @@ namespace System.Data
                        return col;\r
                }\r
 \r
-               private ElementMappingType GetElementMappingType (XmlElement el)\r
+               private static ElementMappingType GetElementMappingType (\r
+                       XmlElement el, ArrayList ignoredNamespaces)\r
                {\r
                        foreach (XmlAttribute attr in el.Attributes) {\r
-                               if (attr.NamespaceURI == XmlnsNS)\r
+                               if (attr.NamespaceURI == XmlConstants.XmlnsNS)\r
                                        continue;\r
-                               if (ignoredNamespaces.Contains (attr.NamespaceURI))\r
+                               if (ignoredNamespaces != null && ignoredNamespaces.Contains (attr.NamespaceURI))\r
                                        continue;\r
                                return ElementMappingType.Complex;\r
                        }\r
@@ -472,18 +472,31 @@ namespace System.Data
 \r
                        for (XmlNode n = el.NextSibling; n != null; n = n.NextSibling)\r
                                if (n.NodeType == XmlNodeType.Element && n.LocalName == el.LocalName)\r
-                                       return GetElementMappingType (n as XmlElement) == ElementMappingType.Complex ? ElementMappingType.Complex : ElementMappingType.Repeated;\r
+                                       return GetElementMappingType (\r
+                                               n as XmlElement,\r
+                                               ignoredNamespaces)\r
+                                               == ElementMappingType.Complex ?\r
+                                               ElementMappingType.Complex :\r
+                                               ElementMappingType.Repeated;\r
 \r
                        return ElementMappingType.Simple;\r
                }\r
 \r
                private bool IsDocumentElementTable ()\r
                {\r
-                       XmlElement top = document.DocumentElement;\r
+                       return IsDocumentElementTable (\r
+                               document.DocumentElement,\r
+                               ignoredNamespaces);\r
+               }\r
+\r
+               internal static bool IsDocumentElementTable (XmlElement top,\r
+                       ArrayList ignoredNamespaces)\r
+               {\r
                        foreach (XmlAttribute attr in top.Attributes) {\r
-                               if (attr.NamespaceURI == XmlnsNS)\r
+                               if (attr.NamespaceURI == XmlConstants.XmlnsNS)\r
                                        continue;\r
-                               if (ignoredNamespaces.Contains (attr.NamespaceURI))\r
+                               if (ignoredNamespaces != null &&\r
+                                       ignoredNamespaces.Contains (attr.NamespaceURI))\r
                                        continue;\r
                                // document element has attributes other than xmlns\r
                                return true;\r
@@ -492,7 +505,8 @@ namespace System.Data
                                XmlElement el = n as XmlElement;\r
                                if (el == null)\r
                                        continue;\r
-                               if (this.GetElementMappingType (el) == ElementMappingType.Simple)\r
+                               if (GetElementMappingType (el, ignoredNamespaces)\r
+                                       == ElementMappingType.Simple)\r
                                        return true;\r
                        }\r
                        return false;\r
@@ -504,7 +518,7 @@ namespace System.Data
                private bool IsPossibleColumnElement (XmlElement el)\r
                {\r
                        foreach (XmlAttribute attr in el.Attributes) {\r
-                               if (attr.NamespaceURI == "http://www.w3.org/2000/xmlns/")\r
+                               if (attr.NamespaceURI == XmlConstants.XmlnsNS)\r
                                        continue;\r
                                return false;\r
                        }\r