Skip to content

Commit 59b8ba8

Browse files
committed
Oracle: simlplify some DateTimeOffset operations
It also fixed some issues with these operations
1 parent 1f2f16f commit 59b8ba8

File tree

1 file changed

+3
-27
lines changed
  • Orm/Xtensive.Orm.Oracle/Sql.Drivers.Oracle/v09

1 file changed

+3
-27
lines changed

Orm/Xtensive.Orm.Oracle/Sql.Drivers.Oracle/v09/Compiler.cs

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -356,35 +356,13 @@ private static SqlExpression DateTimeOffsetExtractPart(SqlExpression dateTimeOff
356356

357357
private static SqlExpression DateTimeOffsetToLocalDateTime(SqlExpression dateTimeOffset)
358358
{
359-
return SqlDml.Cast(
360-
SqlDml.DateTimePlusInterval(
361-
DateTimeOffsetToUtcDateTime(dateTimeOffset),
362-
SqlDml.DateTimeMinusDateTime(
363-
DateTimeOffsetToUtcDateTime(
364-
SqlDml.Native("SYSTIMESTAMP")),
365-
SqlDml.Native("SYSTIMESTAMP"))),
366-
SqlType.DateTime);
359+
return SqlDml.Cast(DateTimeOffsetToLocalTime(dateTimeOffset), SqlType.DateTime);
367360
}
368361

369362

370363
private static SqlExpression DateTimeOffsetToLocalTime(SqlExpression dateTimeOffset)
371364
{
372-
return SqlDml.FunctionCall("FROM_TZ",
373-
SqlDml.Cast(
374-
dateTimeOffset
375-
-
376-
(SysExtractUtc(SqlDml.Native("CURRENT_TIMESTAMP"))
377-
- SysExtractUtc(
378-
SqlDml.FunctionCall("FROM_TZ",
379-
SqlDml.Cast(SqlDml.Native("CURRENT_TIMESTAMP"), SqlType.DateTime),
380-
DateTimeOffsetExtractPart(dateTimeOffset, "TZR")))),
381-
SqlType.DateTime)
382-
, SqlDml.Native("sessiontimezone"));
383-
}
384-
385-
private static SqlExpression SysExtractUtc(SqlExpression dateTimeOffset)
386-
{
387-
return SqlDml.FunctionCall("SYS_EXTRACT_UTC", dateTimeOffset);
365+
return SqlDml.RawConcat(dateTimeOffset, SqlDml.Native(" AT LOCAL"));
388366
}
389367

390368
private static SqlExpression DateTimeToDateTimeOffset(SqlExpression dateTime)
@@ -394,9 +372,7 @@ private static SqlExpression DateTimeToDateTimeOffset(SqlExpression dateTime)
394372

395373
private static SqlExpression DateTimeOffsetToUtcTime(SqlExpression dateTimeOffset)
396374
{
397-
return SqlDml.FunctionCall("FROM_TZ",
398-
DateTimeOffsetToUtcDateTime(dateTimeOffset),
399-
AnsiString("+00:00"));
375+
return SqlDml.RawConcat(dateTimeOffset, SqlDml.Native(" at time zone 'UTC'"));
400376
}
401377

402378
private static SqlExpression AnsiString(string value)

0 commit comments

Comments
 (0)