Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: A brief survey of the DBI usability layer modules on the CPAN

by Juerd (Abbot)
on Jun 13, 2007 at 21:41 UTC ( [id://621106]=note: print w/replies, xml ) Need Help??


in reply to A brief survey of the DBI usability layer modules on the CPAN

It was nice to find and read this old thread. I'm glad to see that my module is so popular.

Overall, after my survey of the landscape of DBI usability layer modules on CPAN, I look forward to spending more time with DBIx::Simple. Only experience will show if it actually delivers on its promises, of course, but I am quite positive about that.

As the module's author, I am very curious -- what has your experience shown? :)

Juerd # { site => 'juerd.nl', do_not_use => 'spamtrap', perl6_server => 'feather' }

Replies are listed 'Best First'.
Re^2: A brief survey of the DBI usability layer modules on the CPAN
by Aristotle (Chancellor) on Jun 22, 2007 at 06:52 UTC

    Well, that sentence was mostly a disclaimer, because sometimes you find these great modules that turn out to be not so great once you try them in anger. I haven’t had such problems with DBIx::Simple – it turned out to be just as nice to use as expected.

    There is just one monkeypatch in my code that I’d like to see as part of the module itself:

    sub DBIx::Simple::Result::hash_array { scalar shift->hashes( @_ ) }

    This isn’t for any fault of DBIx::Simple’s, it’s just because of the fact that method calls in Template Toolkit are always in list context. DBIx::Class added a scalar-context-only variant of its search method called search_rs to deal with the same problem.

    Makeshifts last the longest.

      I'm glad to hear you're still happy with DBIx::Simple.

      About the TT issue: While I understand the problem and acknowledge that it is annoying, I strongly believe that this should not be fixed in the numerous modules that happen to be compatible with Template Toolkit, but in Template Toolkit itself. I might release a compatibility package, but I'm not willing to mess with DBIx::Simple itself for this.

      I find the name "hash_array" very confusing, by the way. I'd probably call it "array_of_hashes".

      The correct solution to this problem, if you want it in DBIx::Simple, is to use your own result class. Untested code follows.

      use strict; package DBIx::Simple::TT; use base 'DBIx::Simple'; sub connect { my $self = shift->SUPER::connect(@_); $self->result_class = 'DBIx::Simple::Result::ForcedScalar'; } package DBIx::Simple::Result::ForcedScalar; use base 'DBIx::Simple::Result'; my $stash = \%DBIx::Simple::Result::ForcedScalar::; our %list_methods; $list_methods{$_} = 1 for qw( arrays hashes list flat columns map map_hashes map_arrays ); for my $method (keys %list_methods) { $method =~ /^[a-z]\w+$/ or next; my $supermethod = "SUPER::$method"; $stash->{$method} = sub { scalar shift->$method(@_) }; }
      Do you think that this would solve your problem?

      Juerd # { site => 'juerd.nl', do_not_use => 'spamtrap', perl6_server => 'feather' }

        I strongly believe that this should not be fixed in the numerous modules that happen to be compatible with Template Toolkit, but in Template Toolkit itself.

        In theory you are right. In practice, TT3 is a longer time coming than Perl 6.

        Do you think that this would solve your problem?

        As written, your suggested solution requires a decision at DBIS handle construction time whether the resultset methods should be context-sensitive or scalar-context-only. That’s quite simply not possible for me: all of the database queries are in isolated in a class which creates a single DBIS handle at instatiation time.

        But make it

        $stash->{ $method . '_ref' } = sub { scalar shift->$supermethod( @ +_ ) };

        and it’s all good. (Modulo naming scheme anyway.)

        (PS.: having list in the list of covered methods is pretty pointless.)

        Makeshifts last the longest.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://621106]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-03-19 09:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found