@@ -18,6 +18,18 @@ namespace Xtensive.Sql.Drivers.SqlServer.v09
1818{
1919 internal class Compiler : SqlCompiler
2020 {
21+ #region Date parts
22+ protected const string NanosecondPart = "NS" ;
23+ protected const string MillisecondPart = "MS" ;
24+ protected const string SecondPart = "SECOND" ;
25+ protected const string MinutePart = "MINUTE" ;
26+ protected const string HourPart = "HOUR" ;
27+ protected const string DayPart = "DAY" ;
28+ protected const string MonthPart = "MONTH" ;
29+ protected const string YearPart = "YEAR" ;
30+ protected const string WeekdayPart = "WEEKDAY" ;
31+ #endregion
32+
2133 protected static readonly long NanosecondsPerDay = TimeSpan . FromDays ( 1 ) . Ticks * 100 ;
2234 protected static readonly long NanosecondsPerSecond = 1000000000 ;
2335 protected static readonly long NanosecondsPerMillisecond = 1000000 ;
@@ -379,64 +391,64 @@ public override void Visit(SqlCreateIndex node, IndexColumn item)
379391
380392 #region Static helpers
381393
382- private static SqlCast CastToLong ( SqlExpression arg )
394+ protected static SqlCast CastToLong ( SqlExpression arg )
383395 {
384396 return SqlDml . Cast ( arg , SqlType . Int64 ) ;
385397 }
386398
387- private static SqlCast CastToDecimal ( SqlExpression arg , short precision , short scale )
399+ protected static SqlCast CastToDecimal ( SqlExpression arg , short precision , short scale )
388400 {
389401 return SqlDml . Cast ( arg , SqlType . Decimal , precision , scale ) ;
390402 }
391403
392404 protected static SqlUserFunctionCall DatePartWeekDay ( SqlExpression date )
393405 {
394- return SqlDml . FunctionCall ( "DATEPART" , SqlDml . Native ( "WEEKDAY" ) , date ) ;
406+ return SqlDml . FunctionCall ( "DATEPART" , SqlDml . Native ( WeekdayPart ) , date ) ;
395407 }
396408
397409 protected static SqlUserFunctionCall DateDiffDay ( SqlExpression date1 , SqlExpression date2 )
398410 {
399- return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( "DAY" ) , date1 , date2 ) ;
411+ return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( DayPart ) , date1 , date2 ) ;
400412 }
401413
402414 protected static SqlUserFunctionCall DateDiffMillisecond ( SqlExpression date1 , SqlExpression date2 )
403415 {
404- return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( "MS" ) , date1 , date2 ) ;
416+ return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( MillisecondPart ) , date1 , date2 ) ;
405417 }
406418
407419 protected static SqlUserFunctionCall DateAddYear ( SqlExpression date , SqlExpression years )
408420 {
409- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "YEAR" ) , years , date ) ;
421+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( YearPart ) , years , date ) ;
410422 }
411423
412424 protected static SqlUserFunctionCall DateAddMonth ( SqlExpression date , SqlExpression months )
413425 {
414- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "MONTH" ) , months , date ) ;
426+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( MonthPart ) , months , date ) ;
415427 }
416428
417429 protected static SqlUserFunctionCall DateAddDay ( SqlExpression date , SqlExpression days )
418430 {
419- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "DAY" ) , days , date ) ;
431+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( DayPart ) , days , date ) ;
420432 }
421433
422434 protected static SqlUserFunctionCall DateAddHour ( SqlExpression date , SqlExpression hours )
423435 {
424- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "HOUR" ) , hours , date ) ;
436+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( HourPart ) , hours , date ) ;
425437 }
426438
427439 protected static SqlUserFunctionCall DateAddMinute ( SqlExpression date , SqlExpression minutes )
428440 {
429- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "MINUTE" ) , minutes , date ) ;
441+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( MinutePart ) , minutes , date ) ;
430442 }
431443
432444 protected static SqlUserFunctionCall DateAddSecond ( SqlExpression date , SqlExpression seconds )
433445 {
434- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "SECOND" ) , seconds , date ) ;
446+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( SecondPart ) , seconds , date ) ;
435447 }
436448
437449 protected static SqlUserFunctionCall DateAddMillisecond ( SqlExpression date , SqlExpression milliseconds )
438450 {
439- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "MS" ) , milliseconds , date ) ;
451+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( MillisecondPart ) , milliseconds , date ) ;
440452 }
441453
442454 protected static SqlUserFunctionCall DateTimeToStringIso ( SqlExpression dateTime )
0 commit comments