From: Peter Rabbitson Date: Wed, 20 May 2009 21:47:05 +0000 (+0000) Subject: on_connect_do now accepts a single string like it does an arrayref (patch by prema) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=00f574412a72ccd315cba27036b6e9b664e96a2b;p=dbsrgits%2FDBIx-Class-Historic.git on_connect_do now accepts a single string like it does an arrayref (patch by prema) --- diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 3937cb5..8c4790e 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -153,6 +153,10 @@ the database. Its value may contain: =over +=item a scalar + +This contains one SQL statement to execute. + =item an array reference This contains SQL statements to execute in order. Each element contains @@ -626,19 +630,25 @@ sub _populate_dbh { $self->_conn_tid(threads->tid) if $INC{'threads.pm'}; my $connection_do = $self->on_connect_do; - $self->_do_connection_actions($connection_do) if ref($connection_do); + $self->_do_connection_actions($connection_do) if $connection_do; } sub _do_connection_actions { my $self = shift; my $connection_do = shift; - if (ref $connection_do eq 'ARRAY') { + if (!ref $connection_do) { + $self->_do_query($connection_do); + } + elsif (ref $connection_do eq 'ARRAY') { $self->_do_query($_) foreach @$connection_do; } elsif (ref $connection_do eq 'CODE') { $connection_do->($self); } + else { + $self->throw_exception (sprintf ("Don't know how to process conection actions of type '%s'", ref $connection_do) ); + } return $self; } diff --git a/t/92storage_on_connect_do.t b/t/92storage_on_connect_do.t index 6c467cd..d132e35 100644 --- a/t/92storage_on_connect_do.t +++ b/t/92storage_on_connect_do.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::More tests => 10; +use Test::More tests => 12; use lib qw(t/lib); use base 'DBICTest'; @@ -11,6 +11,22 @@ my $schema = DBICTest->init_schema( no_connect => 1, no_deploy => 1, ); + +ok $schema->connection( + DBICTest->_database, + { + on_connect_do => 'CREATE TABLE TEST_empty (id INTEGER)', + }, +), 'connection()'; + +is_deeply ( + $schema->storage->dbh->selectall_arrayref('SELECT * FROM TEST_empty'), + [], + 'string version on_connect_do() worked' +); + +$schema->storage->disconnect; + ok $schema->connection( DBICTest->_database, { @@ -24,10 +40,11 @@ ok $schema->connection( }, ), 'connection()'; -is_deeply +is_deeply ( $schema->storage->dbh->selectall_arrayref('SELECT * FROM TEST_empty'), [ [ 2 ], [ 3 ], [ 7 ] ], - 'on_connect_do() worked'; + 'on_connect_do() worked' +); eval { $schema->storage->dbh->do('SELECT 1 FROM TEST_nonexistent'); }; ok $@, 'Searching for nonexistent table dies';