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

Nothing's hardcoded. You simply replace the 'mysql' with the name of your DBD driver.

If you have to change code, it's hard coded. That's what hard coded means.

Update: After looking up "hardcoded" in the Hacker's Dictionary, I see that it applies to constants. I should have said that the database is "hardwired", which is just as bad.

  • Comment on Re: Re: Re: DBX offers simplified access to the DBI

Replies are listed 'Best First'.
Re: Re: Re: Re: DBX offers simplified access to the DBI
by batkins (Chaplain) on Feb 19, 2003 at 05:00 UTC
    I don't see how this is any different from the DBI. With the DBI, you change part of the connection string. With this, you change the name of the method you call. Everything's handled behind the scenes with AUTOLOAD, so DBX will work with any DBD:: module.
      I don't see how this is any different from the DBI. With the DBI, you change part of the connection string.

      Yes, and you can change the connect string without modifying the program, by pulling the connect string out of a configuration file, an environment variable, etc. That is, you can switch databases without having to reach into your code to change a statement.

        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

        OK, I can sort of see what you're saying. You could still use a symbolic reference with the DBX, though, if you really insist on changing database drivers based on a configuration file.