1- // Copyright (C) 2003-2010 Xtensive LLC.
2- // All rights reserved .
3- // For conditions of distribution and use, see license .
1+ // Copyright (C) 2009-2025 Xtensive LLC.
2+ // This code is distributed under MIT license terms .
3+ // See the License.txt file in the project root for more information .
44// Created by: Denis Krjuchkov
55// Created: 2009.02.27
66
@@ -13,8 +13,15 @@ namespace Xtensive.Orm.Tests.Sql
1313{
1414 public abstract class DateTimeIntervalTest : SqlTest
1515 {
16- protected static readonly DateTime DefaultDateTime = new DateTime ( 2001 , 2 , 3 , 4 , 5 , 6 , 334 ) ;
17- protected static readonly DateTime SecondDateTime = new DateTime ( 2000 , 12 , 11 , 10 , 9 , 8 , 765 ) ;
16+ protected static readonly DateTime DefaultDateTime =
17+ StorageProviderInfo . Instance . CheckProviderIs ( StorageProvider . Firebird )
18+ ? new DateTime ( 2001 , 2 , 3 , 4 , 5 , 6 )
19+ : new DateTime ( 2001 , 2 , 3 , 4 , 5 , 6 , 334 ) ;
20+ protected static readonly DateTime SecondDateTime =
21+ StorageProviderInfo . Instance . CheckProviderIs ( StorageProvider . Firebird )
22+ ? new DateTime ( 2000 , 12 , 11 , 10 , 9 , 8 )
23+ : new DateTime ( 2000 , 12 , 11 , 10 , 9 , 8 , 765 ) ;
24+
1825 protected static readonly TimeSpan DefaultTimeSpan = new TimeSpan ( 10 , 9 , 8 , 7 , 652 ) ;
1926 protected static readonly int AddYearsConst = 5 ;
2027 protected static readonly int AddMonthsConst = 15 ;
@@ -23,24 +30,24 @@ public abstract class DateTimeIntervalTest : SqlTest
2330 public virtual void DateTimeAddIntervalTest ( )
2431 {
2532 CheckEquality (
26- SqlDml . DateTimePlusInterval ( DefaultDateTime , DefaultTimeSpan ) ,
33+ SqlDml . DateTimePlusInterval ( PrepareDateTimeLiteral ( DefaultDateTime ) , DefaultTimeSpan ) ,
2734 DefaultDateTime . Add ( DefaultTimeSpan ) ) ;
2835 }
2936
3037 [ Test ]
3138 public virtual void DateTimeAddMonthsTest ( )
3239 {
3340 CheckEquality (
34- SqlDml . DateTimeAddMonths ( DefaultDateTime , AddMonthsConst ) ,
35- DefaultDateTime . AddMonths ( AddMonthsConst ) ) ;
41+ SqlDml . DateTimeAddMonths ( PrepareDateTimeLiteral ( DefaultDateTime ) , AddMonthsConst ) ,
42+ PrepareDateTimeLiteral ( DefaultDateTime . AddMonths ( AddMonthsConst ) ) ) ;
3643 }
3744
3845 [ Test ]
3946 public virtual void DateTimeAddYearsTest ( )
4047 {
4148 CheckEquality (
42- SqlDml . DateTimeAddYears ( DefaultDateTime , AddYearsConst ) ,
43- DefaultDateTime . AddYears ( AddYearsConst ) ) ;
49+ SqlDml . DateTimeAddYears ( PrepareDateTimeLiteral ( DefaultDateTime ) , AddYearsConst ) ,
50+ PrepareDateTimeLiteral ( DefaultDateTime . AddYears ( AddYearsConst ) ) ) ;
4451 }
4552
4653 [ Test ]
@@ -55,77 +62,78 @@ public virtual void DateTimeConstructTest()
5562 public virtual void DateTimeSubtractDateTimeTest ( )
5663 {
5764 CheckEquality (
58- SqlDml . DateTimeMinusDateTime ( DefaultDateTime , SecondDateTime ) ,
65+ SqlDml . DateTimeMinusDateTime ( PrepareDateTimeLiteral ( DefaultDateTime ) , PrepareDateTimeLiteral ( SecondDateTime ) ) ,
5966 DefaultDateTime . Subtract ( SecondDateTime ) ) ;
6067 }
6168
6269 [ Test ]
6370 public virtual void DateTimeSubtractIntervalTest ( )
6471 {
6572 CheckEquality (
66- SqlDml . DateTimeMinusInterval ( DefaultDateTime , DefaultTimeSpan ) ,
73+ SqlDml . DateTimeMinusInterval ( PrepareDateTimeLiteral ( DefaultDateTime ) , DefaultTimeSpan ) ,
6774 DefaultDateTime . Subtract ( DefaultTimeSpan ) ) ;
6875 }
6976
7077 [ Test ]
7178 public virtual void DateTimeTruncateTest ( )
7279 {
7380 CheckEquality (
74- SqlDml . DateTimeTruncate ( DefaultDateTime ) ,
75- DefaultDateTime . Date ) ;
81+ SqlDml . DateTimeTruncate ( PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
82+ PrepareDateTimeLiteral ( DefaultDateTime . Date ) ) ;
7683 }
7784
7885 [ Test ]
7986 public virtual void DateTimeExtractYearTest ( )
8087 {
8188 CheckEquality (
82- SqlDml . Extract ( SqlDateTimePart . Year , DefaultDateTime ) ,
89+ SqlDml . Extract ( SqlDateTimePart . Year , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
8390 DefaultDateTime . Year ) ;
8491 }
8592
8693 [ Test ]
8794 public virtual void DateTimeExtractMonthTest ( )
8895 {
8996 CheckEquality (
90- SqlDml . Extract ( SqlDateTimePart . Month , DefaultDateTime ) ,
97+ SqlDml . Extract ( SqlDateTimePart . Month , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
9198 DefaultDateTime . Month ) ;
9299 }
93100
94101 [ Test ]
95102 public virtual void DateTimeExtractDayTest ( )
96103 {
97104 CheckEquality (
98- SqlDml . Extract ( SqlDateTimePart . Day , DefaultDateTime ) ,
105+ SqlDml . Extract ( SqlDateTimePart . Day , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
99106 DefaultDateTime . Day ) ;
100107 }
101108
102109 [ Test ]
103110 public virtual void DateTimeExtractHourTest ( )
104111 {
105112 CheckEquality (
106- SqlDml . Extract ( SqlDateTimePart . Hour , DefaultDateTime ) ,
113+ SqlDml . Extract ( SqlDateTimePart . Hour , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
107114 DefaultDateTime . Hour ) ;
108115 }
109116
110117 [ Test ]
111118 public virtual void DateTimeExtractMinuteTest ( )
112119 {
113120 CheckEquality (
114- SqlDml . Extract ( SqlDateTimePart . Minute , DefaultDateTime ) ,
121+ SqlDml . Extract ( SqlDateTimePart . Minute , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
115122 DefaultDateTime . Minute ) ;
116123 }
117124
118125 [ Test ]
119126 public virtual void DateTimeExtractSecondTest ( )
120127 {
121128 CheckEquality (
122- SqlDml . Extract ( SqlDateTimePart . Second , DefaultDateTime ) ,
129+ SqlDml . Extract ( SqlDateTimePart . Second , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
123130 DefaultDateTime . Second ) ;
124131 }
125132
126133 [ Test ]
127134 public virtual void DateTimeExtractMillisecondTest ( )
128135 {
136+ Require . ProviderIsNot ( StorageProvider . Firebird ) ;
129137 CheckEquality (
130138 SqlDml . Extract ( SqlDateTimePart . Millisecond , DefaultDateTime ) ,
131139 DefaultDateTime . Millisecond ) ;
@@ -135,15 +143,15 @@ public virtual void DateTimeExtractMillisecondTest()
135143 public virtual void DateTimeExtractDayOfWeekTest ( )
136144 {
137145 CheckEquality (
138- SqlDml . Extract ( SqlDateTimePart . DayOfWeek , DefaultDateTime ) ,
146+ SqlDml . Extract ( SqlDateTimePart . DayOfWeek , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
139147 ( int ) DefaultDateTime . DayOfWeek ) ;
140148 }
141149
142150 [ Test ]
143151 public virtual void DateTimeExtractDayOfYearTest ( )
144152 {
145153 CheckEquality (
146- SqlDml . Extract ( SqlDateTimePart . DayOfYear , DefaultDateTime ) ,
154+ SqlDml . Extract ( SqlDateTimePart . DayOfYear , PrepareDateTimeLiteral ( DefaultDateTime ) ) ,
147155 DefaultDateTime . DayOfYear ) ;
148156 }
149157
@@ -222,5 +230,13 @@ protected void CheckEquality(SqlExpression left, SqlExpression right)
222230 }
223231 }
224232 }
233+
234+ private SqlExpression PrepareDateTimeLiteral ( DateTime value )
235+ {
236+ if ( StorageProviderInfo . Instance . CheckProviderIs ( StorageProvider . Firebird ) ) {
237+ return SqlDml . Cast ( SqlDml . Literal ( value ) , SqlType . DateTime ) ;
238+ }
239+ return SqlDml . Literal ( value ) ;
240+ }
225241 }
226242}
0 commit comments