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
13 namespace System.Data.SqlTypes
16 /// Represents an integer value that is either 1 or 0
17 /// to be stored in or retrieved from a database.
19 public struct SqlBoolean : INullable, IComparable
26 public static readonly SqlBoolean False = new SqlBoolean (false);
27 public static readonly SqlBoolean Null;
28 public static readonly SqlBoolean One = new SqlBoolean (1);
29 public static readonly SqlBoolean True = new SqlBoolean (true);
30 public static readonly SqlBoolean Zero = new SqlBoolean (0);
36 public SqlBoolean (bool value)
38 this.value = (byte) (value ? 1 : 0);
41 public SqlBoolean (int value)
43 this.value = (byte) (value != 0 ? 1 : 0);
46 #endregion // Constructors
50 public byte ByteValue {
53 throw new SqlNullValueException( "The property is set to null.");
69 get { return (bool) (this == Null); }
84 throw new SqlNullValueException( "The property is set to null.");
90 #endregion // Properties
92 public static SqlBoolean And (SqlBoolean x, SqlBoolean y)
97 public int CompareTo (object value)
101 else if (!(value is SqlBoolean))
102 throw new ArgumentException (Locale.GetText ("Value is not a System.Data.SqlTypes.SqlBoolean"));
103 else if (value.IsNull)
106 return value.CompareTo (value.ByteValue);
109 public override bool Equals(object value)
111 if (!(value is SqlByte))
114 return (bool) (this == value);
117 public static SqlBoolean Equals(SqlBoolean x, SqlBoolean y)
122 public override int GetHashCode()
127 public static SqlBoolean NotEquals(SqlBoolean x, SqlBoolean y)
132 public static SqlBoolean OnesComplement(SqlBoolean x)
137 public static SqlBoolean Or(SqlBoolean x, SqlBoolean y)
142 public static SqlBoolean Parse(string s)
144 return new SqlBoolean (Boolean.Parse (s));
147 public SqlByte ToSqlByte()
149 return new SqlByte (value);
152 // **************************************************
153 // Conversion from SqlBoolean to other SqlTypes
154 // **************************************************
156 public SqlDecimal ToSqlDecimal()
158 return ((SqlDecimal)this);
161 public SqlDouble ToSqlDouble()
163 return ((SqlDouble)this);
166 public SqlInt16 ToSqlInt16()
168 return ((SqlInt16)this);
171 public SqlInt32 ToSqlInt32()
173 return ((SqlInt32)this);
176 public SqlInt64 ToSqlInt64()
178 return ((SqlInt64)this);
181 public SqlMoney ToSqlMoney()
183 return ((SqlMoney)this);
186 public SqlSingle ToSqlSingle()
188 return ((SqlSingle)this);
192 public SqlString ToSqlString()
194 throw new NotImplementedException ();
198 public override string ToString()
200 throw new NotImplementedException ();
203 // Bitwise exclusive-OR (XOR)
204 public static SqlBoolean Xor(SqlBoolean x, SqlBoolean y)
209 // **************************************************
211 // **************************************************
214 public static SqlBoolean operator & (SqlBoolean x, SqlBoolean y)
216 return new SqlBoolean (x.Value & y.Value);
220 public static SqlBoolean operator | (SqlBoolean x, SqlBoolean y)
222 return new SqlBoolean (x.Value | y.Value);
226 // Compares two instances for equality
227 public static SqlBoolean operator == (SqlBoolean x, SqlBoolean y)
229 if (x.IsNull || y.IsNull)
230 return SqlBoolean.Null;
232 return new SqlBoolean (x.Value == y.Value);
235 // Bitwize exclusive-OR (XOR)
236 public static SqlBoolean operator ^ (SqlBoolean x, SqlBoolean y)
238 return new SqlBoolean (x.Value ^ y.Value);
241 // test Value of SqlBoolean to determine it is false.
242 public static bool operator false (SqlBoolean x)
248 public static SqlBoolean operator != (SqlBoolean x, SqlBoolean y)
250 if (x.IsNull || y.IsNull)
251 return SqlBoolean.Null;
253 return new SqlBoolean (x.Value != y.Value);
257 public static SqlBoolean operator ! (SqlBoolean x)
260 return SqlBoolean.Null;
262 return new SqlBoolean (!x.Value);
266 public static SqlBoolean operator ~ (SqlBoolean x)
268 return new SqlBoolean (~x.ByteValue);
271 // test to see if value is true
272 public static bool operator true (SqlBoolean x)
277 // ****************************************
279 // ****************************************
282 // SqlBoolean to Boolean
283 public static explicit operator bool (SqlBoolean x)
289 // SqlByte to SqlBoolean
290 public static explicit operator SqlBoolean (SqlByte x)
295 return new SqlBoolean ((int)x.Value);
298 // SqlDecimal to SqlBoolean
299 public static explicit operator SqlBoolean (SqlDecimal x)
304 return new SqlBoolean ((int)x.Value);
307 // SqlDouble to SqlBoolean
308 public static explicit operator SqlBoolean (SqlDouble x)
313 return new SqlBoolean ((int)x.Value);
316 // SqlInt16 to SqlBoolean
317 public static explicit operator SqlBoolean (SqlInt16 x)
322 return new SqlBoolean ((int)x.Value);
325 // SqlInt32 to SqlBoolean
326 public static explicit operator SqlBoolean (SqlInt32 x)
331 return new SqlBoolean (x.Value);
334 // SqlInt64 to SqlBoolean
335 public static explicit operator SqlBoolean (SqlInt64 x)
340 return new SqlBoolean ((int)x.Value);
343 // SqlMoney to SqlBoolean
344 public static explicit operator SqlBoolean (SqlMoney x)
349 return new SqlBoolean ((int)x.Value);
352 // SqlSingle to SqlBoolean
353 public static explicit operator SqlBoolean (SqlSingle x)
358 return new SqlBoolean ((int)x.Value);
361 // SqlString to SqlBoolean
363 public static explicit operator SqlBoolean (SqlString x)
365 throw new NotImplementedException ();
368 // Boolean to SqlBoolean
369 public static implicit operator SqlBoolean (bool x)
371 return new SqlBoolean (x);