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()
143 public static SqlBoolean NotEquals(SqlBoolean x, SqlBoolean y)
148 public static SqlBoolean OnesComplement(SqlBoolean x)
153 public static SqlBoolean Or(SqlBoolean x, SqlBoolean y)
158 public static SqlBoolean Parse(string s)
160 return new SqlBoolean (Boolean.Parse (s));
163 public SqlByte ToSqlByte()
165 return new SqlByte (value);
168 // **************************************************
169 // Conversion from SqlBoolean to other SqlTypes
170 // **************************************************
172 public SqlDecimal ToSqlDecimal()
174 return ((SqlDecimal)this);
177 public SqlDouble ToSqlDouble()
179 return ((SqlDouble)this);
182 public SqlInt16 ToSqlInt16()
184 return ((SqlInt16)this);
187 public SqlInt32 ToSqlInt32()
189 return ((SqlInt32)this);
192 public SqlInt64 ToSqlInt64()
194 return ((SqlInt64)this);
197 public SqlMoney ToSqlMoney()
199 return ((SqlMoney)this);
202 public SqlSingle ToSqlSingle()
204 return ((SqlSingle)this);
207 public SqlString ToSqlString()
210 return new SqlString ("Null");
212 return new SqlString ("True");
214 return new SqlString ("False");
217 public override string ToString()
227 // Bitwise exclusive-OR (XOR)
228 public static SqlBoolean Xor(SqlBoolean x, SqlBoolean y)
233 // **************************************************
235 // **************************************************
238 public static SqlBoolean operator & (SqlBoolean x, SqlBoolean y)
240 return new SqlBoolean (x.Value & y.Value);
244 public static SqlBoolean operator | (SqlBoolean x, SqlBoolean y)
246 return new SqlBoolean (x.Value | y.Value);
250 // Compares two instances for equality
251 public static SqlBoolean operator == (SqlBoolean x, SqlBoolean y)
253 if (x.IsNull || y.IsNull)
254 return SqlBoolean.Null;
256 return new SqlBoolean (x.Value == y.Value);
259 // Bitwize exclusive-OR (XOR)
260 public static SqlBoolean operator ^ (SqlBoolean x, SqlBoolean y)
262 return new SqlBoolean (x.Value ^ y.Value);
265 // test Value of SqlBoolean to determine it is false.
266 public static bool operator false (SqlBoolean x)
272 public static SqlBoolean operator != (SqlBoolean x, SqlBoolean y)
274 if (x.IsNull || y.IsNull)
275 return SqlBoolean.Null;
277 return new SqlBoolean (x.Value != y.Value);
281 public static SqlBoolean operator ! (SqlBoolean x)
284 return SqlBoolean.Null;
286 return new SqlBoolean (!x.Value);
290 public static SqlBoolean operator ~ (SqlBoolean x)
294 b = new SqlBoolean(false);
296 b = new SqlBoolean(true);
301 // test to see if value is true
302 public static bool operator true (SqlBoolean x)
307 // ****************************************
309 // ****************************************
312 // SqlBoolean to Boolean
313 public static explicit operator bool (SqlBoolean x)
319 // SqlByte to SqlBoolean
320 public static explicit operator SqlBoolean (SqlByte x)
325 return new SqlBoolean ((int)x.Value);
328 // SqlDecimal to SqlBoolean
329 public static explicit operator SqlBoolean (SqlDecimal x)
334 return new SqlBoolean ((int)x.Value);
337 // SqlDouble to SqlBoolean
338 public static explicit operator SqlBoolean (SqlDouble x)
343 return new SqlBoolean ((int)x.Value);
346 // SqlInt16 to SqlBoolean
347 public static explicit operator SqlBoolean (SqlInt16 x)
352 return new SqlBoolean ((int)x.Value);
355 // SqlInt32 to SqlBoolean
356 public static explicit operator SqlBoolean (SqlInt32 x)
361 return new SqlBoolean (x.Value);
364 // SqlInt64 to SqlBoolean
365 public static explicit operator SqlBoolean (SqlInt64 x)
370 return new SqlBoolean ((int)x.Value);
373 // SqlMoney to SqlBoolean
374 public static explicit operator SqlBoolean (SqlMoney x)
379 return new SqlBoolean ((int)x.Value);
382 // SqlSingle to SqlBoolean
383 public static explicit operator SqlBoolean (SqlSingle x)
388 return new SqlBoolean ((int)x.Value);
391 // SqlString to SqlBoolean
392 public static explicit operator SqlBoolean (SqlString x)
394 return SqlBoolean.Parse (x.Value);
397 // Boolean to SqlBoolean
398 public static implicit operator SqlBoolean (bool x)
400 return new SqlBoolean (x);