fixed test resultclass formatting, added a few more DBIC::Storage::DBI methods that...
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / mysql.pm
1 package DBIx::Class::Storage::DBI::mysql;
2
3 use strict;
4 use warnings;
5
6 use base qw/
7   DBIx::Class::Storage::DBI::MultiColumnIn
8   DBIx::Class::Storage::DBI::AmbiguousGlob
9   DBIx::Class::Storage::DBI
10 /;
11 use mro 'c3';
12
13 __PACKAGE__->sql_maker_class('DBIx::Class::SQLAHacks::MySQL');
14
15 sub with_deferred_fk_checks {
16   my ($self, $sub) = @_;
17
18   $self->_do_query('SET FOREIGN_KEY_CHECKS = 0');
19   $sub->();
20   $self->_do_query('SET FOREIGN_KEY_CHECKS = 1');
21 }
22
23 sub _dbh_last_insert_id {
24   my ($self, $dbh, $source, $col) = @_;
25   $dbh->{mysql_insertid};
26 }
27
28 sub sqlt_type {
29   return 'MySQL';
30 }
31
32 sub _svp_begin {
33     my ($self, $name) = @_;
34
35     $self->dbh->do("SAVEPOINT $name");
36 }
37
38 sub _svp_release {
39     my ($self, $name) = @_;
40
41     $self->dbh->do("RELEASE SAVEPOINT $name");
42 }
43
44 sub _svp_rollback {
45     my ($self, $name) = @_;
46
47     $self->dbh->do("ROLLBACK TO SAVEPOINT $name")
48 }
49
50 sub is_replicating {
51     my $status = shift->dbh->selectrow_hashref('show slave status');
52     return ($status->{Slave_IO_Running} eq 'Yes') && ($status->{Slave_SQL_Running} eq 'Yes');
53 }
54
55 sub lag_behind_master {
56     return shift->dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master};
57 }
58
59 # MySql can not do subquery update/deletes, only way is slow per-row operations.
60 # This assumes you have set proper transaction isolation and use innodb.
61 sub _subq_update_delete {
62   return shift->_per_row_update_delete (@_);
63 }
64
65 1;
66
67 =head1 NAME
68
69 DBIx::Class::Storage::DBI::mysql - Storage::DBI class implementing MySQL specifics
70
71 =head1 SYNOPSIS
72
73 Storage::DBI autodetects the underlying MySQL database, and re-blesses the
74 C<$storage> object into this class.
75
76   my $schema = MyDb::Schema->connect( $dsn, $user, $pass );
77
78 =head1 DESCRIPTION
79
80 This class implements MySQL specific bits of L<DBIx::Class::Storage::DBI>.
81
82 =head1 AUTHORS
83
84 See L<DBIx::Class/CONTRIBUTORS>
85
86 =head1 LICENSE
87
88 You may distribute this code under the same terms as Perl itself.
89
90 =cut