@@ -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 ;
@@ -383,64 +395,64 @@ public override void Visit(SqlCreateIndex node, IndexColumn item)
383395
384396 #region Static helpers
385397
386- private static SqlCast CastToLong ( SqlExpression arg )
398+ protected static SqlCast CastToLong ( SqlExpression arg )
387399 {
388400 return SqlDml . Cast ( arg , SqlType . Int64 ) ;
389401 }
390402
391- private static SqlCast CastToDecimal ( SqlExpression arg , short precision , short scale )
403+ protected static SqlCast CastToDecimal ( SqlExpression arg , short precision , short scale )
392404 {
393405 return SqlDml . Cast ( arg , SqlType . Decimal , precision , scale ) ;
394406 }
395407
396408 protected static SqlUserFunctionCall DatePartWeekDay ( SqlExpression date )
397409 {
398- return SqlDml . FunctionCall ( "DATEPART" , SqlDml . Native ( "WEEKDAY" ) , date ) ;
410+ return SqlDml . FunctionCall ( "DATEPART" , SqlDml . Native ( WeekdayPart ) , date ) ;
399411 }
400412
401413 protected static SqlUserFunctionCall DateDiffDay ( SqlExpression date1 , SqlExpression date2 )
402414 {
403- return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( "DAY" ) , date1 , date2 ) ;
415+ return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( DayPart ) , date1 , date2 ) ;
404416 }
405417
406418 protected static SqlUserFunctionCall DateDiffMillisecond ( SqlExpression date1 , SqlExpression date2 )
407419 {
408- return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( "MS" ) , date1 , date2 ) ;
420+ return SqlDml . FunctionCall ( "DATEDIFF" , SqlDml . Native ( MillisecondPart ) , date1 , date2 ) ;
409421 }
410422
411423 protected static SqlUserFunctionCall DateAddYear ( SqlExpression date , SqlExpression years )
412424 {
413- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "YEAR" ) , years , date ) ;
425+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( YearPart ) , years , date ) ;
414426 }
415427
416428 protected static SqlUserFunctionCall DateAddMonth ( SqlExpression date , SqlExpression months )
417429 {
418- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "MONTH" ) , months , date ) ;
430+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( MonthPart ) , months , date ) ;
419431 }
420432
421433 protected static SqlUserFunctionCall DateAddDay ( SqlExpression date , SqlExpression days )
422434 {
423- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "DAY" ) , days , date ) ;
435+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( DayPart ) , days , date ) ;
424436 }
425437
426438 protected static SqlUserFunctionCall DateAddHour ( SqlExpression date , SqlExpression hours )
427439 {
428- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "HOUR" ) , hours , date ) ;
440+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( HourPart ) , hours , date ) ;
429441 }
430442
431443 protected static SqlUserFunctionCall DateAddMinute ( SqlExpression date , SqlExpression minutes )
432444 {
433- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "MINUTE" ) , minutes , date ) ;
445+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( MinutePart ) , minutes , date ) ;
434446 }
435447
436448 protected static SqlUserFunctionCall DateAddSecond ( SqlExpression date , SqlExpression seconds )
437449 {
438- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "SECOND" ) , seconds , date ) ;
450+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( SecondPart ) , seconds , date ) ;
439451 }
440452
441453 protected static SqlUserFunctionCall DateAddMillisecond ( SqlExpression date , SqlExpression milliseconds )
442454 {
443- return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( "MS" ) , milliseconds , date ) ;
455+ return SqlDml . FunctionCall ( "DATEADD" , SqlDml . Native ( MillisecondPart ) , milliseconds , date ) ;
444456 }
445457
446458 protected static SqlUserFunctionCall DateTimeToStringIso ( SqlExpression dateTime )
0 commit comments