2002-11-04 Stuart Caborn <stuart.caborn@clearswift.com>
authorDaniel Morgan <monodanmorg@yahoo.com>
Mon, 4 Nov 2002 12:49:25 +0000 (12:49 -0000)
committerDaniel Morgan <monodanmorg@yahoo.com>
Mon, 4 Nov 2002 12:49:25 +0000 (12:49 -0000)
* list: added System.Data/XmlConstants.cs to
Linux build

    * System.Data/XmlConstants.cs: added -
* System.Data/DataTable.cs
* System.Data/DataSet.cs
* System.Data/DataColumn.cs
* System.Data/DataColumnCollection.cs
* System.Data/DataRelation.cs: modified -
Began initial implementation of WriteXml
and WriteXmlSchema. There is no support for DiffGrams
yet. In WriteSchema mode, relationships are missing,
all types are xs:string and the namespacing is not
working properly. Added support for Ordinals in the
DataColumnCollection and added support for
namespaces and prefixes.

svn path=/trunk/mcs/; revision=8811

mcs/class/System.Data/ChangeLog
mcs/class/System.Data/System.Data/DataColumnCollection.cs
mcs/class/System.Data/System.Data/DataSet.cs
mcs/class/System.Data/System.Data/XmlConstants.cs [new file with mode: 0755]
mcs/class/System.Data/list

index 42e47571606cbed65b0f27a264eef7d9e471f935..120c06e2082a2c157201403a73a25fd9fd7a2a94 100644 (file)
@@ -1,3 +1,22 @@
+2002-11-04  Stuart Caborn <stuart.caborn@clearswift.com>
+
+       * list: added System.Data/XmlConstants.cs to
+       Linux build
+
+    * System.Data/XmlConstants.cs: added -
+       * System.Data/DataTable.cs
+       * System.Data/DataSet.cs
+       * System.Data/DataColumn.cs
+       * System.Data/DataColumnCollection.cs
+       * System.Data/DataRelation.cs: modified -
+       Began initial implementation of WriteXml \r
+       and WriteXmlSchema. There is no support for DiffGrams \r
+       yet. In WriteSchema mode, relationships are missing, \r
+       all types are xs:string and the namespacing is not \r
+       working properly. Added support for Ordinals in the \r
+       DataColumnCollection and added support for \r
+       namespaces and prefixes.\r
+
 2002-11-03  Ville Palo <vi64pa@koti.soon.fi>
 
        * System.Data.SqlTypes/SqlBinary.cs: Finished and no errors generated
index 3495aa38ffb324e8516d92ef84d2c0ee471e7417..1e2d1af8b79305049af18a98976574ffa7480b89 100644 (file)
@@ -3,6 +3,7 @@
 //
 // Author:
 //   Christopher Podurgiel (cpodurgiel@msn.com)
+//   Stuart Caborn     <stuart.caborn@virgin.net>
 //
 // (C) Chris Podurgiel
 //
@@ -168,8 +169,9 @@ namespace System.Data
                                DataColumn column = new DataColumn(columnName);
                                
                                CollectionChangeEventArgs e = new CollectionChangeEventArgs(CollectionChangeAction.Add, this);
-                               column.SetTable(parentTable);
-                               base.List.Add(column);
+                               column.SetTable(parentTable);                           
+                               int ordinal = base.List.Add(column);
+                               column.SetOrdinal( ordinal );
                                OnCollectionChanged(e);
                                return column;
                        }
@@ -200,7 +202,8 @@ namespace System.Data
                                DataColumn column = new DataColumn(columnName, type);
                                CollectionChangeEventArgs e = new CollectionChangeEventArgs(CollectionChangeAction.Add, this);
                                column.SetTable(parentTable);
-                               base.List.Add(column);
+                               int ordinal = base.List.Add(column);
+                               column.SetOrdinal( ordinal );                           
                                OnCollectionChanged(e);
                                return column;
                        }
@@ -231,7 +234,8 @@ namespace System.Data
                                DataColumn column = new DataColumn(columnName, type, expression);
                                CollectionChangeEventArgs e = new CollectionChangeEventArgs(CollectionChangeAction.Add, this);
                                column.SetTable(parentTable);
-                               base.List.Add(column);
+                               int ordinal = base.List.Add(column);
+                               column.SetOrdinal( ordinal );
                                OnCollectionChanged(e);
                                return column;
                        }
@@ -415,7 +419,16 @@ namespace System.Data
                        //TODO: can remove first with exceptions
                        //and OnChanging Event
                        CollectionChangeEventArgs e = new CollectionChangeEventArgs(CollectionChangeAction.Remove, this);
+                       
+                       int ordinal = column.Ordinal;
                        base.List.Remove(column);
+                       
+                       //Update the ordinals
+                       for( int i = ordinal ; i < this.Count ; i ++ )
+                       {
+                               this[i].SetOrdinal( i );
+                       }
+                       
                        OnCollectionChanged(e);
                        return;
                }
@@ -426,13 +439,8 @@ namespace System.Data
                /// <param name="name">The name of the column to remove.</param>
                public void Remove(string name)
                {
-                       //TODO: can remove first with exceptions
-                       //and OnChanging Event
-                       DataColumn column = this[name];
-                       CollectionChangeEventArgs e = new CollectionChangeEventArgs(CollectionChangeAction.Remove, this);
-                       base.List.Remove(column);
-                       OnCollectionChanged(e);
-                       return;
+                       DataColumn column = this[name];                 
+                       Remove( column );
                }
 
                /// <summary>
@@ -441,12 +449,8 @@ namespace System.Data
                /// <param name="index">The index of the column to remove.</param>
                public void RemoveAt(int index)
                {
-                       //TODO: can remove first with exceptions
-                       //and OnChanging Event
-                       CollectionChangeEventArgs e = new CollectionChangeEventArgs(CollectionChangeAction.Remove, this);
-                       base.List.RemoveAt(index);
-                       OnCollectionChanged(e);
-                       return;
+                       DataColumn column = this[index];
+                       Remove( column );
                }
 
                /// <summary>
index eb484562085c10a82a780a139230db4ccf38fedd..3734c713f3eaa6e0190e7a0c8cd109531153430a 100644 (file)
@@ -5,6 +5,7 @@
 //   Christopher Podurgiel <cpodurgiel@msn.com>
 //   Daniel Morgan <danmorg@sc.rr.com>
 //   Rodrigo Moya <rodrigo@ximian.com>
+//   Stuart Caborn <stuart.caborn@virgin.net>
 //
 // (C) Ximian, Inc. 2002
 //
@@ -27,6 +28,8 @@ namespace System.Data
                ISupportInitialize, ISerializable {
 
                private string dataSetName;
+               private string _namespace;
+               private string prefix;
                private bool caseSensitive;
                private bool enforceConstraints;
                private DataTableCollection tableCollection;
@@ -124,24 +127,26 @@ namespace System.Data
                public string Namespace {
                        [MonoTODO]
                        get {
-                               throw new NotImplementedException ();
+                               return _namespace;
                        } 
                        
                        [MonoTODO]
                        set {
-                               throw new NotImplementedException ();
+                               //TODO - trigger an event if this happens?
+                               _namespace = value;
                        }
                }
 
                public string Prefix {
                        [MonoTODO]
                        get {
-                               throw new NotImplementedException ();
+                               return prefix;
                        } 
                        
                        [MonoTODO]
                        set {
-                               throw new NotImplementedException ();
+                               //TODO - trigger an event if this happens?
+                               prefix = value;
                        }
                }
 
@@ -208,7 +213,7 @@ namespace System.Data
 
                public string GetXml()
                {
-                       throw new NotImplementedException ();
+                       return "Fish!";
                }
 
                public string GetXmlSchema()
@@ -228,61 +233,127 @@ namespace System.Data
 
                public void WriteXml(Stream stream)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter writer = new XmlTextWriter(stream, null );
+                       
+                       WriteXml( writer );
                }
 
+               ///<summary>
+               /// Writes the current data for the DataSet to the specified file.
+               /// </summary>
+               /// <param name="filename">Fully qualified filename to write to</param>
                public void WriteXml(string fileName)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter writer = new XmlTextWriter(fileName, null );
+                       
+                       WriteXml( writer );
                }
 
                public void WriteXml(TextWriter writer)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter xwriter = new XmlTextWriter(writer );
+                       
+                       WriteXml( xwriter );
                }
 
                public void WriteXml(XmlWriter writer)
                {
-                       throw new NotImplementedException ();
+                       WriteXml( writer, XmlWriteMode.IgnoreSchema );
                }
 
                public void WriteXml(Stream stream, XmlWriteMode mode)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter writer = new XmlTextWriter(stream, null );
+                       
+                       WriteXml( writer, mode );
                }
 
                public void WriteXml(string fileName, XmlWriteMode mode)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter writer = new XmlTextWriter(fileName, null );
+                       
+                       WriteXml( writer, mode );
                }
 
                public void WriteXml(TextWriter writer, XmlWriteMode mode)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter xwriter = new XmlTextWriter(writer);
+                       
+                       WriteXml( xwriter, mode );
                }
 
                public void WriteXml(XmlWriter writer, XmlWriteMode mode)
                {
-                       throw new NotImplementedException ();
+                       writer.WriteStartDocument();
+                       
+                                               
+                       WriteStartElement( writer, mode, Namespace, Prefix, DataSetName );
+                       
+                       if( mode == XmlWriteMode.WriteSchema )
+                       {
+                               DoWriteXmlSchema( writer );
+                       }
+                       
+                       //Write out each table in order, providing it is not
+                       //part of another table structure via a nested parent relationship
+                       foreach( DataTable table in Tables )
+                       {               
+                               bool isTopLevel = true;
+                               //FIXME: Uncomment this when Parentrelations is implemented
+                               /*
+                               foreach( DataRelation rel in table.ParentRelations )
+                               {
+                                       if( rel.Nested )
+                                       {
+                                               isTopLevel = false;
+                                               break;
+                                       }
+                               }
+                               */
+                               
+                               if( isTopLevel )
+                               {
+                                       WriteTable(  writer, table, mode );
+                               }
+                       }
+                       
+                       writer.WriteEndElement();
+                       
+                       writer.WriteEndDocument();
+                                       
                }
 
                public void WriteXmlSchema(Stream stream)
                {
-                       throw new NotImplementedException ();
+                       XmlWriter writer = new XmlTextWriter(stream, null  );
+                       
+                       WriteXmlSchema( writer );       
                }
 
                public void WriteXmlSchema(string fileName)
-               {
-                       throw new NotImplementedException ();
+           {
+                       XmlWriter writer = new XmlTextWriter( fileName, null );
+               
+               WriteXmlSchema( writer );
                }
 
                public void WriteXmlSchema(TextWriter writer)
                {
+                       XmlWriter xwriter = new XmlTextWriter( writer );
+                       
+                       WriteXmlSchema( xwriter );
                }
 
                public void WriteXmlSchema(XmlWriter writer)
                {
-                       throw new NotImplementedException ();
+                       //Create a skeleton doc and then write the schema 
+                       //proper which is common to the WriteXml method in schema mode
+                       writer.WriteStartDocument();
+                       
+                       DoWriteXmlSchema( writer );
+                       
+                       writer.WriteEndDocument();
+                       
                }
 
                #endregion // Public Methods
@@ -332,5 +403,310 @@ namespace System.Data
                        throw new NotImplementedException ();
                }
                #endregion
+               
+               #region Private Xml Serialisation
+       
+               private void WriteTable( XmlWriter writer, DataTable table, XmlWriteMode mode )
+               {
+                       //The columns can be attributes, hidden, elements, or simple content
+                       //There can be 0-1 simple content cols or 0-* elements
+                       System.Collections.ArrayList atts;
+                       System.Collections.ArrayList elements;
+                       DataColumn simple = null;
+                       
+                       SplitColumns( table, out atts, out elements, out simple );
+                       
+                       foreach( DataRow row in table.Rows )
+                       {
+                               //sort out the namespacing
+                               string nspc = table.Namespace.Length > 0 ? table.Namespace : Namespace;
+                                                               
+                               WriteStartElement( writer, mode, nspc, table.Prefix, table.TableName );
+                               
+                               foreach( DataColumn col in atts )
+                               {                                       
+                                       WriteAttributeString( writer, mode, col.Namespace, col.Prefix, col.ColumnName, row[col].ToString() );
+                               }
+                               
+                               if( simple != null )
+                               {
+                                       writer.WriteString( row[simple].ToString() );
+                               }
+                               else
+                               {                                       
+                                       foreach( DataColumn col in elements )
+                                       {
+                                               string colnspc = nspc;
+                                               
+                                               if( col.Namespace != null )
+                                               {
+                                                       colnspc = col.Namespace;
+                                               }
+                               
+                                               //TODO check if I can get away with write element string
+                                               WriteStartElement( writer, mode, colnspc, col.Prefix, col.ColumnName );
+                                               writer.WriteString( row[col].ToString() );
+                                               writer.WriteEndElement();
+                                       }
+                               }
+                               
+                               //TODO write out the nested child relations
+                               
+                               writer.WriteEndElement();
+                       }
+               }
+                   
+               private void WriteStartElement( XmlWriter writer, XmlWriteMode mode, string nspc, string prefix, string name )
+               {                       
+                       switch(  mode )
+                               {
+                                       case XmlWriteMode.WriteSchema:
+                                               if( nspc == null || nspc == "" )
+                                               {
+                                                       writer.WriteStartElement( name );
+                                               }
+                                               else if( prefix != null )
+                                               {                                                       
+                                                       writer.WriteStartElement(prefix, name, nspc );
+                                               }                                               
+                                               else
+                                               {                                       
+                                                       writer.WriteStartElement( writer.LookupPrefix( nspc ), name, nspc );
+                                               }
+                                               break;
+                                       case XmlWriteMode.DiffGram:
+                                               throw new NotImplementedException();
+                                       default:
+                                               writer.WriteStartElement(name );
+                                               break;                                  
+                               };
+               }
+               
+               private void WriteAttributeString( XmlWriter writer, XmlWriteMode mode, string nspc, string prefix, string name, string stringValue )
+               {
+                       switch(  mode )
+                               {
+                                       case XmlWriteMode.WriteSchema:
+                                               writer.WriteAttributeString(prefix, name, nspc );
+                                               break;
+                                       case XmlWriteMode.DiffGram:
+                                               throw new NotImplementedException();                            
+                                       default:
+                                               writer.WriteAttributeString(name, stringValue );
+                                               break;                                  
+                               };
+               }
+
+               private void DoWriteXmlSchema( XmlWriter writer )
+               {
+                       //Create the root element and declare all the namespaces etc
+                       writer.WriteStartElement(       XmlConstants.SchemaPrefix,
+                                                       XmlConstants.SchemaElement,                                                                                                                                      
+                                                                               XmlConstants.SchemaNamespace );
+                       
+                       writer.WriteAttributeString( XmlConstants.Id, DataSetName );
+                       writer.WriteAttributeString( XmlConstants.TargetNamespace, Namespace );
+                       writer.WriteAttributeString( "xmlns:" + XmlConstants.TnsPrefix, Namespace );
+                       writer.WriteAttributeString( "xmlns", Namespace );
+                       writer.WriteAttributeString(  "xmlns:" + XmlConstants.MsdataPrefix,                 
+                                                   XmlConstants.MsdataNamespace );
+                       //Set up the attribute and element forms.  
+                       //TODO - is it possible to change this?
+                       //I couldn't spot if it was so I assumed
+                       //that this is set to qualified all round basedon the MS output
+                       writer.WriteAttributeString( XmlConstants.AttributeFormDefault, 
+                                                   XmlConstants.Qualified );
+                       writer.WriteAttributeString( XmlConstants.ElementFormDefault, 
+                                                   XmlConstants.Qualified );
+                       
+                       
+                       //<xs:element name="DSName msdata:IsDataSet="true" msdata:Locale="machine-locale">
+                       //Create the data set element
+                       //All the tables are represented as choice elements in an unlimited series
+                       writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                       XmlConstants.Element,
+                                                       XmlConstants.SchemaNamespace );
+                       
+                       writer.WriteAttributeString( XmlConstants.Name, DataSetName );
+                       writer.WriteAttributeString( XmlConstants.MsdataPrefix,  XmlConstants.IsDataSet, XmlConstants.MsdataNamespace, "true" );
+                       //FIXME - sort out the locale string!
+                       writer.WriteAttributeString( XmlConstants.MsdataPrefix, XmlConstants.Locale, XmlConstants.MsdataNamespace, "en-us" );
+                       
+                       //<xs:complexType>
+                       writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                       XmlConstants.ComplexType,
+                                                       XmlConstants.SchemaNamespace );
+                       
+                       //<xs:choice maxOccurs="unbounded">
+                       writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                       XmlConstants.Choice,
+                                                       XmlConstants.SchemaNamespace );
+                       
+                       writer.WriteAttributeString( XmlConstants.MaxOccurs, XmlConstants.Unbounded );
+                       
+                       
+                       //Write out schema for each table in order, providing it is not
+                       //part of another table structure via a nested parent relationship
+                       //TODO - is this correct? should I be using nested objects?
+                       foreach( DataTable table in Tables )
+                       {               
+                               bool isTopLevel = true;
+                               //FIXME: Uncomment this when ParentRelations class is implemented
+                               /*
+                               foreach( DataRelation rel in table.ParentRelations )
+                               {
+                                       if( rel.Nested )
+                                       {
+                                               isTopLevel = false;
+                                               break;
+                                       }
+                               }
+                               */
+                               
+                               if( isTopLevel )
+                               {
+                                       WriteTableSchema(  writer, table );
+                               }
+                       }
+                       
+                       //</xs:choice>
+                       writer.WriteEndElement();
+                       //</xs:complexType>
+                       writer.WriteEndElement();
+                       
+                       //TODO - now add in the relationships as key and unique constraints etc
+                       
+                       //</xs:element>
+                       writer.WriteEndElement();
+                       
+                       //</schema>
+                       writer.WriteEndElement();
+               }
+               
+               private void WriteTableSchema( XmlWriter writer, DataTable table )
+               {
+                       ArrayList elements;
+                       ArrayList atts;
+                       DataColumn simple;
+                       
+                       SplitColumns( table,out  atts, out elements, out simple );
+                       
+                       //<xs:element name="TableName">
+                       writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                XmlConstants.Element,
+                                                XmlConstants.SchemaNamespace );
+                       
+                       writer.WriteAttributeString( XmlConstants.Name, table.TableName );
+                       
+                       //<xs:complexType>
+                       writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                XmlConstants.ComplexType,
+                                                XmlConstants.SchemaNamespace );
+                       
+                       //TODO - what about the simple content?
+                       if( elements.Count == 0 )                               
+                       {                       
+                       }
+                       else
+                       {                               
+                       //A sequence of element types or a simple content node
+                       //<xs:sequence>
+                       writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                XmlConstants.Sequence,
+                                                XmlConstants.SchemaNamespace );
+                       foreach( DataColumn col in elements )
+                       {
+                               //<xs:element name=ColumnName type=MappedType Ordinal=index>
+                               writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                XmlConstants.Element,
+                                                XmlConstants.SchemaNamespace );
+                               
+                               writer.WriteAttributeString( XmlConstants.Name, col.ColumnName );
+                               writer.WriteAttributeString( XmlConstants.Type, MapType( col.DataType ) );
+                               if( col.AllowDBNull )
+                               {
+                                       writer.WriteAttributeString( XmlConstants.MinOccurs, "0" );
+                               }
+                               writer.WriteAttributeString( XmlConstants.MsdataPrefix,
+                                                           XmlConstants.Ordinal,
+                                                           XmlConstants.MsdataNamespace,
+                                                           col.Ordinal.ToString() );
+                               
+                               //</xs:element>
+                               writer.WriteEndElement();
+                       }
+                       //</xs:sequence>
+                       writer.WriteEndElement();
+                               
+                       }
+                       //Then a list of attributes
+                       foreach( DataColumn col in atts )
+                       {
+                               //<xs:attribute name=col.ColumnName form="unqualified" type=MappedType/>
+                               writer.WriteStartElement( XmlConstants.SchemaPrefix,
+                                                XmlConstants.Attribute,
+                                                XmlConstants.SchemaNamespace );
+                               
+                               writer.WriteAttributeString( XmlConstants.Name, col.ColumnName );
+                               writer.WriteAttributeString( XmlConstants.Form, XmlConstants.Unqualified );
+                               writer.WriteAttributeString( XmlConstants.Type, MapType( col.DataType ) );
+                               
+                               writer.WriteEndElement();
+                       }
+                       
+                       //</xs:complexType>
+                       writer.WriteEndElement();
+                       
+                       //</xs:element>
+                       writer.WriteEndElement();
+               }
+               #endregion
+       
+               
+               ///<summary>
+               /// Helper function to split columns into attributes elements and simple
+               /// content
+               /// </summary>
+               private void SplitColumns(      DataTable table,
+                                                                       out ArrayList atts,
+                                                                       out ArrayList elements,
+                                                                       out DataColumn simple)
+               {
+                       //The columns can be attributes, hidden, elements, or simple content
+                       //There can be 0-1 simple content cols or 0-* elements
+                       atts = new System.Collections.ArrayList();
+                       elements = new System.Collections.ArrayList();
+                       simple = null;
+                       
+                       //Sort out the columns
+                       foreach( DataColumn col in table.Columns )
+                       {
+                               switch( col.ColumnMapping )
+                               {
+                                       case MappingType.Attribute:
+                                               atts.Add( col );
+                                               break;
+                                       case MappingType.Element:
+                                               elements.Add( col );
+                                               break;
+                                       case MappingType.SimpleContent:
+                                               if( simple != null )
+                                               {
+                                                       throw new System.InvalidOperationException( "There may only be one simple content element" );
+                                               }
+                                               simple = col;
+                                               break;
+                                       default:
+                                               //ignore Hidden elements
+                                               break;
+                               }
+                       }
+               }
+               
+               private string MapType( Type type )
+               {
+                       //TODO - 
+                       return "xs:string";
+               }
        }
 }
diff --git a/mcs/class/System.Data/System.Data/XmlConstants.cs b/mcs/class/System.Data/System.Data/XmlConstants.cs
new file mode 100755 (executable)
index 0000000..15c4b38
--- /dev/null
@@ -0,0 +1,56 @@
+// 
+// System.Data/DataSet.cs
+//
+// Author:
+//   Stuart Caborn <stuart.caborn@virgin.net>
+//
+// (C) Stuart Caborn 2002
+
+namespace System.Data 
+{
+///<summary>
+///Constants class to hold XmlSerialisation
+///strings
+///</summary>
+internal class XmlConstants
+{
+       ///<summary>The namespace prefix for the xml schema namespace</summary>
+       public const string SchemaPrefix = "xs";
+       
+       ///<summary>
+       /// The w3 XmlSchema namespace
+       /// </summary>
+       public const string SchemaNamespace = "http://www.w3.org/2001/XMLSchema";
+       
+       
+       //xs elements and values 
+       //TODO - these must exist somwhere else???
+       public const string SchemaElement = "schema";
+       public const string AttributeFormDefault = "attributeFormDefault";
+       public const string ElementFormDefault = "elementFormDefault";
+       public const string Qualified = "qualified";
+       public const string Unqualified = "unqualified";
+       public const string Element = "element";
+       public const string Choice = "choice";
+       public const string ComplexType = "complexType";
+       public const string Sequence = "sequence";
+       public const string MaxOccurs = "maxOccurs";
+       public const string MinOccurs = "minOccurs";
+       public const string Unbounded = "unbounded";
+       public const string Name = "name";
+       public const string Type = "type";
+       public const string Id = "id";
+       public const string TargetNamespace = "targetNamespace";
+       public const string Form = "form";
+       public const string Attribute = "attribute";
+       
+       //ms schema objects     
+       public const string MsdataPrefix = "msdata";    
+       public const string MsdataNamespace = "urn:schemas-microsoft-com:xml-msdata";
+       public const string TnsPrefix = "mstns";
+       public const string IsDataSet = "IsDataSet";
+       public const string Locale = "Locale";
+       public const string Ordinal = "Ordinal";
+}
+
+}
index 1f10f1599031eab3c2d464cce622e37fe5887c7c..258922d584d2e6220cb9930b7bfcfafe091b53ac 100755 (executable)
@@ -85,6 +85,7 @@ System.Data/UpdateStatus.cs
 System.Data/VersionNotFoundException.cs
 System.Data/XmlReadMode.cs
 System.Data/XmlWriteMode.cs
+System.Data/XmlConstants.cs
 System.Data.Common/DataAdapter.cs
 System.Data.Common/DataColumnMapping.cs
 System.Data.Common/DataColumnMappingCollection.cs