2004-01-11 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Tue, 11 Jan 2005 16:19:25 +0000 (16:19 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Tue, 11 Jan 2005 16:19:25 +0000 (16:19 -0000)
* DataSet.cs,
  CustomDataClassGenerator.cs :
  In DataSet class, IXmlSerializable.GetSchema() returns null.
  In strongly-typed class, it returns schema.

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

mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/CustomDataClassGenerator.cs
mcs/class/System.Data/System.Data/DataSet.cs

index 9255dfd6e872ce840e8d1df46a830d88aa8ca357..3d2aa225b25e1c7326102fbee9b535cce96ac182 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-11  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DataSet.cs,
+         CustomDataClassGenerator.cs :
+         In DataSet class, IXmlSerializable.GetSchema() returns null.
+         In strongly-typed class, it returns schema.
+
 2004-01-07  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlDataInferenceLoader.cs : test driver class should be excluded.
index 9d2ba26efb77a149e60303289bb60f803aa3fb89..52b07a7d5548acb61788629d50ff41f8a254c924 100755 (executable)
@@ -44,6 +44,8 @@ using System.Text;
 using System.CodeDom.Compiler;
 using System.ComponentModel;
 using System.Runtime.Serialization;
+using System.Xml.Schema;
+using System.Xml.Serialization;
 
 // only for Driver
 using Microsoft.CSharp;
@@ -489,6 +491,7 @@ namespace System.Data
                        // Type
                        dsType = new CodeTypeDeclaration (opts.DataSetName (ds.DataSetName, gen));
                        dsType.BaseTypes.Add (TypeRef (typeof (DataSet)));
+                       dsType.BaseTypes.Add (TypeRef (typeof (IXmlSerializable)));
 
                        // .ctor()
                        dsType.Members.Add (CreateDataSetDefaultCtor ());
@@ -509,10 +512,12 @@ namespace System.Data
 
                        // ReadXmlSerializable()
                        dsType.Members.Add (CreateDataSetReadXmlSerializable ());
+*/
 
                        // GetSchemaSerializable()
                        dsType.Members.Add (CreateDataSetGetSchemaSerializable ());
-*/
+
+                       dsType.Members.Add (CreateDataSetGetSchema ());
                        dsType.Members.Add (CreateDataSetInitializeClass ());
                        dsType.Members.Add (CreateDataSetInitializeFields ());
                        dsType.Members.Add (CreateDataSetSchemaChanged ());
@@ -669,6 +674,40 @@ namespace System.Data
                        return method;
                }
 
+               private CodeMemberMethod CreateDataSetGetSchema ()
+               {
+                       CodeMemberMethod m = new CodeMemberMethod ();
+                       m.PrivateImplementationType = TypeRef (typeof (IXmlSerializable));
+                       m.Name = "GetSchema";
+                       m.ReturnType = TypeRef (typeof (XmlSchema));
+                       m.Statements.Add (Return (MethodInvoke ("GetSchemaSerializable")));
+
+                       return m;
+               }
+
+               private CodeMemberMethod CreateDataSetGetSchemaSerializable ()
+               {
+                       CodeMemberMethod m = new CodeMemberMethod ();
+                       m.Attributes = MemberAttributes.Family | 
+                               MemberAttributes.Override;
+                       m.Name = "GetSchemaSerializable";
+                       m.ReturnType = TypeRef (typeof (XmlSchema));
+
+                       m.Statements.Add (VarDecl (typeof (StringWriter), "sw",
+                               New (typeof (StringWriter))));
+                       m.Statements.Add (Eval (MethodInvoke ("WriteXmlSchema", Local ("sw"))));
+                       m.Statements.Add (Return (MethodInvoke (
+                               TypeRefExp (typeof (XmlSchema)),
+                               "Read",
+                               New (typeof (XmlTextReader),
+                                       New (typeof (StringReader),
+                                               MethodInvoke (Local ("sw"),
+                                                       "ToString"))),
+                               Const (null))));
+
+                       return m;
+               }
+
                private CodeMemberMethod CreateDataSetInitializeClass ()
                {
                        CodeMemberMethod m = new CodeMemberMethod ();
index 275521e66ad09d66da2059967be40980fe61c2a0..a79ad17fe74f83185f1ed213543a26b8596e6b10 100644 (file)
@@ -1070,7 +1070,7 @@ namespace System.Data {
 
                XmlSchema IXmlSerializable.GetSchema ()
                {
-                       return BuildSchema ();
+                       return GetSchemaSerializable ();
                }
 
                protected virtual bool ShouldSerializeRelations ()
@@ -1478,6 +1478,7 @@ namespace System.Data {
                                if (prefix != "xmlns" && prefix != "xml" && ns != null && ns != String.Empty)
                                        schema.Namespaces.Add (prefix, ns);
                        }
+
                        return schema;
                }