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)
166 return new SqlBoolean (false);
168 return new SqlBoolean (true);
170 return new SqlBoolean (Boolean.Parse (s));
173 public SqlByte ToSqlByte()
175 return new SqlByte (value);
178 // **************************************************
179 // Conversion from SqlBoolean to other SqlTypes
180 // **************************************************
182 public SqlDecimal ToSqlDecimal()
184 return ((SqlDecimal)this);
187 public SqlDouble ToSqlDouble()
189 return ((SqlDouble)this);
192 public SqlInt16 ToSqlInt16()
194 return ((SqlInt16)this);
197 public SqlInt32 ToSqlInt32()
199 return ((SqlInt32)this);
202 public SqlInt64 ToSqlInt64()
204 return ((SqlInt64)this);
207 public SqlMoney ToSqlMoney()
209 return ((SqlMoney)this);
212 public SqlSingle ToSqlSingle()
214 return ((SqlSingle)this);
217 public SqlString ToSqlString()
220 return new SqlString ("Null");
222 return new SqlString ("True");
224 return new SqlString ("False");
227 public override string ToString()
237 // Bitwise exclusive-OR (XOR)
238 public static SqlBoolean Xor(SqlBoolean x, SqlBoolean y)
243 // **************************************************
245 // **************************************************
248 public static SqlBoolean operator & (SqlBoolean x, SqlBoolean y)
250 return new SqlBoolean (x.Value & y.Value);
254 public static SqlBoolean operator | (SqlBoolean x, SqlBoolean y)
256 return new SqlBoolean (x.Value | y.Value);
260 // Compares two instances for equality
261 public static SqlBoolean operator == (SqlBoolean x, SqlBoolean y)
263 if (x.IsNull || y.IsNull)
264 return SqlBoolean.Null;
266 return new SqlBoolean (x.Value == y.Value);
269 // Bitwize exclusive-OR (XOR)
270 public static SqlBoolean operator ^ (SqlBoolean x, SqlBoolean y)
272 return new SqlBoolean (x.Value ^ y.Value);
275 // test Value of SqlBoolean to determine it is false.
276 public static bool operator false (SqlBoolean x)
282 public static SqlBoolean operator != (SqlBoolean x, SqlBoolean y)
284 if (x.IsNull || y.IsNull)
285 return SqlBoolean.Null;
287 return new SqlBoolean (x.Value != y.Value);
291 public static SqlBoolean operator ! (SqlBoolean x)
294 return SqlBoolean.Null;
296 return new SqlBoolean (!x.Value);
300 public static SqlBoolean operator ~ (SqlBoolean x)
304 b = new SqlBoolean(false);
306 b = new SqlBoolean(true);
311 // test to see if value is true
312 public static bool operator true (SqlBoolean x)
317 // ****************************************
319 // ****************************************
322 // SqlBoolean to Boolean
323 public static explicit operator bool (SqlBoolean x)
329 // SqlByte to SqlBoolean
330 public static explicit operator SqlBoolean (SqlByte x)
336 return new SqlBoolean ((int)x.Value);
340 // SqlDecimal to SqlBoolean
341 public static explicit operator SqlBoolean (SqlDecimal x)
347 return new SqlBoolean ((int)x.Value);
351 // SqlDouble to SqlBoolean
352 public static explicit operator SqlBoolean (SqlDouble x)
359 return new SqlBoolean ((int)x.Value);
363 // SqlInt16 to SqlBoolean
364 public static explicit operator SqlBoolean (SqlInt16 x)
370 return new SqlBoolean ((int)x.Value);
374 // SqlInt32 to SqlBoolean
375 public static explicit operator SqlBoolean (SqlInt32 x)
381 return new SqlBoolean (x.Value);
385 // SqlInt64 to SqlBoolean
386 public static explicit operator SqlBoolean (SqlInt64 x)
392 return new SqlBoolean ((int)x.Value);
396 // SqlMoney to SqlBoolean
397 public static explicit operator SqlBoolean (SqlMoney x)
403 return new SqlBoolean ((int)x.Value);
407 // SqlSingle to SqlBoolean
408 public static explicit operator SqlBoolean (SqlSingle x)
415 return new SqlBoolean ((int)x.Value);
419 // SqlString to SqlBoolean
420 public static explicit operator SqlBoolean (SqlString x)
425 return SqlBoolean.Parse (x.Value);
429 // Boolean to SqlBoolean
430 public static implicit operator SqlBoolean (bool x)
432 return new SqlBoolean (x);