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 SqlBoolean))
123 if (this.IsNull && ((SqlBoolean)value).IsNull)
125 else if (((SqlBoolean)value).IsNull)
128 return (bool) (this == (SqlBoolean)value);
131 public static SqlBoolean Equals(SqlBoolean x, SqlBoolean y)
136 public override int GetHashCode()
147 public static SqlBoolean NotEquals(SqlBoolean x, SqlBoolean y)
152 public static SqlBoolean OnesComplement(SqlBoolean x)
157 public static SqlBoolean Or(SqlBoolean x, SqlBoolean y)
162 public static SqlBoolean Parse(string s)
164 return new SqlBoolean (Boolean.Parse (s));
167 public SqlByte ToSqlByte()
169 return new SqlByte (value);
172 // **************************************************
173 // Conversion from SqlBoolean to other SqlTypes
174 // **************************************************
176 public SqlDecimal ToSqlDecimal()
178 return ((SqlDecimal)this);
181 public SqlDouble ToSqlDouble()
183 return ((SqlDouble)this);
186 public SqlInt16 ToSqlInt16()
188 return ((SqlInt16)this);
191 public SqlInt32 ToSqlInt32()
193 return ((SqlInt32)this);
196 public SqlInt64 ToSqlInt64()
198 return ((SqlInt64)this);
201 public SqlMoney ToSqlMoney()
203 return ((SqlMoney)this);
206 public SqlSingle ToSqlSingle()
208 return ((SqlSingle)this);
211 public SqlString ToSqlString()
214 return new SqlString ("Null");
216 return new SqlString ("True");
218 return new SqlString ("False");
221 public override string ToString()
231 // Bitwise exclusive-OR (XOR)
232 public static SqlBoolean Xor(SqlBoolean x, SqlBoolean y)
237 // **************************************************
239 // **************************************************
242 public static SqlBoolean operator & (SqlBoolean x, SqlBoolean y)
244 return new SqlBoolean (x.Value & y.Value);
248 public static SqlBoolean operator | (SqlBoolean x, SqlBoolean y)
250 return new SqlBoolean (x.Value | y.Value);
254 // Compares two instances for equality
255 public static SqlBoolean operator == (SqlBoolean x, SqlBoolean y)
257 if (x.IsNull || y.IsNull)
258 return SqlBoolean.Null;
260 return new SqlBoolean (x.Value == y.Value);
263 // Bitwize exclusive-OR (XOR)
264 public static SqlBoolean operator ^ (SqlBoolean x, SqlBoolean y)
266 return new SqlBoolean (x.Value ^ y.Value);
269 // test Value of SqlBoolean to determine it is false.
270 public static bool operator false (SqlBoolean x)
276 public static SqlBoolean operator != (SqlBoolean x, SqlBoolean y)
278 if (x.IsNull || y.IsNull)
279 return SqlBoolean.Null;
281 return new SqlBoolean (x.Value != y.Value);
285 public static SqlBoolean operator ! (SqlBoolean x)
288 return SqlBoolean.Null;
290 return new SqlBoolean (!x.Value);
294 public static SqlBoolean operator ~ (SqlBoolean x)
298 b = new SqlBoolean(false);
300 b = new SqlBoolean(true);
305 // test to see if value is true
306 public static bool operator true (SqlBoolean x)
311 // ****************************************
313 // ****************************************
316 // SqlBoolean to Boolean
317 public static explicit operator bool (SqlBoolean x)
323 // SqlByte to SqlBoolean
324 public static explicit operator SqlBoolean (SqlByte x)
330 return new SqlBoolean ((int)x.Value);
334 // SqlDecimal to SqlBoolean
335 public static explicit operator SqlBoolean (SqlDecimal x)
341 return new SqlBoolean ((int)x.Value);
345 // SqlDouble to SqlBoolean
346 public static explicit operator SqlBoolean (SqlDouble x)
353 return new SqlBoolean ((int)x.Value);
357 // SqlInt16 to SqlBoolean
358 public static explicit operator SqlBoolean (SqlInt16 x)
364 return new SqlBoolean ((int)x.Value);
368 // SqlInt32 to SqlBoolean
369 public static explicit operator SqlBoolean (SqlInt32 x)
375 return new SqlBoolean (x.Value);
379 // SqlInt64 to SqlBoolean
380 public static explicit operator SqlBoolean (SqlInt64 x)
386 return new SqlBoolean ((int)x.Value);
390 // SqlMoney to SqlBoolean
391 public static explicit operator SqlBoolean (SqlMoney x)
397 return new SqlBoolean ((int)x.Value);
401 // SqlSingle to SqlBoolean
402 public static explicit operator SqlBoolean (SqlSingle x)
409 return new SqlBoolean ((int)x.Value);
413 // SqlString to SqlBoolean
414 public static explicit operator SqlBoolean (SqlString x)
417 return SqlBoolean.Parse (x.Value);
421 // Boolean to SqlBoolean
422 public static implicit operator SqlBoolean (bool x)
424 return new SqlBoolean (x);