From: Peter Rabbitson Date: Mon, 31 May 2010 21:52:16 +0000 (+0000) Subject: Fix Schema::Versioned borkage X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=f76f761c646505aafa2d02ed8c5f615858c82a9e;p=dbsrgits%2FDBIx-Class-Historic.git Fix Schema::Versioned borkage --- diff --git a/Changes b/Changes index bd0d6af..9dd6ebf 100644 --- a/Changes +++ b/Changes @@ -38,6 +38,8 @@ Revision history for DBIx::Class (solves the problem of orphaned IC::FS files) - Fully qualify xp_msver selector when using DBD::Sybase with MSSQL (RT#57467) + - Fix ::DBI::Storage to always be able to present a full set of + connect() attributes to e.g. Schema::Versioned * Misc - Add a warning to load_namespaces if a class in ResultSet/ diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index 1e8f39a..2b3019a 100644 --- a/lib/DBIx/Class/Schema/Versioned.pm +++ b/lib/DBIx/Class/Schema/Versioned.pm @@ -568,23 +568,23 @@ sub _on_connect { my ($self) = @_; - my $info = $self->storage->connect_info; - my $args = $info->[-1]; + my $conn_info = $self->storage->connect_info; + $self->{vschema} = DBIx::Class::Version->connect(@$conn_info); + my $conn_attrs = $self->{vschema}->storage->_dbic_connect_attributes || {}; - $self->{vschema} = DBIx::Class::Version->connect(@$info); my $vtable = $self->{vschema}->resultset('Table'); # useful when connecting from scripts etc - return if ($args->{ignore_version} || ($ENV{DBIC_NO_VERSION_CHECK} && !exists $args->{ignore_version})); + return if ($conn_attrs->{ignore_version} || ($ENV{DBIC_NO_VERSION_CHECK} && !exists $conn_attrs->{ignore_version})); # check for legacy versions table and move to new if exists - my $vschema_compat = DBIx::Class::VersionCompat->connect(@$info); + my $vschema_compat = DBIx::Class::VersionCompat->connect(@$conn_info); unless ($self->_source_exists($vtable)) { my $vtable_compat = $vschema_compat->resultset('TableCompat'); if ($self->_source_exists($vtable_compat)) { $self->{vschema}->deploy; map { $vtable->create({ installed => $_->Installed, version => $_->Version }) } $vtable_compat->all; - $self->storage->dbh->do("DROP TABLE " . $vtable_compat->result_source->from); + $self->storage->_get_dbh->do("DROP TABLE " . $vtable_compat->result_source->from); } } diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 1989821..3dbfd39 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -19,11 +19,11 @@ use Try::Tiny; use File::Path (); use namespace::clean; -__PACKAGE__->mk_group_accessors('simple' => - qw/_connect_info _dbi_connect_info _dbh _sql_maker _sql_maker_opts _conn_pid - _conn_tid transaction_depth _dbh_autocommit _driver_determined savepoints - _server_info_hash/ -); +__PACKAGE__->mk_group_accessors('simple' => qw/ + _connect_info _dbi_connect_info _dbic_connect_attributes _driver_determined + _dbh _server_info_hash _conn_pid _conn_tid _sql_maker _sql_maker_opts + transaction_depth _dbh_autocommit savepoints +/); # the values for these accessors are picked out (and deleted) from # the attribute hashref passed to connect_info @@ -582,6 +582,11 @@ sub connect_info { $self->_dbi_connect_info([@args, %attrs && !(ref $args[0] eq 'CODE') ? \%attrs : ()]); + # FIXME - dirty: + # save attributes them in a separate accessor so they are always + # introspectable, even in case of a CODE $dbhmaker + $self->_dbic_connect_attributes (\%attrs); + return $self->_connect_info; }