Merge 'trunk' into 'mssql_top_fixes'
[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
12 __PACKAGE__->sql_maker_class('DBIx::Class::SQLAHacks::MySQL');
13
14 sub with_deferred_fk_checks {
15   my ($self, $sub) = @_;
16
17   $self->dbh->do('SET foreign_key_checks=0');
18   $sub->();
19   $self->dbh->do('SET foreign_key_checks=1');
20 }
21
22 sub connect_call_set_ansi_mode {
23   my $self = shift;
24   $self->dbh->do(q|SET sql_mode = 'ANSI,TRADITIONAL'|);
25   $self->dbh->do(q|SET sql_mode = 'ANSI,TRADITIONAL'|);
26 }
27
28 sub _dbh_last_insert_id {
29   my ($self, $dbh, $source, $col) = @_;
30   $dbh->{mysql_insertid};
31 }
32
33 sub sqlt_type {
34   return 'MySQL';
35 }
36
37 sub _svp_begin {
38     my ($self, $name) = @_;
39
40     $self->dbh->do("SAVEPOINT $name");
41 }
42
43 sub _svp_release {
44     my ($self, $name) = @_;
45
46     $self->dbh->do("RELEASE SAVEPOINT $name");
47 }
48
49 sub _svp_rollback {
50     my ($self, $name) = @_;
51
52     $self->dbh->do("ROLLBACK TO SAVEPOINT $name")
53 }
54
55 sub is_replicating {
56     my $status = shift->dbh->selectrow_hashref('show slave status');
57     return ($status->{Slave_IO_Running} eq 'Yes') && ($status->{Slave_SQL_Running} eq 'Yes');
58 }
59
60 sub lag_behind_master {
61     return shift->dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master};
62 }
63
64 # MySql can not do subquery update/deletes, only way is slow per-row operations.
65 # This assumes you have set proper transaction isolation and use innodb.
66 sub _subq_update_delete {
67   return shift->_per_row_update_delete (@_);
68 }
69
70 1;
71
72 =head1 NAME
73
74 DBIx::Class::Storage::DBI::mysql - Automatic primary key class for MySQL
75
76 =head1 SYNOPSIS
77
78   # In your table classes
79   __PACKAGE__->load_components(qw/PK::Auto Core/);
80   __PACKAGE__->set_primary_key('id');
81
82 =head1 DESCRIPTION
83
84 This class implements autoincrements for MySQL.
85
86 =head1 AUTHORS
87
88 Matt S. Trout <mst@shadowcatsystems.co.uk>
89
90 =head1 LICENSE
91
92 You may distribute this code under the same terms as Perl itself.
93
94 =cut