//
using System;
+using System.Xml;
+using System.Xml.Schema;
using System.Globalization;
+using System.Xml.Serialization;
namespace System.Data.SqlTypes
{
+#if NET_2_0
+ [SerializableAttribute]
+ [XmlSchemaProvider ("GetXsdType")]
+#endif
public struct SqlInt64 : INullable, IComparable
+#if NET_2_0
+ , IXmlSerializable
+#endif
{
#region Fields
- long value;
-
+ private long value;
private bool notNull;
public static readonly SqlInt64 MaxValue = new SqlInt64 (9223372036854775807);
#region Constructors
- public SqlInt64 (long value)
+ public SqlInt64 (long value)
{
this.value = value;
notNull = true;
#region Properties
- public bool IsNull {
+ public bool IsNull {
get { return !notNull; }
}
- public long Value {
- get {
+ public long Value {
+ get {
if (this.IsNull)
throw new SqlNullValueException ();
else
- return value;
+ return value;
}
}
return CompareSqlInt64 ((SqlInt64) value);
}
- #if NET_2_0
+#if NET_2_0
public int CompareTo (SqlInt64 value)
{
return CompareSqlInt64 ((SqlInt64) value);
}
- #endif
+#endif
private int CompareSqlInt64 (SqlInt64 value)
{
{
if (!(value is SqlInt64))
return false;
- else if (this.IsNull && ((SqlInt64)value).IsNull)
- return true;
+ else if (this.IsNull)
+ return ((SqlInt64)value).IsNull;
else if (((SqlInt64)value).IsNull)
return false;
else
return (x % y);
}
- #if NET_2_0
+#if NET_2_0
public static SqlInt64 Modulus (SqlInt64 x, SqlInt64 y)
{
return (x % y);
}
- #endif
+#endif
public static SqlInt64 Multiply (SqlInt64 x, SqlInt64 y)
{
public SqlBoolean ToSqlBoolean ()
{
- return ((SqlBoolean)this);
+ return ((SqlBoolean) this);
}
public SqlByte ToSqlByte ()
{
- return ((SqlByte)this);
+ return ((SqlByte) this);
}
public SqlDecimal ToSqlDecimal ()
{
- return ((SqlDecimal)this);
+ return ((SqlDecimal) this);
}
public SqlDouble ToSqlDouble ()
{
- return ((SqlDouble)this);
+ return ((SqlDouble) this);
}
public SqlInt16 ToSqlInt16 ()
{
- return ((SqlInt16)this);
+ return ((SqlInt16) this);
}
public SqlInt32 ToSqlInt32 ()
{
- return ((SqlInt32)this);
+ return ((SqlInt32) this);
}
public SqlMoney ToSqlMoney ()
{
- return ((SqlMoney)this);
+ return ((SqlMoney) this);
}
public SqlSingle ToSqlSingle ()
{
- return ((SqlSingle)this);
+ return ((SqlSingle) this);
}
public SqlString ToSqlString ()
{
- return ((SqlString)this);
+ return ((SqlString) this);
}
public override string ToString ()
public static SqlBoolean operator == (SqlInt64 x, SqlInt64 y)
{
- if (x.IsNull || y.IsNull)
+ if (x.IsNull || y.IsNull)
return SqlBoolean.Null;
else
return new SqlBoolean (x.Value == y.Value);
public static SqlBoolean operator > (SqlInt64 x, SqlInt64 y)
{
- if (x.IsNull || y.IsNull)
+ if (x.IsNull || y.IsNull)
return SqlBoolean.Null;
else
return new SqlBoolean (x.Value > y.Value);
public static SqlBoolean operator >= (SqlInt64 x, SqlInt64 y)
{
- if (x.IsNull || y.IsNull)
+ if (x.IsNull || y.IsNull)
return SqlBoolean.Null;
else
return new SqlBoolean (x.Value >= y.Value);
public static SqlBoolean operator != (SqlInt64 x, SqlInt64 y)
{
- if (x.IsNull || y.IsNull)
+ if (x.IsNull || y.IsNull)
return SqlBoolean.Null;
else
return new SqlBoolean (!(x.Value == y.Value));
public static SqlBoolean operator < (SqlInt64 x, SqlInt64 y)
{
- if (x.IsNull || y.IsNull)
+ if (x.IsNull || y.IsNull)
return SqlBoolean.Null;
else
return new SqlBoolean (x.Value < y.Value);
public static SqlBoolean operator <= (SqlInt64 x, SqlInt64 y)
{
- if (x.IsNull || y.IsNull)
+ if (x.IsNull || y.IsNull)
return SqlBoolean.Null;
else
return new SqlBoolean (x.Value <= y.Value);
public static SqlInt64 operator % (SqlInt64 x, SqlInt64 y)
{
- return new SqlInt64(x.Value % y.Value);
+ return new SqlInt64 (x.Value % y.Value);
}
public static SqlInt64 operator * (SqlInt64 x, SqlInt64 y)
}
}
- public static SqlInt64 operator - (SqlInt64 n)
+ public static SqlInt64 operator - (SqlInt64 x)
{
- return new SqlInt64 (-(n.Value));
+ return new SqlInt64 (-(x.Value));
}
public static explicit operator SqlInt64 (SqlBoolean x)
{
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else
- return new SqlInt64 ((long)x.ByteValue);
+ return new SqlInt64 ((long) x.ByteValue);
}
public static explicit operator SqlInt64 (SqlDecimal x)
{
checked {
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else
- return new SqlInt64 ((long)x.Value);
+ return new SqlInt64 ((long) x.Value);
}
}
public static explicit operator SqlInt64 (SqlDouble x)
{
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else {
checked {
- return new SqlInt64 ((long)x.Value);
+ return new SqlInt64 ((long) x.Value);
}
}
}
public static explicit operator SqlInt64 (SqlMoney x)
{
checked {
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else
return new SqlInt64 ((long) Math.Round (x.Value));
public static explicit operator SqlInt64 (SqlSingle x)
{
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else {
checked {
- return new SqlInt64 ((long)x.Value);
+ return new SqlInt64 ((long) x.Value);
}
}
}
public static implicit operator SqlInt64 (SqlByte x)
{
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else
- return new SqlInt64 ((long)x.Value);
+ return new SqlInt64 ((long) x.Value);
}
public static implicit operator SqlInt64 (SqlInt16 x)
{
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else
- return new SqlInt64 ((long)x.Value);
+ return new SqlInt64 ((long) x.Value);
}
public static implicit operator SqlInt64 (SqlInt32 x)
{
- if (x.IsNull)
+ if (x.IsNull)
return SqlInt64.Null;
else
- return new SqlInt64 ((long)x.Value);
+ return new SqlInt64 ((long) x.Value);
+ }
+
+#if NET_2_0
+ public static XmlQualifiedName GetXsdType (XmlSchemaSet schemaSet)
+ {
+ if (schemaSet != null && schemaSet.Count == 0) {
+ XmlSchema xs = new XmlSchema ();
+ XmlSchemaComplexType ct = new XmlSchemaComplexType ();
+ ct.Name = "long";
+ xs.Items.Add (ct);
+ schemaSet.Add (xs);
+ }
+ return new XmlQualifiedName ("long", "http://www.w3.org/2001/XMLSchema");
+ }
+
+ XmlSchema IXmlSerializable.GetSchema ()
+ {
+ return null;
+ }
+
+ void IXmlSerializable.ReadXml (XmlReader reader)
+ {
+ if (reader == null)
+ return;
+
+ switch (reader.ReadState) {
+ case ReadState.EndOfFile:
+ case ReadState.Error:
+ case ReadState.Closed:
+ return;
+ }
+
+ // Skip XML declaration and prolog
+ // or do I need to validate for the <SqlInt64> tag?
+ reader.MoveToContent ();
+ if (reader.EOF)
+ return;
+
+ reader.Read ();
+ if (reader.NodeType == XmlNodeType.EndElement)
+ return;
+
+ if (reader.Value.Length > 0) {
+ if (String.Compare ("Null", reader.Value) == 0) {
+ // means a null reference/invalid value
+ notNull = false;
+ return;
+ }
+ // FIXME: Validate the value for expected format
+ this.value = Int64.Parse (reader.Value);
+ this.notNull = true;
+ }
+ }
+
+ void IXmlSerializable.WriteXml (XmlWriter writer)
+ {
+ writer.WriteString (this.ToString ());
}
+#endif
#endregion
}
}
-