//
// Author:
// Umadevi S (sumadevi@novell.com)
+// Veerapuram Varadhan (vvaradhan@novell.com>)
//
// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
//
//
using System;
+using System.IO;
+using System.Xml;
+using System.Xml.Schema;
using System.Globalization;
using System.Threading;
+using System.Xml.Serialization;
+using System.Text;
#if NET_2_0
namespace System.Data.SqlTypes
{
- [MonoTODO]
- public class SqlXml
+ [SerializableAttribute]
+ [XmlSchemaProvider ("GetXsdType")]
+ public sealed class SqlXml : INullable, IXmlSerializable
{
- public SqlXml()
+ bool notNull;
+ string xmlValue;
+
+ public SqlXml ()
{
+ notNull = false;
+ xmlValue = null;
+ }
+
+ public SqlXml (Stream value)
+ {
+ if (value == null) {
+ notNull = false;
+ xmlValue = null;
+ } else {
+ int len = (int) value.Length;
+
+ if (len < 1) {
+ xmlValue = String.Empty;
+ } else {
+ int bufSize = 8192;
+ StringBuilder sb = new StringBuilder (len);
+
+ value.Position = 0;
+ // Now read value into a byte buffer.
+ byte [] bytes = null;
+
+ if (len < bufSize)
+ bufSize = len;
+ bytes = new byte [bufSize];
+
+ while (len > 0) {
+ // Read may return anything from 0 to bufSize.
+ int n = value.Read(bytes, 0, bufSize);
+ sb.Append (Encoding.Unicode.GetString (bytes, 0, n));
+
+ // The end of the file is reached.
+ if (n==0)
+ break;
+ len -= n;
+ }
+ xmlValue = sb.ToString ();
+ }
+ notNull = true;
+ }
+ }
+
+ public SqlXml (XmlReader value)
+ {
+ if (value == null) {
+ notNull = false;
+ xmlValue = null;
+ } else {
+ if (value.Read ()) {
+ value.MoveToContent ();
+ xmlValue = value.ReadOuterXml();
+ } else
+ xmlValue = String.Empty;
+ notNull = true;
+ }
+ }
+
+ public bool IsNull {
+ get { return !notNull; }
+ }
+
+ public static SqlXml Null {
+ get {
+ return new SqlXml ();
+ }
+ }
+
+ public string Value {
+ get {
+ if (notNull)
+ return xmlValue;
+ throw new SqlNullValueException ();
+ }
+ }
+
+ public static XmlQualifiedName GetXsdType (XmlSchemaSet schemaSet)
+ {
+ XmlQualifiedName qualifiedName = new XmlQualifiedName ("anyType", "http://www.w3.org/2001/XMLSchema");
+ return qualifiedName;
+ }
+
+ public XmlReader CreateReader ()
+ {
+ if (notNull) {
+ XmlReaderSettings xs = new XmlReaderSettings ();
+ xs.ConformanceLevel = ConformanceLevel.Fragment;
+ return XmlTextReader.Create (new StringReader (xmlValue), xs);
+ } else
+ throw new SqlNullValueException ();
+ }
+
+ [MonoTODO]
+ XmlSchema IXmlSerializable.GetSchema ()
+ {
+ throw new NotImplementedException ();
+ }
+
+ [MonoTODO]
+ void IXmlSerializable.ReadXml (XmlReader r)
+ {
+ throw new NotImplementedException ();
+ }
+
+ [MonoTODO]
+ void IXmlSerializable.WriteXml (XmlWriter writer)
+ {
+ throw new NotImplementedException ();
}
}
}