X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2Fmysql.pm;h=aa1530b4fb98eebada6a86512bf99a757ed7cd45;hb=010ab43a1833b20baa9d286b50654198078fbd75;hp=221548afa794a28bf83ae26de8755e8e62157f90;hpb=87aa29e2b0123213230b69a61c481deff90a4efd;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/mysql.pm b/lib/DBIx/Class/Storage/DBI/mysql.pm index 221548a..aa1530b 100644 --- a/lib/DBIx/Class/Storage/DBI/mysql.pm +++ b/lib/DBIx/Class/Storage/DBI/mysql.pm @@ -3,16 +3,27 @@ package DBIx::Class::Storage::DBI::mysql; use strict; use warnings; -use base qw/DBIx::Class::Storage::DBI::MultiColumnIn/; +use base qw/ + DBIx::Class::Storage::DBI::MultiColumnIn + DBIx::Class::Storage::DBI::AmbiguousGlob + DBIx::Class::Storage::DBI +/; +use mro 'c3'; __PACKAGE__->sql_maker_class('DBIx::Class::SQLAHacks::MySQL'); sub with_deferred_fk_checks { my ($self, $sub) = @_; - $self->dbh->do('SET foreign_key_checks=0'); + $self->_do_query('SET FOREIGN_KEY_CHECKS = 0'); $sub->(); - $self->dbh->do('SET foreign_key_checks=1'); + $self->_do_query('SET FOREIGN_KEY_CHECKS = 1'); +} + +sub connect_call_set_ansi_mode { + my $self = shift; + $self->_do_query(q|SET SQL_MODE = 'ANSI,TRADITIONAL'|); + $self->_do_query(q|SET SQL_AUTO_IS_NULL = 0|); } sub _dbh_last_insert_id { @@ -41,7 +52,7 @@ sub _svp_rollback { $self->dbh->do("ROLLBACK TO SAVEPOINT $name") } - + sub is_replicating { my $status = shift->dbh->selectrow_hashref('show slave status'); return ($status->{Slave_IO_Running} eq 'Yes') && ($status->{Slave_SQL_Running} eq 'Yes'); @@ -57,19 +68,6 @@ sub _subq_update_delete { return shift->_per_row_update_delete (@_); } -# MySql chokes on things like: -# COUNT(*) FROM (SELECT tab1.col, tab2.col FROM tab1 JOIN tab2 ... ) -# claiming that col is a duplicate column (it loses the table specifiers by -# the time it gets to the *). Thus for any subquery count we select only the -# primary keys of the main table in the inner query. This hopefully still -# hits the indexes and keeps mysql happy. -# (mysql does not care if the SELECT and the GROUP BY match) -sub _grouped_count_select { - my ($self, $source, $rs_args) = @_; - my @pcols = map { join '.', $rs_args->{alias}, $_ } ($source->primary_columns); - return @pcols ? \@pcols : $rs_args->{group_by}; -} - 1; =head1 NAME