On Fri, May 08, 2009 at 03:01:36PM +0400, Oleg Pronin wrote: > Thanks! But i have serveral databases (several schema classes). > > Temporarily i placed this piece of code into framework's base resultsource > which automatically gets the right schema on thaw and support several > schemas but works only under catalyst project. > > our %schema_thaw_cache; > sub STORABLE_thaw { > my ($self, $cloning, $serialized) = @_; > > # too early to setup $DBIx::Class::ResultSourceHandle::thaw_schema here > because > # content is not deserialized yet and we do not know yet which schema to > use. > > %$self = %{Storable::thaw($serialized)}; > > my $class = ref $self; > my $schema = $schema_thaw_cache{$class}; #try cache for x4 speedup > > unless ($schema) { > return unless index($class, '::Model::') >= 0; #possible under > catalyst > my $app = substr($class, 0, index($class, ':')) or return; > return unless $app->isa('Catalyst'); > (my $comp = $class) =~ s/^${app}::Model:://; > my $rs = $app->model($comp) or return; > $schema = $schema_thaw_cache{$class} = $rs->result_source->schema; > } > #insert correct schema > $self->_source_handle->schema($schema); > } > > I don't like it :-) > > I think this could be handled by DBIC itself by means of storing > MyDB::Schema->instance singletons (stored on first MyDB::Schema->connect). > And on restore it could get $schema_class->instance. > > This will work ok for 99% people (except for those who use the same schema > connected to more that one databases at once and those who update such rows)
I guess you could store a weak ref to it, once only, and if a second $schema is ever connected just stop doing that. But it seems to me like it could be -really- fragile - for example under mod_perl things often get initialized twice so you could have dev working and production magically not doing so. An extra component that handles this, with a reference in the DBIC docs to its existence, would be fine by me - you'd have to convince me you can make it much more robust than your initial plan seems to be before I'd consider it for core ... -- Matt S Trout Catalyst and DBIx::Class consultancy with a clue Technical Director and a commit bit: http://shadowcat.co.uk/catalyst/ Shadowcat Systems Limited mst (@) shadowcat.co.uk http://shadowcat.co.uk/blog/matt-s-trout/ _______________________________________________ List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class IRC: irc.perl.org#dbix-class SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/ Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk