From: Peter Rabbitson Date: Sat, 4 Jul 2009 09:49:44 +0000 (+0000) Subject: Initial set_ansi_mode code - make sure to utilize _do_query instead of dbh->do, so... X-Git-Tag: v0.08109~52^2~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0fde80d97ab5b1246235f84402d947db5690377f;p=dbsrgits%2FDBIx-Class.git Initial set_ansi_mode code - make sure to utilize _do_query instead of dbh->do, so the result is visible in the trace --- diff --git a/lib/DBIx/Class/Storage/DBI/mysql.pm b/lib/DBIx/Class/Storage/DBI/mysql.pm index d6f0488..2e4a69d 100644 --- a/lib/DBIx/Class/Storage/DBI/mysql.pm +++ b/lib/DBIx/Class/Storage/DBI/mysql.pm @@ -20,6 +20,12 @@ sub with_deferred_fk_checks { $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 { my ($self, $dbh, $source, $col) = @_; $dbh->{mysql_insertid}; @@ -79,6 +85,9 @@ C<$storage> object into this class. 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. + =head1 AUTHORS See L diff --git a/t/71mysql.t b/t/71mysql.t index 78ecb61..43a9849 100644 --- a/t/71mysql.t +++ b/t/71mysql.t @@ -164,10 +164,12 @@ lives_ok { $cd->set_producers ([ $producer ]) } 'set_relationship doesnt die'; ## ## Only way is to do a SET SQL_AUTO_IS_NULL = 0; on connect ## But I'm not sure if we should do this or not (Ash, 2008/06/03) +# +# There is now a built-in function to do this, test that everything works +# with it (ribasushi, 2009/07/03) NULLINSEARCH: { - local $TODO = 'Fix pending in branches/mysql_ansi'; - my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass); + my $ansi_schema = DBICTest::Schema->connect ($dsn, $user, $pass, { on_connect_call => 'set_ansi_mode' }); $ansi_schema->resultset('Artist')->create ({ name => 'last created artist' });