internal virtual Value getValue(SQLContext sqlContext)
{
decode();
switch (type)
{
case edsTypeNull:
return new ValueNull();
case edsTypeUtf8:
return new ValueString(@string);
case edsTypeOpaque:
return new ValueBytes(bytes);
case edsTypeScaled:
return new ValueNumber(ScaleDecimal(integer64, scale));
case edsTypeInt32:
return new ValueInt(integer32, 0);
case edsTypeInt64:
return new ValueLong(integer64, 0);
case edsTypeBoolean:
return new ValueBoolean(@bool);
case edsTypeDouble:
return new ValueDouble(dbl);
case edsTypeScaledTime:
{
long inNanos = Value.reScale(integer64, scale, NANOSECONDS_SCALE);
DateTime utcTime = new DateTime(baseDate.Ticks + inNanos / NANOSECONDS_PER_TICK, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sqlContext.TimeZone);
return new ValueTime(localTime);
}
case edsTypeTime:
{
DateTime utcTime = new DateTime(baseDate.Ticks + integer64 * TimeSpan.TicksPerMillisecond, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sqlContext.TimeZone);
return new ValueTime(localTime);
}
case edsTypeScaledDate:
{
long inSeconds = Value.reScale(integer64, scale, SECONDS_SCALE);
DateTime utcTime = new DateTime(baseDate.Ticks + inSeconds * TimeSpan.TicksPerSecond, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sqlContext.TimeZone);
return new ValueDate(localTime);
}
case edsTypeMilliseconds:
{
DateTime utcTime = new DateTime(baseDate.Ticks + integer64 * TimeSpan.TicksPerMillisecond, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sqlContext.TimeZone);
return new ValueDate(localTime);
}
case edsTypeScaledTimestamp:
{
long inNanos = Value.reScale(integer64, scale, NANOSECONDS_SCALE);
DateTime utcTime = new DateTime(baseDate.Ticks + inNanos / NANOSECONDS_PER_TICK, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sqlContext.TimeZone);
return new ValueTimestamp(localTime);
}
case edsTypeNanoseconds:
{
DateTime utcTime = new DateTime(baseDate.Ticks + integer64 / NANOSECONDS_PER_TICK, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sqlContext.TimeZone);
return new ValueTimestamp(localTime);
}
case edsTypeBigInt:
return new ValueNumber(bigDecimal);
}
throw new NuoDbSqlException("On message type " + currentMessageType + ":NuoDB jdbc decode value type " + type + " not yet implemented");
}