1 package DBIx::Class::Storage::DBI::mysql;
6 use base qw/DBIx::Class::Storage::DBI::MultiColumnIn/;
8 __PACKAGE__->sql_maker_class('DBIx::Class::SQLAHacks::MySQL');
10 sub with_deferred_fk_checks {
11 my ($self, $sub) = @_;
13 $self->dbh->do('SET foreign_key_checks=0');
15 $self->dbh->do('SET foreign_key_checks=1');
18 sub _dbh_last_insert_id {
19 my ($self, $dbh, $source, $col) = @_;
20 $dbh->{mysql_insertid};
28 my ($self, $name) = @_;
30 $self->dbh->do("SAVEPOINT $name");
34 my ($self, $name) = @_;
36 $self->dbh->do("RELEASE SAVEPOINT $name");
40 my ($self, $name) = @_;
42 $self->dbh->do("ROLLBACK TO SAVEPOINT $name")
46 my $status = shift->dbh->selectrow_hashref('show slave status');
47 return ($status->{Slave_IO_Running} eq 'Yes') && ($status->{Slave_SQL_Running} eq 'Yes');
50 sub lag_behind_master {
51 return shift->dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master};
54 # MySql can not do subquery update/deletes, only way is slow per-row operations.
55 # This assumes you have set proper transaction isolation and use innodb.
56 sub _subq_update_delete {
57 return shift->_per_row_update_delete (@_);
60 # MySql chokes on things like:
61 # COUNT(*) FROM (SELECT tab1.col, tab2.col FROM tab1 JOIN tab2 ... )
62 # claiming that col is a duplicate column (it loses the table specifiers by
63 # the time it gets to the *). Thus for any subquery count we select only the
64 # primary keys of the main table in the inner query. This hopefully still
65 # hits the indexes and keeps mysql happy.
66 # (mysql does not care if the SELECT and the GROUP BY match)
67 sub _grouped_count_select {
68 my ($self, $source, $rs_args) = @_;
69 my @pcols = map { join '.', $rs_args->{alias}, $_ } ($source->primary_columns);
70 return @pcols ? \@pcols : $rs_args->{group_by};
77 DBIx::Class::Storage::DBI::mysql - Automatic primary key class for MySQL
81 # In your table classes
82 __PACKAGE__->load_components(qw/PK::Auto Core/);
83 __PACKAGE__->set_primary_key('id');
87 This class implements autoincrements for MySQL.
91 Matt S. Trout <mst@shadowcatsystems.co.uk>
95 You may distribute this code under the same terms as Perl itself.