2 // System.Data.SqlTypes.SqlBoolean
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Daniel Morgan (danmorg@sc.rr.com)
7 // Tim Coleman (tim@timcoleman.com)
9 // (C) Ximian, Inc. 2002
10 // (C) Copyright 2002 Tim Coleman
14 using System.Globalization;
16 namespace System.Data.SqlTypes
19 /// Represents an integer value that is either 1 or 0
20 /// to be stored in or retrieved from a database.
22 public struct SqlBoolean : INullable, IComparable
32 public static readonly SqlBoolean False = new SqlBoolean (false);
33 public static readonly SqlBoolean Null;
34 public static readonly SqlBoolean One = new SqlBoolean (1);
35 public static readonly SqlBoolean True = new SqlBoolean (true);
36 public static readonly SqlBoolean Zero = new SqlBoolean (0);
42 public SqlBoolean (bool value)
44 this.value = (byte) (value ? 1 : 0);
48 public SqlBoolean (int value)
50 this.value = (byte) (value != 0 ? 1 : 0);
54 #endregion // Constructors
58 public byte ByteValue {
61 throw new SqlNullValueException(Locale.GetText("The property is set to null."));
94 throw new SqlNullValueException(Locale.GetText("The property is set to null."));
100 #endregion // Properties
102 public static SqlBoolean And (SqlBoolean x, SqlBoolean y)
107 public int CompareTo (object value)
111 else if (!(value is SqlBoolean))
112 throw new ArgumentException (Locale.GetText ("Value is not a System.Data.SqlTypes.SqlBoolean"));
113 else if (((SqlBoolean)value).IsNull)
116 return this.value.CompareTo (((SqlBoolean)value).ByteValue);
119 public override bool Equals(object value)
121 if (!(value is SqlByte))
124 return (bool) (this == (SqlBoolean)value);
127 public static SqlBoolean Equals(SqlBoolean x, SqlBoolean y)
132 public override int GetHashCode()
137 public static SqlBoolean NotEquals(SqlBoolean x, SqlBoolean y)
142 public static SqlBoolean OnesComplement(SqlBoolean x)
147 public static SqlBoolean Or(SqlBoolean x, SqlBoolean y)
152 public static SqlBoolean Parse(string s)
154 return new SqlBoolean (Boolean.Parse (s));
157 public SqlByte ToSqlByte()
159 return new SqlByte (value);
162 // **************************************************
163 // Conversion from SqlBoolean to other SqlTypes
164 // **************************************************
166 public SqlDecimal ToSqlDecimal()
168 return ((SqlDecimal)this);
171 public SqlDouble ToSqlDouble()
173 return ((SqlDouble)this);
176 public SqlInt16 ToSqlInt16()
178 return ((SqlInt16)this);
181 public SqlInt32 ToSqlInt32()
183 return ((SqlInt32)this);
186 public SqlInt64 ToSqlInt64()
188 return ((SqlInt64)this);
191 public SqlMoney ToSqlMoney()
193 return ((SqlMoney)this);
196 public SqlSingle ToSqlSingle()
198 return ((SqlSingle)this);
201 public SqlString ToSqlString()
204 return new SqlString ("Null");
206 return new SqlString ("True");
208 return new SqlString ("False");
211 public override string ToString()
221 // Bitwise exclusive-OR (XOR)
222 public static SqlBoolean Xor(SqlBoolean x, SqlBoolean y)
227 // **************************************************
229 // **************************************************
232 public static SqlBoolean operator & (SqlBoolean x, SqlBoolean y)
234 return new SqlBoolean (x.Value & y.Value);
238 public static SqlBoolean operator | (SqlBoolean x, SqlBoolean y)
240 return new SqlBoolean (x.Value | y.Value);
244 // Compares two instances for equality
245 public static SqlBoolean operator == (SqlBoolean x, SqlBoolean y)
247 if (x.IsNull || y.IsNull)
248 return SqlBoolean.Null;
250 return new SqlBoolean (x.Value == y.Value);
253 // Bitwize exclusive-OR (XOR)
254 public static SqlBoolean operator ^ (SqlBoolean x, SqlBoolean y)
256 return new SqlBoolean (x.Value ^ y.Value);
259 // test Value of SqlBoolean to determine it is false.
260 public static bool operator false (SqlBoolean x)
266 public static SqlBoolean operator != (SqlBoolean x, SqlBoolean y)
268 if (x.IsNull || y.IsNull)
269 return SqlBoolean.Null;
271 return new SqlBoolean (x.Value != y.Value);
275 public static SqlBoolean operator ! (SqlBoolean x)
278 return SqlBoolean.Null;
280 return new SqlBoolean (!x.Value);
284 public static SqlBoolean operator ~ (SqlBoolean x)
286 return new SqlBoolean (~x.ByteValue);
289 // test to see if value is true
290 public static bool operator true (SqlBoolean x)
295 // ****************************************
297 // ****************************************
300 // SqlBoolean to Boolean
301 public static explicit operator bool (SqlBoolean x)
307 // SqlByte to SqlBoolean
308 public static explicit operator SqlBoolean (SqlByte x)
313 return new SqlBoolean ((int)x.Value);
316 // SqlDecimal to SqlBoolean
317 public static explicit operator SqlBoolean (SqlDecimal x)
322 return new SqlBoolean ((int)x.Value);
325 // SqlDouble to SqlBoolean
326 public static explicit operator SqlBoolean (SqlDouble x)
331 return new SqlBoolean ((int)x.Value);
334 // SqlInt16 to SqlBoolean
335 public static explicit operator SqlBoolean (SqlInt16 x)
340 return new SqlBoolean ((int)x.Value);
343 // SqlInt32 to SqlBoolean
344 public static explicit operator SqlBoolean (SqlInt32 x)
349 return new SqlBoolean (x.Value);
352 // SqlInt64 to SqlBoolean
353 public static explicit operator SqlBoolean (SqlInt64 x)
358 return new SqlBoolean ((int)x.Value);
361 // SqlMoney to SqlBoolean
362 public static explicit operator SqlBoolean (SqlMoney x)
367 return new SqlBoolean ((int)x.Value);
370 // SqlSingle to SqlBoolean
371 public static explicit operator SqlBoolean (SqlSingle x)
376 return new SqlBoolean ((int)x.Value);
379 // SqlString to SqlBoolean
380 public static explicit operator SqlBoolean (SqlString x)
382 return SqlBoolean.Parse (x.Value);
385 // Boolean to SqlBoolean
386 public static implicit operator SqlBoolean (bool x)
388 return new SqlBoolean (x);