예제 #1
0
        public TimestampData Trunc(Session session, TimestampData source)
        {
            DateTime time2 = (DateTime)this.ConvertSQLToCSharp(session, source);
            DateTime date  = time2.Date;

            return((TimestampData)this.ConvertCSharpToSQL(session, date));
        }
예제 #2
0
        public static TimestampData AddMonths(TimestampData source, int months)
        {
            int      nanos = source.GetNanos();
            DateTime time  = new DateTime(source.GetSeconds() * 0x989680L, DateTimeKind.Utc);

            return(new TimestampData(time.AddMonths(months).Ticks / 0x989680L, nanos, source.GetZone()));
        }
예제 #3
0
        public TimestampData GetLastDayOfMonth(Session session, TimestampData source)
        {
            DateTime a = (DateTime)this.ConvertSQLToCSharp(session, source);

            a = a.AddMonths(1);
            a = a.AddDays(-((double)a.Day));
            return((TimestampData)this.ConvertCSharpToSQL(session, a));
        }
예제 #4
0
        public TimestampData Round(Session session, TimestampData source)
        {
            DateTime a     = (DateTime)this.ConvertSQLToCSharp(session, source);
            DateTime time2 = a.Date.AddHours(12.0);
            DateTime time3 = (a > time2) ? a.Date.AddDays(1.0) : time2;

            a = time3.Date;
            return((TimestampData)this.ConvertCSharpToSQL(session, a));
        }
예제 #5
0
        public override object Subtract(object a, object b, SqlType aType, SqlType otherType)
        {
            if ((a == null) || (b == null))
            {
                return(null);
            }
            switch (base.TypeCode)
            {
            case 0x5b:
            {
                if (!otherType.IsNumberType())
                {
                    break;
                }
                double num2 = ((double)SqlType.SqlDouble.ConvertToDefaultType(null, b)) * 86400.0;
                return(AddSeconds((TimestampData)a, -((int)num2), 0));
            }

            case 0x5c:
            case 0x5e:
            {
                if (b is IntervalMonthData)
                {
                    throw Error.RuntimeError(0xc9, "DateTimeType");
                }
                IntervalSecondData data4 = b as IntervalSecondData;
                if (data4 == null)
                {
                    goto Label_00ED;
                }
                return(AddSeconds((TimeData)a, -((int)data4.Units), -data4.Nanos));
            }

            case 0x5d:
            case 0x5f:
                break;

            default:
                goto Label_00ED;
            }
            TimestampData     source = (TimestampData)a;
            IntervalMonthData data2  = b as IntervalMonthData;

            if (data2 != null)
            {
                return(AddMonths(source, -((int)data2.Units)));
            }
            IntervalSecondData data3 = b as IntervalSecondData;

            if (data3 != null)
            {
                return(AddSeconds(source, -((int)data3.Units), -data3.Nanos));
            }
Label_00ED:
            throw Error.RuntimeError(0xc9, "DateTimeType");
        }
예제 #6
0
 public static TimestampData AddSeconds(TimestampData source, int seconds, int nanos)
 {
     nanos   += source.GetNanos();
     seconds += nanos / 0x3b9aca00;
     nanos    = nanos % 0x3b9aca00;
     if (nanos < 0)
     {
         nanos += 0x3b9aca00;
         seconds--;
     }
     return(new TimestampData(source.GetSeconds() + seconds, nanos, source.GetZone()));
 }
예제 #7
0
        public TimestampData ConvertBetweenTimeZones(Session session, TimestampData source, string thisZone, string newZone)
        {
            DateTime     a            = (DateTime)this.ConvertSQLToCSharp(session, source);
            TimeZoneInfo timeZoneInfo = GetTimeZoneInfo(thisZone);
            TimeZoneInfo info2        = GetTimeZoneInfo(newZone);

            if ((thisZone == null) || (info2 == null))
            {
                throw Error.GetError(0x15b9);
            }
            a = TimeZoneInfo.ConvertTime(a, timeZoneInfo, info2);
            return((TimestampData)this.ConvertCSharpToSQL(session, a));
        }
예제 #8
0
        public override string ConvertToString(object a)
        {
            if (a == null)
            {
                return(null);
            }
            switch (base.TypeCode)
            {
            case 0x5b:
                return(UtlDateTime.GetDateString(((TimestampData)a).GetSeconds()));

            case 0x5c:
            case 0x5e:
            {
                TimeData data = (TimeData)a;
                int      num2 = NormaliseTime(data.GetSeconds() + data.GetZone());
                string   str2 = base.IntervalSecondToString((long)num2, data.GetNanos(), false);
                if (this._withTimeZone)
                {
                    str2 = SqlType.SqlIntervalHourToMinute.IntervalSecondToString((long)data.GetZone(), 0, true);
                    StringBuilder builder1 = new StringBuilder(str2);
                    builder1.Append(str2);
                    return(builder1.ToString());
                }
                return(str2);
            }

            case 0x5d:
            case 0x5f:
            {
                TimestampData data2 = (TimestampData)a;
                StringBuilder sb    = new StringBuilder();
                UtlDateTime.GetTimestampString(sb, data2.GetSeconds() + data2.GetZone(), data2.GetNanos(), base.Scale);
                if (this._withTimeZone)
                {
                    string str3 = SqlType.SqlIntervalHourToMinute.IntervalSecondToString((long)data2.GetZone(), 0, true);
                    sb.Append(str3);
                    return(sb.ToString());
                }
                return(sb.ToString());
            }
            }
            throw Error.RuntimeError(0xc9, "DateTimeType");
        }
예제 #9
0
        public override object ConvertSQLToCSharp(ISessionInterface session, object a)
        {
            if (a == null)
            {
                return(null);
            }
            switch (base.TypeCode)
            {
            case 0x5b:
            {
                long seconds = ((TimestampData)a).GetSeconds();
                seconds = UtlDateTime.ConvertTicksToTimeZone(session.GetTimeZone(), seconds * 0x989680L) / 0x989680L;
                return(new DateTime(UtlDateTime.GetNormalisedDate(seconds) * 0x989680L));
            }

            case 0x5c:
            {
                long seconds = ((TimeData)a).GetSeconds();
                seconds = UtlDateTime.ConvertTicksToTimeZone(session.GetTimeZone(), seconds * 0x989680L) / 0x989680L;
                return(new DateTime(UtlDateTime.GetNormalisedTime(seconds) * 0x989680L));
            }

            case 0x5d:
            {
                TimestampData data    = (TimestampData)a;
                long          seconds = data.GetSeconds();
                seconds = UtlDateTime.ConvertTicksToTimeZone(session.GetTimeZone(), seconds * 0x989680L) / 0x989680L;
                return(new DateTime((seconds * 0x989680L) + (data.GetNanos() / 100)));
            }

            case 0x5e:
            {
                TimeData data2 = (TimeData)a;
                return(new DateTime(UtlDateTime.GetNormalisedTime((long)(data2.GetSeconds() + data2.GetZone())) * 0x989680L));
            }

            case 0x5f:
            {
                TimestampData data3 = (TimestampData)a;
                return(new DateTime((data3.GetSeconds() * 0x989680L) + (data3.GetNanos() / 100)));
            }
            }
            throw Error.RuntimeError(0xc9, "DateTimeType");
        }
예제 #10
0
        public override object ConvertToTypeLimits(ISessionInterface session, object a)
        {
            if (a == null)
            {
                return(null);
            }
            if (base.Scale == 9)
            {
                return(a);
            }
            switch (base.TypeCode)
            {
            case 0x5b:
                return(a);

            case 0x5c:
            case 0x5e:
            {
                TimeData data  = (TimeData)a;
                int      nanos = data.GetNanos();
                int      num3  = this.ScaleNanos(nanos);
                if (num3 != nanos)
                {
                    return(new TimeData((long)data.GetSeconds(), num3, data.GetZone()));
                }
                return(data);
            }

            case 0x5d:
            case 0x5f:
            {
                TimestampData data2 = (TimestampData)a;
                int           nanos = data2.GetNanos();
                int           num5  = this.ScaleNanos(nanos);
                if (num5 != nanos)
                {
                    return(new TimestampData(data2.GetSeconds(), num5, data2.GetZone()));
                }
                return(data2);
            }
            }
            throw Error.RuntimeError(0xc9, "DateTimeType");
        }
예제 #11
0
        public static int SubtractMonths(TimestampData a, TimestampData b, bool isYear)
        {
            bool flag = false;

            if (b.GetSeconds() > a.GetSeconds())
            {
                flag = true;
                a    = b;
                b    = a;
            }
            DateTime time  = new DateTime(b.GetSeconds() * 0x989680L, DateTimeKind.Utc);
            int      month = time.Month;
            int      year  = time.Year;
            DateTime time2 = new DateTime(a.GetSeconds() * 0x989680L, DateTimeKind.Utc);

            try
            {
                DateTime time3 = time2.AddMonths(-1 * month).AddYears(-1 * year);
                month = time3.Month;
                year  = time3.Year;
            }
            catch (Exception)
            {
                month = time2.Subtract(time).Days / 30;
                year  = 0;
            }
            if (isYear)
            {
                return(year * 12);
            }
            if (month < 0)
            {
                month += 12;
                year--;
            }
            month += year * 12;
            if (flag)
            {
                month = -month;
            }
            return(month);
        }
예제 #12
0
        public object ConvertSqltoCSharpGmt(ISessionInterface session, object a)
        {
            switch (base.TypeCode)
            {
            case 0x5b:
                return(new DateTime(((TimestampData)a).GetSeconds() * 0x989680L));

            case 0x5c:
            case 0x5e:
                return(new DateTime(((TimeData)a).GetSeconds() * 0x989680L));

            case 0x5d:
            case 0x5f:
            {
                TimestampData data = (TimestampData)a;
                return(new DateTime((data.GetSeconds() * 0x989680L) + (data.GetNanos() / 100)));
            }
            }
            throw Error.RuntimeError(0xc9, "DateTimeType");
        }
예제 #13
0
        public object ChangeZone(object a, SqlType otherType, int targetZone, int localZone)
        {
            if (a == null)
            {
                return(null);
            }
            if ((otherType.TypeCode == 0x5f) || (otherType.TypeCode == 0x5e))
            {
                localZone = 0;
            }
            if ((targetZone > DTIType.TimezoneSecondsLimit) || (-targetZone > DTIType.TimezoneSecondsLimit))
            {
                throw Error.GetError(0xd51);
            }
            switch (base.TypeCode)
            {
            case 0x5e:
            {
                TimeData data = (TimeData)a;
                if ((localZone == 0) && (data.GetZone() == targetZone))
                {
                    return(a);
                }
                return(new TimeData((long)(data.GetSeconds() - localZone), data.GetNanos(), targetZone));
            }

            case 0x5f:
            {
                TimestampData data2 = (TimestampData)a;
                if ((localZone == 0) && (data2.GetZone() == targetZone))
                {
                    return(a);
                }
                return(new TimestampData(data2.GetSeconds() - localZone, data2.GetNanos(), targetZone));
            }
            }
            return(a);
        }
예제 #14
0
        public TimestampData GetNextDay(Session session, TimestampData source, string weekDay)
        {
            int num = -1;

            string[] strArray = new string[] { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" };
            for (int i = 0; i < strArray.Length; i++)
            {
                if (strArray[i].IndexOf(weekDay, StringComparison.InvariantCultureIgnoreCase) == 0)
                {
                    num = i;
                    break;
                }
            }
            if (num == -1)
            {
                throw Error.GetError(0x15b9);
            }
            DateTime a    = ((DateTime)this.ConvertSQLToCSharp(session, source)).AddDays(1.0);
            int      num2 = ((num - a.DayOfWeek) >= 0) ? (num - a.DayOfWeek) : ((num - a.DayOfWeek) + 7);

            a = a.AddDays((double)num2);
            return((TimestampData)this.ConvertCSharpToSQL(session, a));
        }
예제 #15
0
        public override object Subtract(object a, object b, SqlType aType, SqlType otherType)
        {
            if ((a == null) || (b == null))
            {
                return(null);
            }
            switch (base.TypeCode)
            {
            case 0x65:
            case 0x66:
            case 0x6b:
            {
                IntervalMonthData data  = a as IntervalMonthData;
                IntervalMonthData data2 = b as IntervalMonthData;
                if ((data == null) || (data2 == null))
                {
                    TimestampData data3 = a as TimestampData;
                    TimestampData data4 = b as TimestampData;
                    if ((data3 == null) || (data4 == null))
                    {
                        throw Error.RuntimeError(0xc9, "IntervalType");
                    }
                    bool isYear = base.TypeCode == 0x65;
                    return(new IntervalMonthData((long)DateTimeType.SubtractMonths(data3, data4, isYear), this));
                }
                return(new IntervalMonthData(data.Units - data2.Units, this));
            }

            case 0x67:
            case 0x68:
            case 0x69:
            case 0x6a:
            case 0x6c:
            case 0x6d:
            case 110:
            case 0x6f:
            case 0x70:
            case 0x71:
            {
                IntervalSecondData data5 = a as IntervalSecondData;
                IntervalSecondData data6 = b as IntervalSecondData;
                if ((data5 == null) || (data6 == null))
                {
                    TimeData data7 = a as TimeData;
                    TimeData data8 = b as TimeData;
                    if ((data7 != null) && (data8 != null))
                    {
                        long num4 = data7.GetSeconds() - data8.GetSeconds();
                        return(new IntervalSecondData(num4, data7.GetNanos() - data8.GetNanos(), this, true));
                    }
                    TimestampData data9  = a as TimestampData;
                    TimestampData data10 = b as TimestampData;
                    if ((data9 != null) && (data10 != null))
                    {
                        long num6 = data9.GetSeconds() - data10.GetSeconds();
                        return(new IntervalSecondData(num6, data9.GetNanos() - data10.GetNanos(), this, true));
                    }
                    break;
                }
                long seconds = data5.Units - data6.Units;
                return(new IntervalSecondData(seconds, data5.Nanos - data6.Nanos, this, true));
            }
            }
            throw Error.RuntimeError(0xc9, "IntervalType");
        }
예제 #16
0
        public override object ConvertToType(ISessionInterface session, object a, SqlType othType)
        {
            if (a == null)
            {
                return(a);
            }
            switch (othType.TypeCode)
            {
            case 0x5b:
            case 0x5c:
            case 0x5d:
            case 0x5e:
            case 0x5f:
                goto Label_0126;

            case 100:
            case 1:
            case 12:
                break;

            case 40:
            case 0x19:
            case 3:
            case 4:
            case 8:
                a = a.ToString();
                break;

            default:
                throw Error.GetError(0x15b9);
            }
            int typeCode = base.TypeCode;

            if (typeCode != 0x5b)
            {
                if ((typeCode - 0x5c) <= 3)
                {
                    goto Label_0105;
                }
                goto Label_0126;
            }
            try
            {
                DateTime time    = DateTime.Parse((string)a, CultureInfo.InvariantCulture);
                long     seconds = time.Ticks / 0x989680L;
                long     num4    = (time.Ticks - (seconds * 0x989680L)) * 100L;
                return(new TimestampData(seconds, (int)num4));
            }
            catch (Exception)
            {
                return(session.GetScanner().ConvertToDatetimeInterval(session, (string)a, this));
            }
            Label_0105:
            return(session.GetScanner().ConvertToDatetimeInterval(session, (string)a, this));

Label_0126:
            switch (base.TypeCode)
            {
            case 0x5b:
                switch (othType.TypeCode)
                {
                case 0x5b:
                    return(a);

                case 0x5d:
                    return(new TimestampData(UtlDateTime.GetNormalisedDate(((TimestampData)a).GetSeconds())));

                case 0x5f:
                    return(new TimestampData(UtlDateTime.GetNormalisedDate(((TimestampData)a).GetSeconds() + ((TimestampData)a).GetZone())));
                }
                break;

            case 0x5c:
                switch (othType.TypeCode)
                {
                case 0x5c:
                    return(this.ConvertToTypeLimits(session, a));

                case 0x5d:
                {
                    TimestampData data = (TimestampData)a;
                    return(new TimeData((long)((int)data.GetSeconds()), this.ScaleNanos(data.GetNanos())));
                }

                case 0x5e:
                {
                    TimeData data2 = (TimeData)a;
                    return(new TimeData((long)(data2.GetSeconds() + data2.GetZone()), this.ScaleNanos(data2.GetNanos()), 0));
                }

                case 0x5f:
                {
                    TimestampData data3 = (TimestampData)a;
                    return(new TimeData((long)(((int)data3.GetSeconds()) + data3.GetZone()), this.ScaleNanos(data3.GetNanos()), 0));
                }
                }
                throw Error.GetError(0x15b9);

            case 0x5d:
                switch (othType.TypeCode)
                {
                case 0x5b:
                    return(a);

                case 0x5c:
                {
                    TimeData data4 = (TimeData)a;
                    return(new TimestampData(session.GetCurrentDate().GetSeconds() + data4.GetSeconds(), this.ScaleNanos(data4.GetNanos())));
                }

                case 0x5d:
                    return(this.ConvertToTypeLimits(session, a));

                case 0x5e:
                {
                    TimeData data5 = (TimeData)a;
                    return(new TimestampData((session.GetCurrentDate().GetSeconds() + data5.GetSeconds()) - session.GetZoneSeconds(), this.ScaleNanos(data5.GetNanos()), session.GetZoneSeconds()));
                }

                case 0x5f:
                {
                    TimestampData data6 = (TimestampData)a;
                    return(new TimestampData(data6.GetSeconds() + data6.GetZone(), this.ScaleNanos(data6.GetNanos())));
                }
                }
                throw Error.GetError(0x15b9);

            case 0x5e:
                switch (othType.TypeCode)
                {
                case 0x5c:
                {
                    TimeData data7 = (TimeData)a;
                    return(new TimeData((long)(data7.GetSeconds() - session.GetZoneSeconds()), this.ScaleNanos(data7.GetNanos()), session.GetZoneSeconds()));
                }

                case 0x5d:
                {
                    TimestampData data8 = (TimestampData)a;
                    return(new TimeData((long)(((int)data8.GetSeconds()) - session.GetZoneSeconds()), this.ScaleNanos(data8.GetNanos()), session.GetZoneSeconds()));
                }

                case 0x5e:
                    return(this.ConvertToTypeLimits(session, a));

                case 0x5f:
                {
                    TimestampData data9 = (TimestampData)a;
                    return(new TimeData((long)((int)data9.GetSeconds()), this.ScaleNanos(data9.GetNanos()), data9.GetZone()));
                }
                }
                throw Error.GetError(0x15b9);

            case 0x5f:
                switch (othType.TypeCode)
                {
                case 0x5b:
                    return(new TimestampData(((TimestampData)a).GetSeconds(), 0, session.GetZoneSeconds()));

                case 0x5c:
                {
                    TimeData data10 = (TimeData)a;
                    return(new TimestampData((session.GetCurrentDate().GetSeconds() + data10.GetSeconds()) - session.GetZoneSeconds(), this.ScaleNanos(data10.GetNanos()), session.GetZoneSeconds()));
                }

                case 0x5d:
                {
                    TimestampData data11 = (TimestampData)a;
                    return(new TimestampData(data11.GetSeconds() - session.GetZoneSeconds(), this.ScaleNanos(data11.GetNanos()), session.GetZoneSeconds()));
                }

                case 0x5e:
                {
                    TimeData data12 = (TimeData)a;
                    return(new TimestampData(session.GetCurrentDate().GetSeconds() + data12.GetSeconds(), this.ScaleNanos(data12.GetNanos()), data12.GetZone()));
                }

                case 0x5f:
                    return(this.ConvertToTypeLimits(session, a));
                }
                throw Error.GetError(0x15b9);

            default:
                throw Error.RuntimeError(0xc9, "DateTimeType");
            }
            throw Error.GetError(0x15b9);
        }
예제 #17
0
        public override int Compare(Session session, object a, object b, SqlType otherType, bool forEquality)
        {
            if (a == b)
            {
                return(0);
            }
            if (a == null)
            {
                return(-1);
            }
            if (b == null)
            {
                return(1);
            }
            switch (base.TypeCode)
            {
            case 0x5b:
            case 0x5d:
            case 0x5f:
            {
                TimestampData data  = (TimestampData)a;
                TimestampData data2 = (TimestampData)b;
                long          num3  = data.GetSeconds() - data2.GetSeconds();
                if (num3 == 0)
                {
                    num3 = data.GetNanos() - data2.GetNanos();
                }
                if (num3 == 0)
                {
                    return(0);
                }
                if (num3 <= 0L)
                {
                    return(-1);
                }
                return(1);
            }

            case 0x5c:
            case 0x5e:
            {
                TimeData data3 = (TimeData)a;
                TimeData data4 = (TimeData)b;
                long     num4  = data3.GetSeconds() - data4.GetSeconds();
                if (num4 == 0)
                {
                    num4 = data3.GetNanos() - data4.GetNanos();
                }
                if (num4 == 0)
                {
                    return(0);
                }
                if (num4 <= 0L)
                {
                    return(-1);
                }
                return(1);
            }
            }
            throw Error.RuntimeError(0xc9, "DateTimeType");
        }
예제 #18
0
        public override int GetPart(Session session, object dateTime, int part)
        {
            long num;

            if ((base.TypeCode == 0x5c) || (base.TypeCode == 0x5e))
            {
                TimeData data = (TimeData)dateTime;
                num = (data.GetSeconds() + data.GetZone()) * 0x989680L;
            }
            else
            {
                TimestampData data2 = (TimestampData)dateTime;
                num = (data2.GetSeconds() + data2.GetZone()) * 0x989680L;
            }
            DateTime time = new DateTime(num);

            switch (part)
            {
            case 0x65:
                return(time.Year);

            case 0x66:
                return(time.Month);

            case 0x67:
            case 260:
                return(time.Day);

            case 0x68:
                return(time.Hour);

            case 0x69:
                return(time.Minute);

            case 0x6a:
                return(time.Second);

            case 0x101:
                if (base.TypeCode != 0x5f)
                {
                    return(((TimeData)dateTime).GetZone() / 0xe10);
                }
                return(((TimestampData)dateTime).GetZone() / 0xe10);

            case 0x102:
                if (base.TypeCode != 0x5f)
                {
                    return((((TimeData)dateTime).GetZone() / 60) % 60);
                }
                return((((TimestampData)dateTime).GetZone() / 60) % 60);

            case 0x103:
                return(((int)time.DayOfWeek) + 1);

            case 0x105:
                return(time.DayOfYear);

            case 0x106:
                return(CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday));

            case 0x107:
                return(((time.Month - 1) / 3) + 1);

            case 0x10a:
                if ((base.TypeCode != 0x5c) && (base.TypeCode != 0x5e))
                {
                    try
                    {
                        dateTime = (this._withTimeZone ? SqlType.SqlTimeWithTimeZone : SqlType.SqlTime).CastToType(session, dateTime, this);
                    }
                    catch (CoreException)
                    {
                    }
                }
                return(((TimeData)dateTime).GetSeconds());
            }
            throw Error.RuntimeError(0xc9, "DateTimeType - " + part);
        }