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
29 public static readonly SqlBoolean False = new SqlBoolean (false);
30 public static readonly SqlBoolean Null;
31 public static readonly SqlBoolean One = new SqlBoolean (1);
32 public static readonly SqlBoolean True = new SqlBoolean (true);
33 public static readonly SqlBoolean Zero = new SqlBoolean (0);
39 public SqlBoolean (bool value)
41 this.value = (byte) (value ? 1 : 0);
44 public SqlBoolean (int value)
46 this.value = (byte) (value != 0 ? 1 : 0);
49 #endregion // Constructors
53 public byte ByteValue {
56 throw new SqlNullValueException( "The property is set to null.");
72 get { return (bool) (this == Null); }
87 throw new SqlNullValueException( "The property is set to null.");
93 #endregion // Properties
95 public static SqlBoolean And (SqlBoolean x, SqlBoolean y)
100 public int CompareTo (object value)
104 else if (!(value is SqlBoolean))
105 throw new ArgumentException (Locale.GetText ("Value is not a System.Data.SqlTypes.SqlBoolean"));
106 else if (((SqlBoolean)value).IsNull)
109 return this.value.CompareTo (((SqlBoolean)value).ByteValue);
112 public override bool Equals(object value)
114 if (!(value is SqlByte))
117 return (bool) (this == (SqlBoolean)value);
120 public static SqlBoolean Equals(SqlBoolean x, SqlBoolean y)
125 public override int GetHashCode()
130 public static SqlBoolean NotEquals(SqlBoolean x, SqlBoolean y)
135 public static SqlBoolean OnesComplement(SqlBoolean x)
140 public static SqlBoolean Or(SqlBoolean x, SqlBoolean y)
145 public static SqlBoolean Parse(string s)
147 return new SqlBoolean (Boolean.Parse (s));
150 public SqlByte ToSqlByte()
152 return new SqlByte (value);
155 // **************************************************
156 // Conversion from SqlBoolean to other SqlTypes
157 // **************************************************
159 public SqlDecimal ToSqlDecimal()
161 return ((SqlDecimal)this);
164 public SqlDouble ToSqlDouble()
166 return ((SqlDouble)this);
169 public SqlInt16 ToSqlInt16()
171 return ((SqlInt16)this);
174 public SqlInt32 ToSqlInt32()
176 return ((SqlInt32)this);
179 public SqlInt64 ToSqlInt64()
181 return ((SqlInt64)this);
184 public SqlMoney ToSqlMoney()
186 return ((SqlMoney)this);
189 public SqlSingle ToSqlSingle()
191 return ((SqlSingle)this);
194 public SqlString ToSqlString()
197 throw new SqlNullValueException ("The value is null");
199 return new SqlString ("True");
201 return new SqlString ("False");
204 public override string ToString()
207 throw new SqlNullValueException ("The value is null");
214 // Bitwise exclusive-OR (XOR)
215 public static SqlBoolean Xor(SqlBoolean x, SqlBoolean y)
220 // **************************************************
222 // **************************************************
225 public static SqlBoolean operator & (SqlBoolean x, SqlBoolean y)
227 return new SqlBoolean (x.Value & y.Value);
231 public static SqlBoolean operator | (SqlBoolean x, SqlBoolean y)
233 return new SqlBoolean (x.Value | y.Value);
237 // Compares two instances for equality
238 public static SqlBoolean operator == (SqlBoolean x, SqlBoolean y)
240 if (x.IsNull || y.IsNull)
241 return SqlBoolean.Null;
243 return new SqlBoolean (x.Value == y.Value);
246 // Bitwize exclusive-OR (XOR)
247 public static SqlBoolean operator ^ (SqlBoolean x, SqlBoolean y)
249 return new SqlBoolean (x.Value ^ y.Value);
252 // test Value of SqlBoolean to determine it is false.
253 public static bool operator false (SqlBoolean x)
259 public static SqlBoolean operator != (SqlBoolean x, SqlBoolean y)
261 if (x.IsNull || y.IsNull)
262 return SqlBoolean.Null;
264 return new SqlBoolean (x.Value != y.Value);
268 public static SqlBoolean operator ! (SqlBoolean x)
271 return SqlBoolean.Null;
273 return new SqlBoolean (!x.Value);
277 public static SqlBoolean operator ~ (SqlBoolean x)
279 return new SqlBoolean (~x.ByteValue);
282 // test to see if value is true
283 public static bool operator true (SqlBoolean x)
288 // ****************************************
290 // ****************************************
293 // SqlBoolean to Boolean
294 public static explicit operator bool (SqlBoolean x)
300 // SqlByte to SqlBoolean
301 public static explicit operator SqlBoolean (SqlByte x)
306 return new SqlBoolean ((int)x.Value);
309 // SqlDecimal to SqlBoolean
310 public static explicit operator SqlBoolean (SqlDecimal x)
315 return new SqlBoolean ((int)x.Value);
318 // SqlDouble to SqlBoolean
319 public static explicit operator SqlBoolean (SqlDouble x)
324 return new SqlBoolean ((int)x.Value);
327 // SqlInt16 to SqlBoolean
328 public static explicit operator SqlBoolean (SqlInt16 x)
333 return new SqlBoolean ((int)x.Value);
336 // SqlInt32 to SqlBoolean
337 public static explicit operator SqlBoolean (SqlInt32 x)
342 return new SqlBoolean (x.Value);
345 // SqlInt64 to SqlBoolean
346 public static explicit operator SqlBoolean (SqlInt64 x)
351 return new SqlBoolean ((int)x.Value);
354 // SqlMoney to SqlBoolean
355 public static explicit operator SqlBoolean (SqlMoney x)
360 return new SqlBoolean ((int)x.Value);
363 // SqlSingle to SqlBoolean
364 public static explicit operator SqlBoolean (SqlSingle x)
369 return new SqlBoolean ((int)x.Value);
372 // SqlString to SqlBoolean
373 public static explicit operator SqlBoolean (SqlString x)
375 return SqlBoolean.Parse (x.Value);
378 // Boolean to SqlBoolean
379 public static implicit operator SqlBoolean (bool x)
381 return new SqlBoolean (x);