1 package # Hide from PAUSE
2 DBIx::Class::SQLMaker::MySQL;
4 use base qw( DBIx::Class::SQLMaker );
7 # MySQL does not understand the standard INSERT INTO $table DEFAULT VALUES
8 # Adjust SQL here instead
13 if (! $_[1] or (ref $_[1] eq 'HASH' and !keys %{$_[1]} ) ) {
14 my $table = $self->_quote($_[0]);
15 return "INSERT INTO ${table} () VALUES ()"
18 return $self->next::method (@_);
21 # Allow STRAIGHT_JOIN's
22 sub _generate_join_clause {
23 my ($self, $join_type) = @_;
25 if( $join_type && $join_type =~ /^STRAIGHT\z/i ) {
26 return ' STRAIGHT_JOIN '
29 return $self->next::method($join_type);
34 update => 'FOR UPDATE',
35 shared => 'LOCK IN SHARE MODE'
39 my ($self, $type) = @_;
41 my $sql = $for_syntax->{$type}
42 || $self->throw_exception("Unknown SELECT .. FOR type '$type' requested");
49 microsecond => 'MICROSECOND',
53 day_of_month => 'DAY',
58 second_microsecond => 'SECOND_MICROSECOND',
59 minute_microsecond => 'MINUTE_MICROSECOND',
60 minute_second => 'MINUTE_SECOND',
61 hour_microsecond => 'HOUR_MICROSECOND',
62 hour_second => 'HOUR_SECOND',
63 hour_minute => 'HOUR_MINUTE',
64 day_microsecond => 'DAY_MICROSECOND',
65 day_second => 'DAY_SECOND',
66 day_minute => 'DAY_MINUTE',
67 day_hour => 'DAY_HOUR',
68 year_month => 'YEAR_MONTH',
71 my %diff_part_map = %part_map;
72 $diff_part_map{day} = delete $diff_part_map{day_of_month};
75 die $_[0]->_unsupported_date_extraction($_[1], 'MySQL')
76 unless exists $part_map{$_[1]};
77 "EXTRACT($part_map{$_[1]} FROM $_[2])"
79 sub _datetime_diff_sql {
80 die $_[0]->_unsupported_date_diff($_[1], 'MySQL')
81 unless exists $diff_part_map{$_[1]};
82 "TIMESTAMPDIFF($diff_part_map{$_[1]}, $_[2], $_[3])"
86 =head1 DATE FUNCTION IMPLEMENTATION
88 =head1 DATE FUNCTION IMPLEMENTATION
90 The function used to extract date information is C<DATEPART>, which supports
113 The function used to diff dates is C<TIMESTAMPDIFF>, which supports