4 // Part of the Mono class libraries at
5 // mcs/class/System.Data.OracleClient/System.Data.OracleClient
7 // Assembly: System.Data.OracleClient.dll
8 // Namespace: System.Data.OracleClient
10 // Author: Tim Coleman <tim@timcoleman.com>
12 // Copyright (C) Tim Coleman, 2003
14 // Licensed under the MIT/X11 License.
18 using System.Data.SqlTypes;
20 namespace System.Data.OracleClient {
21 public struct OracleNumber : IComparable, INullable
25 public static readonly OracleNumber E = new OracleNumber (Math.E);
26 public static readonly int MaxPrecision = 38;
27 public static readonly int MaxScale = 127;
28 public static readonly OracleNumber MaxValue; // FIXME
29 public static readonly int MinScale = -84;
30 public static readonly OracleNumber MinusOne = new OracleNumber (-1);
31 public static readonly OracleNumber MinValue; // FIXME
32 public static readonly OracleNumber Null = new OracleNumber ();
33 public static readonly OracleNumber One = new OracleNumber (1);
34 public static readonly OracleNumber PI = new OracleNumber (Math.PI);
35 public static readonly OracleNumber Zero = new OracleNumber (0);
44 public OracleNumber (decimal decValue)
46 this.value = decValue;
50 public OracleNumber (double dblValue)
51 : this ((decimal) dblValue)
55 public OracleNumber (int intValue)
56 : this ((decimal) intValue)
60 public OracleNumber (long longValue)
61 : this ((decimal) longValue)
65 public OracleNumber (OracleNumber from)
70 #endregion // Constructors
75 get { return !notNull; }
78 public decimal Value {
81 throw new InvalidOperationException ("The value is Null.");
86 #endregion // Properties
90 public static OracleNumber Abs (OracleNumber n)
93 return OracleNumber.Null;
94 return new OracleNumber (Math.Abs (n.Value));
97 public static OracleNumber Acos (OracleNumber n)
100 return OracleNumber.Null;
101 return new OracleNumber (Math.Acos ((double) n));
104 public static OracleNumber Add (OracleNumber x, OracleNumber y)
106 if (x.IsNull || y.IsNull)
107 return OracleNumber.Null;
108 return new OracleNumber (x.Value + y.Value);
111 public static OracleNumber Asin (OracleNumber n)
114 return OracleNumber.Null;
115 return new OracleNumber (Math.Asin ((double) n));
118 public static OracleNumber Atan (OracleNumber n)
121 return OracleNumber.Null;
122 return new OracleNumber (Math.Atan ((double) n));
125 public static OracleNumber Atan2 (OracleNumber y, OracleNumber x)
127 if (x.IsNull || y.IsNull)
128 return OracleNumber.Null;
129 return new OracleNumber (Math.Atan2 ((double) y, (double) x));
132 public static OracleNumber Ceiling (OracleNumber n)
135 return OracleNumber.Null;
136 return new OracleNumber (Math.Ceiling ((double) n));
140 public int CompareTo (object obj)
142 throw new NotImplementedException ();
145 public static OracleNumber Cos (OracleNumber n)
148 return OracleNumber.Null;
149 return new OracleNumber (Math.Cos ((double) n));
152 public static OracleNumber Cosh (OracleNumber n)
155 return OracleNumber.Null;
156 return new OracleNumber (Math.Cosh ((double) n));
159 public static OracleNumber Divide (OracleNumber x, OracleNumber y)
161 if (x.IsNull || y.IsNull)
162 return OracleNumber.Null;
163 return new OracleNumber (x.Value / y.Value);
167 public override bool Equals (object value)
169 throw new NotImplementedException ();
172 public static OracleBoolean Equals (OracleNumber x, OracleNumber y)
174 if (x.IsNull || y.IsNull)
175 return OracleBoolean.Null;
176 return new OracleBoolean (x.Value == y.Value);
179 public static OracleNumber Exp (OracleNumber p)
182 return OracleNumber.Null;
183 return new OracleNumber (Math.Exp ((double) p));
186 public static OracleNumber Floor (OracleNumber n)
189 return OracleNumber.Null;
190 return new OracleNumber (Decimal.Floor (n.Value));
194 public override int GetHashCode ()
196 throw new NotImplementedException ();
199 public static OracleBoolean GreaterThan (OracleNumber x, OracleNumber y)
201 if (x.IsNull || y.IsNull)
202 return OracleBoolean.Null;
203 return new OracleBoolean (x.Value > y.Value);
206 public static OracleBoolean GreaterThanOrEqual (OracleNumber x, OracleNumber y)
208 if (x.IsNull || y.IsNull)
209 return OracleBoolean.Null;
210 return new OracleBoolean (x.Value >= y.Value);
213 public static OracleBoolean LessThan (OracleNumber x, OracleNumber y)
215 if (x.IsNull || y.IsNull)
216 return OracleBoolean.Null;
217 return new OracleBoolean (x.Value < y.Value);
220 public static OracleBoolean LessThanOrEqual (OracleNumber x, OracleNumber y)
222 if (x.IsNull || y.IsNull)
223 return OracleBoolean.Null;
224 return new OracleBoolean (x.Value <= y.Value);
227 public static OracleNumber Log (OracleNumber n)
230 return OracleNumber.Null;
231 return new OracleNumber (Math.Log ((double) n));
234 public static OracleNumber Log (OracleNumber n, int newBase)
237 return OracleNumber.Null;
238 return new OracleNumber (Math.Log ((double) n, (double) newBase));
241 public static OracleNumber Log (OracleNumber n, OracleNumber newBase)
243 if (n.IsNull || newBase.IsNull)
244 return OracleNumber.Null;
245 return new OracleNumber (Math.Log ((double) n, (double) newBase));
248 public static OracleNumber Log10 (OracleNumber n)
251 return OracleNumber.Null;
252 return new OracleNumber (Math.Log10 ((double) n));
255 public static OracleNumber Max (OracleNumber x, OracleNumber y)
257 if (x.IsNull || y.IsNull)
258 return OracleNumber.Null;
259 return new OracleNumber (Math.Max (x.Value, y.Value));
262 public static OracleNumber Min (OracleNumber x, OracleNumber y)
264 if (x.IsNull || y.IsNull)
265 return OracleNumber.Null;
266 return new OracleNumber (Math.Min (x.Value, y.Value));
269 public static OracleNumber Modulo (OracleNumber x, OracleNumber y)
271 if (x.IsNull || y.IsNull)
272 return OracleNumber.Null;
273 return new OracleNumber (x.Value % y.Value);
276 public static OracleNumber Multiply (OracleNumber x, OracleNumber y)
278 if (x.IsNull || y.IsNull)
279 return OracleNumber.Null;
280 return new OracleNumber (x.Value * y.Value);
283 public static OracleNumber Negate (OracleNumber x)
286 return OracleNumber.Null;
287 return new OracleNumber (-x.Value);
290 public static OracleBoolean NotEquals (OracleNumber x, OracleNumber y)
292 if (x.IsNull || y.IsNull)
293 return OracleBoolean.Null;
294 return new OracleBoolean (x.Value != y.Value);
297 public static OracleNumber Parse (string s)
299 return new OracleNumber (Decimal.Parse (s));
302 public static OracleNumber Pow (OracleNumber x, int y)
305 return OracleNumber.Null;
306 return new OracleNumber (Math.Pow ((double) x, (double) y));
309 public static OracleNumber Pow (OracleNumber x, OracleNumber y)
311 if (x.IsNull || y.IsNull)
312 return OracleNumber.Null;
313 return new OracleNumber (Math.Pow ((double) x, (double) y));
316 public static OracleNumber Round (OracleNumber n, int position)
319 return OracleNumber.Null;
320 return new OracleNumber (Math.Round (n.Value, position));
323 public static OracleNumber Shift (OracleNumber n, int digits)
326 return OracleNumber.Null;
327 return new OracleNumber (n * (OracleNumber) (Math.Pow (10, digits)));
330 public static OracleNumber Sign (OracleNumber n)
333 return OracleNumber.Null;
334 return new OracleNumber (Math.Sign (n.Value));
337 public static OracleNumber Sin (OracleNumber n)
340 return OracleNumber.Null;
341 return new OracleNumber (Math.Sin ((double) n));
344 public static OracleNumber Sinh (OracleNumber n)
347 return OracleNumber.Null;
348 return new OracleNumber (Math.Sinh ((double) n));
351 public static OracleNumber Sqrt (OracleNumber n)
354 return OracleNumber.Null;
355 return new OracleNumber (Math.Sqrt ((double) n));
358 public static OracleNumber Subtract (OracleNumber x, OracleNumber y)
360 if (x.IsNull || y.IsNull)
361 return OracleNumber.Null;
362 return new OracleNumber (x.Value - y.Value);
365 public static OracleNumber Tan (OracleNumber n)
368 return OracleNumber.Null;
369 return new OracleNumber (Math.Tan ((double) n));
372 public static OracleNumber Tanh (OracleNumber n)
375 return OracleNumber.Null;
376 return new OracleNumber (Math.Tanh ((double) n));
379 public override string ToString ()
383 return Value.ToString ();
387 public static OracleNumber Truncate (OracleNumber n, int position)
389 throw new NotImplementedException ();
392 #endregion // Methods
394 #region Operators and Type Conversions
396 public static OracleNumber operator + (OracleNumber x, OracleNumber y)
401 public static OracleNumber operator / (OracleNumber x, OracleNumber y)
403 return Divide (x, y);
406 public static OracleBoolean operator == (OracleNumber x, OracleNumber y)
408 return Equals (x, y);
411 public static OracleBoolean operator > (OracleNumber x, OracleNumber y)
413 return GreaterThan (x, y);
416 public static OracleBoolean operator >= (OracleNumber x, OracleNumber y)
418 return GreaterThanOrEqual (x, y);
421 public static OracleBoolean operator != (OracleNumber x, OracleNumber y)
423 return NotEquals (x, y);
426 public static OracleBoolean operator < (OracleNumber x, OracleNumber y)
428 return LessThan (x, y);
431 public static OracleBoolean operator <= (OracleNumber x, OracleNumber y)
433 return LessThanOrEqual (x, y);
436 public static OracleNumber operator % (OracleNumber x, OracleNumber y)
438 return Modulo (x, y);
441 public static OracleNumber operator * (OracleNumber x, OracleNumber y)
443 return Multiply (x, y);
446 public static OracleNumber operator - (OracleNumber x, OracleNumber y)
448 return Subtract (x, y);
451 public static OracleNumber operator - (OracleNumber x)
456 public static explicit operator OracleNumber (decimal x)
458 return new OracleNumber (x);
461 public static explicit operator OracleNumber (double x)
463 return new OracleNumber (x);
466 public static explicit operator OracleNumber (int x)
468 return new OracleNumber (x);
471 public static explicit operator OracleNumber (long x)
473 return new OracleNumber (x);
476 public static explicit operator double (OracleNumber x)
479 throw new NullReferenceException ();
480 return (double) x.Value;
483 public static explicit operator decimal (OracleNumber x)
486 throw new NullReferenceException ();
490 public static explicit operator int (OracleNumber x)
493 throw new NullReferenceException ();
494 return (int) x.Value;
497 public static explicit operator long (OracleNumber x)
500 throw new NullReferenceException ();
501 return (long) x.Value;
504 public static explicit operator OracleNumber (string x)
506 return OracleNumber.Parse (x);
509 #endregion // Operators and Type Conversions