//
// System.Data.SqlTypes.SqlXml
//
// Author:
// Umadevi S (sumadevi@novell.com)
// Veerapuram Varadhan (vvaradhan@novell.com>)
//
// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
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{
[SerializableAttribute]
[XmlSchemaProvider ("GetXsdType")]
public sealed class SqlXml : INullable, IXmlSerializable
{
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 ();
}
}
}
#endif
|