From: Peter Rabbitson Date: Mon, 3 Aug 2009 09:51:15 +0000 (+0000) Subject: Wrap up set_strict_mode for mysql X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=97a0a148bc7fda879fa52a781dc7b89618ba5413;p=dbsrgits%2FDBIx-Class-Historic.git Wrap up set_strict_mode for mysql --- diff --git a/Changes b/Changes index 8145785..3a07811 100644 --- a/Changes +++ b/Changes @@ -6,11 +6,14 @@ Revision history for DBIx::Class 'force_pool' attribute. Lots of documentation updates, including a new Introduction.pod file. Fixed the way we detect transaction to make this more reliable and forward looking. Fixed some trouble with - the way Moose Types are used. + the way Moose Types are used. + - Added new MySQL specific on_connect_call macro 'set_strict_mode' + (also known as make_mysql_not_suck_as_much) - Added call to Pod::Inherit in Makefile.PL - currently at author-time only, so we need to add the produced .pod files to the MANIFEST + 0.08108 2009-07-05 23:15:00 (UTC) - Fixed the has_many prefetch with limit/group deficiency - it is now possible to select "top 5 commenters" while diff --git a/lib/DBIx/Class/Storage/DBI/mysql.pm b/lib/DBIx/Class/Storage/DBI/mysql.pm index 4ea00d2..bce1a07 100644 --- a/lib/DBIx/Class/Storage/DBI/mysql.pm +++ b/lib/DBIx/Class/Storage/DBI/mysql.pm @@ -20,9 +20,11 @@ sub with_deferred_fk_checks { $self->_do_query('SET FOREIGN_KEY_CHECKS = 1'); } -sub connect_call_set_ansi_mode { +sub connect_call_set_strict_mode { my $self = shift; - $self->_do_query(q|SET SQL_MODE = 'ANSI,TRADITIONAL'|); + + # the @@sql_mode puts back what was previously set on the session handle + $self->_do_query(q|SET SQL_MODE = CONCAT('ANSI,TRADITIONAL,ONLY_FULL_GROUP_BY,', @@sql_mode)|); $self->_do_query(q|SET SQL_AUTO_IS_NULL = 0|); } @@ -79,14 +81,15 @@ DBIx::Class::Storage::DBI::mysql - Storage::DBI class implementing MySQL specifi Storage::DBI autodetects the underlying MySQL database, and re-blesses the C<$storage> object into this class. - my $schema = MyDb::Schema->connect( $dsn, $user, $pass, { set_ansi_mode => 1 } ); + my $schema = MyDb::Schema->connect( $dsn, $user, $pass, { set_strict_mode => 1 } ); =head1 DESCRIPTION This class implements MySQL specific bits of L. -It also provides a one-stop macro that sets session variables such that -MySQL behaves more predictably as far as the SQL standard is concerned. +It also provides a one-stop on-connect macro C which sets +session variables such that MySQL behaves more predictably as far as the +SQL standard is concerned. =head1 AUTHORS diff --git a/t/71mysql.t b/t/71mysql.t index 43a9849..031529c 100644 --- a/t/71mysql.t +++ b/t/71mysql.t @@ -169,7 +169,7 @@ lives_ok { $cd->set_producers ([ $producer ]) } 'set_relationship doesnt die'; # with it (ribasushi, 2009/07/03) NULLINSEARCH: { - my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass, { on_connect_call => 'set_ansi_mode' }); + my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass, { on_connect_call => 'set_strict_mode' }); $ansi_schema->resultset('Artist')->create ({ name => 'last created artist' });