Skip to content

Commit 6e304c3

Browse files
committed
Firebird: DateConstruct/TimeConstruct support
1 parent 7e52c92 commit 6e304c3

3 files changed

Lines changed: 27 additions & 8 deletions

File tree

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/Constants.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,9 @@ internal static class Constants
1414

1515
// cannot use "FFF" cause it may lead to empty string for fractions part.
1616
public const string DateTimeFormatString = @"''\'yyyy\.MM\.dd HH\:mm\:ss\.fff\'''";
17+
#if NET6_0_OR_GREATER //DO_DATEONLY
18+
public const string DateFormatString = @"''\'yyyy\.MM\.dd\'''";
19+
public const string TimeFormatString = @"''\'HH\:mm\:ss\.fff\'''";
20+
#endif
1721
}
1822
}

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v2_5/Compiler.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,22 @@ public override void Visit(SqlFunctionCall node)
201201
node.Arguments[1] - 1),
202202
node.Arguments[2] - 1));
203203
return;
204+
#if NET6_0_OR_GREATER //DO_DATEONLY
205+
case SqlFunctionType.DateConstruct:
206+
Visit(DateAddDay(DateAddMonth(DateAddYear(SqlDml.Cast(SqlDml.Literal(new DateOnly(2001, 1, 1)), SqlType.Date),
207+
node.Arguments[0] - 2001),
208+
node.Arguments[1] - 1),
209+
node.Arguments[2] - 1));
210+
return;
211+
case SqlFunctionType.TimeConstruct: {
212+
Visit(DateAddMillisecond(DateAddSecond(DateAddMinute(DateAddHour(SqlDml.Cast(SqlDml.Literal(new TimeOnly(0, 0, 0)), SqlType.Time),
213+
node.Arguments[0]),
214+
node.Arguments[1]),
215+
node.Arguments[2]),
216+
node.Arguments[3]));
217+
return;
218+
}
219+
#endif
204220
case SqlFunctionType.DateTimeToStringIso:
205221
Visit(DateTimeToStringIso(node.Arguments[0]));
206222
return;

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v2_5/Translator.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@ namespace Xtensive.Sql.Drivers.Firebird.v2_5
1919
{
2020
internal class Translator : SqlTranslator
2121
{
22-
public override string DateTimeFormatString
23-
{
24-
get { return Constants.DateTimeFormatString; }
25-
}
22+
public override string DateTimeFormatString => Constants.DateTimeFormatString;
2623

27-
public override string TimeSpanFormatString
28-
{
29-
get { return string.Empty; }
30-
}
24+
#if NET6_0_OR_GREATER //DO_DATEONLY
25+
public override string DateOnlyFormatString => Constants.DateFormatString;
26+
public override string TimeOnlyFormatString => Constants.TimeFormatString;
27+
#endif
28+
29+
public override string TimeSpanFormatString => string.Empty;
3130

3231
public override SqlHelper.EscapeSetup EscapeSetup => SqlHelper.EscapeSetup.WithQuotes;
3332

0 commit comments

Comments
 (0)