[Israel.pm] Class::DBI with several databases from the same script

Yuval Yaari yuval at windax.com
Sun May 16 03:03:27 PDT 2004


Hi,

You should use solution 2, that's the way it should work...
Also, if you're using CDBI 0.96, s/set_db/connection/g;

  --Yuval

Gabor Szabo wrote:

>I am trying to use Class::DBI with several databases from the same
>script. All the databases have the same Schema so I use the same
>Class::DBI subclass for all of them.
>
>In MyProject::DBI I have the following code I call after the user
>gives me which database to use:
>
>  __PACKAGE__->set_db('Main', "dbi:SQLite:$dbfile", 'root', undef,
>                   {
>		    ChopBlanks => 0,
>                    sqlite_handle_binary_nulls  => 1,
>		    });
>
>
>When I do this for the first time, everything works fine.
>
>When - in the same run of the code - I do this for the second time
>it still works fine but also complains
>
>Subroutine MyProject::DBI::db_Main redefined at .....
>
>So how can I eliminate that ?
>
>
>Solution 1)
>===========
>No problem, I can use different database names for each
>database instead of "Main" so instead of db_Main Ima::DBI will
>create db_A  db_B etc....
>
>.... well, not exactly.
>Looking at the source of Class::DBI I found out that it actually does
>not care what name do I give as the first parameter to set_db,
>it always passes "Main" to the set_db method of Ima::DBI.
>Can anyone explain why ? Is this the only way CDBI can work ?
>
>
>Class::DBI 0.96
>Ima::DBI 0.33
>Perl 5.8.4   [1]
>
>Solution 2)
>===========
>I can use different subclass for each one of my databases
>somehow replacing MyProject::DBI with A::DBI, B::DBI etc
>on the fly but I have not done that yet and I don't feel enough
>lazy today to try to do that.
>
>Solution 3)
>===========
>My solution for now is to override $SIG{__WARN__} and eliminate all
>the warning regarding redefining subroutines.
>
>  local $SIG{__WARN__} = sub {
>       if ($_[0] !~ /^Subroutine MyProject::DBI::db_Main redefined at/) {
>          warn $_[0];
>       }
>  };
>
>This solution works well for now but I think I'll have to find a
>better solution as this one has something to do with sweeping
>and carpets.
>
>
>
>Gabor
>[1] BTW under 5.8.2 I don't get these warnings.
>_______________________________________________
>Perl mailing list
>Perl at perl.org.il
>http://www.perl.org.il/mailman/listinfo/perl
>
>
>  
>




More information about the Perl mailing list