1 package # Hide from PAUSE
2 DBIx::Class::SQLMaker::MSSQL;
4 use base qw( DBIx::Class::SQLMaker );
7 # MSSQL does not support ... OVER() ... RNO limits
9 sub _rno_default_order {
10 return \ '(SELECT(1))';
13 sub _datetime_now_sql { 'NOW()' }
20 day_of_year => 'dayofyear',
21 day_of_month => 'day',
23 day_of_week => 'weekday',
27 millisecond => 'millisecond',
28 nanosecond => 'nanosecond',
31 my %diff_part_map = %part_map;
32 $diff_part_map{day} = delete $diff_part_map{day_of_year};
33 delete $diff_part_map{day_of_month};
34 delete $diff_part_map{day_of_week};
37 die $_[0]->_unsupported_date_extraction($_[1], 'Microsoft SQL Server')
38 unless exists $part_map{$_[1]};
39 "DATEPART($part_map{$_[1]}, $_[2])"
41 sub _datetime_diff_sql {
42 die $_[0]->_unsupported_date_diff($_[1], 'Microsoft SQL Server')
43 unless exists $diff_part_map{$_[1]};
44 "DATEDIFF($diff_part_map{$_[1]}, $_[2], $_[3])"
47 sub _reorder_diff_datetime_vars {
48 my ($self, $d1, $d2) = @_;
53 sub _datetime_add_sql {
54 my ($self, $part, $amount, $date) = @_;
56 die $self->_unsupported_date_adding($part, 'Microsoft SQL Server')
57 unless exists $diff_part_map{$part};
59 my $placeholder = $self->_convert('?');
60 return "(DATEADD($diff_part_map{$part}, $amount, $date))"
64 =head1 DATE FUNCTION IMPLEMENTATION
66 The function used to extract date information is C<DATEPART>, which supports
80 The function used to diff dates is C<DATEDIFF>, which supports