Merge branch 'master' of github.com:tgiphil/mono
[mono.git] / mcs / class / System.Data / System.Data.SqlTypes.jvm / SqlGuid.cs
1 // System.Data.SqlTypes.SqlGuid\r
2 //
3 // Authors:
4 //      Konstantin Triger <kostat@mainsoft.com>
5 //      Boris Kirzner <borisk@mainsoft.com>
6 //      
7 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //\r
30 \r
31 namespace System.Data.SqlTypes\r
32 {\r
33 \r
34     using System;\r
35 \r
36     /**\r
37      *\r
38      */\r
39     public struct SqlGuid : INullable, IComparable\r
40     {\r
41         private Guid _value;\r
42         private bool _isNull;\r
43         public static readonly SqlGuid Null = new SqlGuid();\r
44 \r
45         \r
46         private SqlGuid(bool isNull)\r
47         {\r
48             _isNull = isNull;\r
49             _value = Guid.Empty;\r
50         }\r
51     \r
52         public SqlGuid(byte[] value) \r
53         {\r
54             _value = new Guid(value);\r
55             _isNull = false;\r
56         }\r
57 \r
58         public SqlGuid(String s) \r
59         {\r
60             _value = new Guid(s);\r
61             _isNull = false;\r
62         }\r
63 \r
64         public SqlGuid(Guid g) \r
65         {\r
66             _value = g;\r
67             _isNull = false;\r
68         }\r
69 \r
70         public SqlGuid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k)\r
71         {\r
72             _value = new Guid(a, b, c, d, e, f, g, h, i, j, k);\r
73             _isNull = false;\r
74         }\r
75 \r
76         \r
77         public int CompareTo(Object obj)\r
78         {\r
79             if (obj == null)
80                 return 1;
81
82             if (obj is SqlGuid)
83             {
84                 SqlGuid g = (SqlGuid)obj;
85
86                 if (g.IsNull)
87                     return 1;
88                 if (this.IsNull)
89                     return -1;
90
91                 return this._value.CompareTo(g._value);
92             }
93
94             throw new ArgumentException("parameter obj is not SqlGuid : " + obj.GetType().Name);
95 \r
96         }\r
97 \r
98         public bool IsNull\r
99         {\r
100             get\r
101             {\r
102                 return _isNull;\r
103             }\r
104         }\r
105 \r
106         public override int GetHashCode()\r
107         {\r
108             return _value.GetHashCode();\r
109         }\r
110 \r
111         public override bool Equals(Object obj)\r
112         {\r
113             if (obj == null)
114                 return false;
115
116             if (obj is SqlGuid)
117             {
118                 SqlGuid g = (SqlGuid)obj;
119
120                 if (IsNull && g.IsNull)
121                     return true;
122
123                 if (IsNull || g.IsNull)
124                     return false;
125
126                 return _value == g._value;
127             }
128
129             return false;\r
130         }\r
131 \r
132         public override String ToString()\r
133         {\r
134             if (IsNull)
135                 return "null";
136
137
138             return _value.ToString();\r
139         }\r
140 \r
141         public Guid Value\r
142         {\r
143             get\r
144             {\r
145                 if(IsNull)\r
146                     throw new SqlNullValueException();\r
147                 return _value;\r
148             }\r
149         }\r
150 \r
151         public static SqlGuid op_Implicit(Guid x)\r
152         {\r
153             return new SqlGuid(x);\r
154         }\r
155 \r
156         public static Guid op_Explicit(SqlGuid x)\r
157         {\r
158             return x.Value;\r
159         }\r
160 \r
161         public byte[] ToByteArray()\r
162         {\r
163             if(IsNull)\r
164                 throw new SqlNullValueException();\r
165             return _value.ToByteArray();\r
166         }\r
167 \r
168         public static SqlGuid Parse(String s)\r
169         {\r
170             return new SqlGuid(s);\r
171         }\r
172 \r
173         public static SqlGuid op_Explicit(SqlString x)\r
174         {\r
175             return new SqlGuid(x.Value);\r
176         }\r
177 \r
178         public static SqlGuid op_Explicit(SqlBinary x)\r
179         {\r
180             return new SqlGuid(x.Value);\r
181         }\r
182 \r
183         public static SqlBoolean op_Equality(SqlGuid x, SqlGuid y)\r
184         {\r
185             return Equals(x, y);\r
186         }\r
187 \r
188         public static SqlBoolean op_Inequality(SqlGuid x, SqlGuid y)\r
189         {\r
190             return NotEquals(x, y);\r
191         }\r
192 \r
193         public static SqlBoolean op_LessThan(SqlGuid x, SqlGuid y)\r
194         {\r
195             return LessThan(x, y);\r
196         }\r
197 \r
198         public static SqlBoolean op_GreaterThan(SqlGuid x, SqlGuid y)\r
199         {\r
200             return GreaterThan(x, y);\r
201         }\r
202 \r
203         public static SqlBoolean op_LessThanOrEqual(SqlGuid x, SqlGuid y)\r
204         {\r
205             return LessThanOrEqual(x, y);\r
206         }\r
207 \r
208         public static SqlBoolean op_GreaterThanOrEqual(SqlGuid x, SqlGuid y)\r
209         {\r
210             return GreaterThanOrEqual(x, y);\r
211         }\r
212 \r
213         public static SqlBoolean Equals(SqlGuid x, SqlGuid y)\r
214         {\r
215             if(x.IsNull || y.IsNull)\r
216                 return SqlBoolean.Null;\r
217 \r
218             return new SqlBoolean(x.Value.Equals(y.Value));\r
219         }\r
220 \r
221         public static SqlBoolean NotEquals(SqlGuid x, SqlGuid y)\r
222         {\r
223             SqlBoolean res = Equals(x, y);\r
224             if(res.IsFalse)\r
225                 return SqlBoolean.True;\r
226             return SqlBoolean.False;\r
227         }\r
228 \r
229         public static SqlBoolean LessThan(SqlGuid x, SqlGuid y)\r
230         {\r
231             if(x.IsNull || y.IsNull)\r
232                 return SqlBoolean.Null;\r
233 \r
234             int res = x.CompareTo(y);\r
235             if(res < 0)\r
236                 return SqlBoolean.True;\r
237             return SqlBoolean.False;\r
238         }\r
239 \r
240         public static SqlBoolean GreaterThan(SqlGuid x, SqlGuid y)\r
241         {\r
242             if(x.IsNull || y.IsNull)\r
243                 return SqlBoolean.Null;\r
244 \r
245             int res = x.CompareTo(y);\r
246             if(res > 0)\r
247                 return SqlBoolean.True;\r
248             return SqlBoolean.False;\r
249         }\r
250 \r
251         public static SqlBoolean LessThanOrEqual(SqlGuid x, SqlGuid y)\r
252         {\r
253             if(x.IsNull || y.IsNull)\r
254                 return SqlBoolean.Null;\r
255 \r
256             int res = x.CompareTo(y);\r
257             if(res <= 0)\r
258                 return SqlBoolean.True;\r
259             return SqlBoolean.False;\r
260         }\r
261 \r
262         public static SqlBoolean GreaterThanOrEqual(SqlGuid x, SqlGuid y)\r
263         {\r
264             if(x.IsNull || y.IsNull)\r
265                 return SqlBoolean.Null;\r
266 \r
267             int res = x.CompareTo(y);\r
268             if(res >= 0)\r
269                 return SqlBoolean.True;\r
270             return SqlBoolean.False;\r
271         }\r
272 \r
273         public SqlString ToSqlString()\r
274         {\r
275             if(IsNull)\r
276                 return SqlString.Null;\r
277 \r
278             return new SqlString(ToString());\r
279         }\r
280 \r
281         public SqlBinary ToSqlBinary()\r
282         {\r
283             if(IsNull)\r
284                 return SqlBinary.Null;\r
285 \r
286             return new SqlBinary(ToByteArray());\r
287         }\r
288     }\r
289 }