519 lines
12 KiB
C#
519 lines
12 KiB
C#
//
|
|
// OracleNumber.cs
|
|
//
|
|
// Part of the Mono class libraries at
|
|
// mcs/class/System.Data.OracleClient/System.Data.OracleClient
|
|
//
|
|
// Assembly: System.Data.OracleClient.dll
|
|
// Namespace: System.Data.OracleClient
|
|
//
|
|
// Author: Tim Coleman <tim@timcoleman.com>
|
|
//
|
|
// Copyright (C) Tim Coleman, 2003
|
|
//
|
|
// Licensed under the MIT/X11 License.
|
|
//
|
|
|
|
using System;
|
|
using System.Data.SqlTypes;
|
|
|
|
namespace System.Data.OracleClient {
|
|
public struct OracleNumber : IComparable, INullable
|
|
{
|
|
#region Fields
|
|
|
|
public static readonly OracleNumber E = new OracleNumber (Math.E);
|
|
public static readonly int MaxPrecision = 38;
|
|
public static readonly int MaxScale = 127;
|
|
public static readonly OracleNumber MaxValue; // FIXME
|
|
public static readonly int MinScale = -84;
|
|
public static readonly OracleNumber MinusOne = new OracleNumber (-1);
|
|
public static readonly OracleNumber MinValue; // FIXME
|
|
public static readonly OracleNumber Null = new OracleNumber ();
|
|
public static readonly OracleNumber One = new OracleNumber (1);
|
|
public static readonly OracleNumber PI = new OracleNumber (Math.PI);
|
|
public static readonly OracleNumber Zero = new OracleNumber (0);
|
|
|
|
decimal value;
|
|
bool notNull;
|
|
|
|
#endregion // Fields
|
|
|
|
#region Constructors
|
|
|
|
public OracleNumber (decimal decValue)
|
|
{
|
|
this.value = decValue;
|
|
notNull = true;
|
|
}
|
|
|
|
public OracleNumber (double dblValue)
|
|
: this ((decimal) dblValue)
|
|
{
|
|
}
|
|
|
|
public OracleNumber (int intValue)
|
|
: this ((decimal) intValue)
|
|
{
|
|
}
|
|
|
|
public OracleNumber (long longValue)
|
|
: this ((decimal) longValue)
|
|
{
|
|
}
|
|
|
|
public OracleNumber (OracleNumber from)
|
|
: this (from.Value)
|
|
{
|
|
}
|
|
|
|
#endregion // Constructors
|
|
|
|
#region Properties
|
|
|
|
public bool IsNull {
|
|
get { return !notNull; }
|
|
}
|
|
|
|
public decimal Value {
|
|
get {
|
|
if (IsNull)
|
|
throw new InvalidOperationException ("The value is Null.");
|
|
return value;
|
|
}
|
|
}
|
|
|
|
#endregion // Properties
|
|
|
|
#region Methods
|
|
|
|
public static OracleNumber Abs (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Abs (n.Value));
|
|
}
|
|
|
|
public static OracleNumber Acos (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Acos ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Add (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (x.Value + y.Value);
|
|
}
|
|
|
|
public static OracleNumber Asin (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Asin ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Atan (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Atan ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Atan2 (OracleNumber y, OracleNumber x)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Atan2 ((double) y, (double) x));
|
|
}
|
|
|
|
public static OracleNumber Ceiling (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Ceiling ((double) n));
|
|
}
|
|
|
|
[MonoTODO]
|
|
public int CompareTo (object obj)
|
|
{
|
|
throw new NotImplementedException ();
|
|
}
|
|
|
|
public static OracleNumber Cos (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Cos ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Cosh (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Cosh ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Divide (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (x.Value / y.Value);
|
|
}
|
|
|
|
[MonoTODO]
|
|
public override bool Equals (object value)
|
|
{
|
|
throw new NotImplementedException ();
|
|
}
|
|
|
|
public static OracleBoolean Equals (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleBoolean.Null;
|
|
return new OracleBoolean (x.Value == y.Value);
|
|
}
|
|
|
|
public static OracleNumber Exp (OracleNumber p)
|
|
{
|
|
if (p.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Exp ((double) p));
|
|
}
|
|
|
|
public static OracleNumber Floor (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Decimal.Floor (n.Value));
|
|
}
|
|
|
|
[MonoTODO]
|
|
public override int GetHashCode ()
|
|
{
|
|
throw new NotImplementedException ();
|
|
}
|
|
|
|
public static OracleBoolean GreaterThan (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleBoolean.Null;
|
|
return new OracleBoolean (x.Value > y.Value);
|
|
}
|
|
|
|
public static OracleBoolean GreaterThanOrEqual (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleBoolean.Null;
|
|
return new OracleBoolean (x.Value >= y.Value);
|
|
}
|
|
|
|
public static OracleBoolean LessThan (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleBoolean.Null;
|
|
return new OracleBoolean (x.Value < y.Value);
|
|
}
|
|
|
|
public static OracleBoolean LessThanOrEqual (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleBoolean.Null;
|
|
return new OracleBoolean (x.Value <= y.Value);
|
|
}
|
|
|
|
public static OracleNumber Log (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Log ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Log (OracleNumber n, int newBase)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Log ((double) n, (double) newBase));
|
|
}
|
|
|
|
public static OracleNumber Log (OracleNumber n, OracleNumber newBase)
|
|
{
|
|
if (n.IsNull || newBase.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Log ((double) n, (double) newBase));
|
|
}
|
|
|
|
public static OracleNumber Log10 (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Log10 ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Max (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Max (x.Value, y.Value));
|
|
}
|
|
|
|
public static OracleNumber Min (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Min (x.Value, y.Value));
|
|
}
|
|
|
|
public static OracleNumber Modulo (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (x.Value % y.Value);
|
|
}
|
|
|
|
public static OracleNumber Multiply (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (x.Value * y.Value);
|
|
}
|
|
|
|
public static OracleNumber Negate (OracleNumber x)
|
|
{
|
|
if (x.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (-x.Value);
|
|
}
|
|
|
|
public static OracleBoolean NotEquals (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleBoolean.Null;
|
|
return new OracleBoolean (x.Value != y.Value);
|
|
}
|
|
|
|
public static OracleNumber Parse (string s)
|
|
{
|
|
return new OracleNumber (Decimal.Parse (s));
|
|
}
|
|
|
|
public static OracleNumber Pow (OracleNumber x, int y)
|
|
{
|
|
if (x.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Pow ((double) x, (double) y));
|
|
}
|
|
|
|
public static OracleNumber Pow (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Pow ((double) x, (double) y));
|
|
}
|
|
|
|
public static OracleNumber Round (OracleNumber n, int position)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Round (n.Value, position));
|
|
}
|
|
|
|
public static OracleNumber Shift (OracleNumber n, int digits)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (n * (OracleNumber) (Math.Pow (10, digits)));
|
|
}
|
|
|
|
public static OracleNumber Sign (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Sign (n.Value));
|
|
}
|
|
|
|
public static OracleNumber Sin (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Sin ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Sinh (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Sinh ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Sqrt (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Sqrt ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Subtract (OracleNumber x, OracleNumber y)
|
|
{
|
|
if (x.IsNull || y.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (x.Value - y.Value);
|
|
}
|
|
|
|
public static OracleNumber Tan (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Tan ((double) n));
|
|
}
|
|
|
|
public static OracleNumber Tanh (OracleNumber n)
|
|
{
|
|
if (n.IsNull)
|
|
return OracleNumber.Null;
|
|
return new OracleNumber (Math.Tanh ((double) n));
|
|
}
|
|
|
|
public override string ToString ()
|
|
{
|
|
return ToString(null);
|
|
}
|
|
|
|
[MonoTODO]
|
|
public static OracleNumber Truncate (OracleNumber n, int position)
|
|
{
|
|
throw new NotImplementedException ();
|
|
}
|
|
|
|
#endregion // Methods
|
|
|
|
#region Operators and Type Conversions
|
|
|
|
public static OracleNumber operator + (OracleNumber x, OracleNumber y)
|
|
{
|
|
return Add (x, y);
|
|
}
|
|
|
|
public static OracleNumber operator / (OracleNumber x, OracleNumber y)
|
|
{
|
|
return Divide (x, y);
|
|
}
|
|
|
|
public static OracleBoolean operator == (OracleNumber x, OracleNumber y)
|
|
{
|
|
return Equals (x, y);
|
|
}
|
|
|
|
public static OracleBoolean operator > (OracleNumber x, OracleNumber y)
|
|
{
|
|
return GreaterThan (x, y);
|
|
}
|
|
|
|
public static OracleBoolean operator >= (OracleNumber x, OracleNumber y)
|
|
{
|
|
return GreaterThanOrEqual (x, y);
|
|
}
|
|
|
|
public static OracleBoolean operator != (OracleNumber x, OracleNumber y)
|
|
{
|
|
return NotEquals (x, y);
|
|
}
|
|
|
|
public static OracleBoolean operator < (OracleNumber x, OracleNumber y)
|
|
{
|
|
return LessThan (x, y);
|
|
}
|
|
|
|
public static OracleBoolean operator <= (OracleNumber x, OracleNumber y)
|
|
{
|
|
return LessThanOrEqual (x, y);
|
|
}
|
|
|
|
public static OracleNumber operator % (OracleNumber x, OracleNumber y)
|
|
{
|
|
return Modulo (x, y);
|
|
}
|
|
|
|
public static OracleNumber operator * (OracleNumber x, OracleNumber y)
|
|
{
|
|
return Multiply (x, y);
|
|
}
|
|
|
|
public static OracleNumber operator - (OracleNumber x, OracleNumber y)
|
|
{
|
|
return Subtract (x, y);
|
|
}
|
|
|
|
public static OracleNumber operator - (OracleNumber x)
|
|
{
|
|
return Negate (x);
|
|
}
|
|
|
|
public static explicit operator OracleNumber (decimal x)
|
|
{
|
|
return new OracleNumber (x);
|
|
}
|
|
|
|
public static explicit operator OracleNumber (double x)
|
|
{
|
|
return new OracleNumber (x);
|
|
}
|
|
|
|
public static explicit operator OracleNumber (int x)
|
|
{
|
|
return new OracleNumber (x);
|
|
}
|
|
|
|
public static explicit operator OracleNumber (long x)
|
|
{
|
|
return new OracleNumber (x);
|
|
}
|
|
|
|
public static explicit operator double (OracleNumber x)
|
|
{
|
|
if (x.IsNull)
|
|
throw new NullReferenceException ();
|
|
return (double) x.Value;
|
|
}
|
|
|
|
public static explicit operator decimal (OracleNumber x)
|
|
{
|
|
if (x.IsNull)
|
|
throw new NullReferenceException ();
|
|
return x.Value;
|
|
}
|
|
|
|
public static explicit operator int (OracleNumber x)
|
|
{
|
|
if (x.IsNull)
|
|
throw new NullReferenceException ();
|
|
return (int) x.Value;
|
|
}
|
|
|
|
public static explicit operator long (OracleNumber x)
|
|
{
|
|
if (x.IsNull)
|
|
throw new NullReferenceException ();
|
|
return (long) x.Value;
|
|
}
|
|
|
|
public static explicit operator OracleNumber (string x)
|
|
{
|
|
return OracleNumber.Parse (x);
|
|
}
|
|
|
|
#endregion // Operators and Type Conversions
|
|
|
|
#region internal IFormatProvider handling
|
|
internal String ToString(IFormatProvider format)
|
|
{
|
|
if (IsNull)
|
|
return "Null";
|
|
return Value.ToString (format);
|
|
}
|
|
#endregion
|
|
}
|
|
}
|