in reply to Re: Re: Re: Re: Re: DBX offers simplified access to the DBI
in thread DBX offers simplified access to the DBI

That is, you can switch databases without having to reach into your code to change a statement.

I think batkins was getting at the same point that I'm about to make, but I'm not entirely sure, and I think there's some terminological disagreement, to boot. So to amplify a bit, what he's (probably) terming a symbolic reference, I think I'd call dynamic method selection, and it does, in fact, answer your concern (though it also occasionally gives me the heebie-jeebies). Since method lookup (and loading) are done at 'run-time' (an admittedly blurry distinction) you can do something like the following:

use XML::Simple ':strict'; # since example code doesn't have # backward-compatibility issues use DBX; use strict; # of course! use warnings; my $config = XMLin "config.xml"; # XML left as an exercise to the re +ader my $driver = $config->{driver}; my $connstr = $config->{connection_string}; my $SQL = $config->{query}; my $conn = DBX->$driver($connstr, "", ""); my $rs = $conn->query($SQL); while($rs) { print $rs->field("client") . "\n"; $rs->field("client", "test"); $rs->move_next; }

This does not, of course, prove that you can do anything with DBX that you can't do with DBI--to do that, I'd have to know something about DBX, and have used DBI more than twice. But it's all I have to offer, so I hope it sheds a little light. :-)



If God had meant us to fly, he would *never* have given us the railroads.
    --Michael Flanders

Replies are listed 'Best First'.
Re: Re^n: DBX offers simplified access to the DBI
by dws (Chancellor) on Feb 19, 2003 at 06:19 UTC
    So to amplify a bit, what he's (probably) terming a symbolic reference, I think I'd call dynamic method selection, and it does, in fact, answer your concern.

    Actually, that would raise a separate concern. Now, to protect myself against bogus stuff coming out of a config file, I have to wrap code in an eval block. And even then I'm not guaranteed that what comes out of the config file won't be the name of some method in DBX that I don't want to call.

      Actually, the DBX package doesn't contain any methods. So you can ONLY use it to initiate a connection.

        What if somebody wants to subclass it and add their own methods?

        What if you change your mind at a later date and need to add some methods?

        What if somebody invents a database called isa or can (darn that UNIVERSAL class)?

        :-)

        Also, saying DBI->connect tells me exactly what is happening by it's name alone. Where ever I see it I known what is happening.

        With DBX->mysql, DBX->oracle, DBX->Sybase, etc - the same task (connecting to a database) looks different depending on the database being connected to. IMHO this makes the code harder to understand.

        Call me old fashioned - but I still go for the whole method names should be verbs meme:-)