Re: [siesta-dev] prefixing tablenames?

[prev] [thread] [next] [lurker] [Date index for 2004/10/16]

From: Bowen Dwelle
Subject: Re: [siesta-dev] prefixing tablenames?
Date: 17:32 on 16 Oct 2004
I cleaned this up, and added TABLE_PREFIX to Siesta::Config and 
siesta.conf. The only change to DBI.pm are the tokens in the create 
database script, and one line to parse and replace them. The data object 
classes each got this:

__PACKAGE__->set_up_table(  $Siesta::Config::TABLE_PREFIX . 'list');

If anyone wants the updated versions, I've posted them here:
http://www.dwelle.org/eg/Siesta-update.tar.gz

Bowen Dwelle wrote:
> Darren Chamberlain wrote:
> 
>> * Bowen Dwelle <bowen at dwelle.org> [2004/10/15 08:19]:
>>
>>> Simon -- thanks for the pointers. I could certainly hack up Siesta 
>>> with $prefix -- and I may, in the short run, but doing it via 
>>> Class::DBI sounds like the right way. Unfortunately, that's _way_ 
>>> beyond my level of expertise.
>>
>>
>>
>> You might be able to do it like so:
>>
>>   package My::Class::DBI;
>>
>>   use base 'Class::DBI';
>>   My::Class::DBI->set_db(...);
>>
>>   use constant TABLE_PREFIX => 'my_';
>>
>>   sub table {
>>       my ($class, $table_name)  = @_;
>>       __PACKAGE__->SUPER::table(TABLE_PREFIX . $table_name);
>>   }
>>
>> And then in the subclasses:
>>
>>   package My::Class::DBI::Foo;
>>
>>   use base 'My::Class::DBI';
>>   My::Class::DBI::Foo->table('foo');
>>   I haven't tested this or anything, of course, just brainstorming.
>>
>> (darren)
> 
> 
> Almost... It turns out that (at least in this case) I don't need to 
> override Class::DBI::table().
> 
> I added this to Siesta::DBI.pm
> 
> sub TABLE_PREFIX { return 'siesta_'; }
> 
> ...hacked init_db to replace a token in the create_database SQL with the
> output of the stub above, and then changed the six data object classes 
> to do
> 
> __PACKAGE__->set_up_table(  __PACKAGE__->TABLE_PREFIX() . 'list');
> 
> instead of
> 
> __PACKAGE__->set_up_table('list');
> 
> ...and that seems to do it!
> 
> PS I did the same for Email::Store, adding the prefix sub to 
> Email::Store::DBI, and the similar things to the data object classes. 
> The only real ugliness is hacking Class::DBI::DATA::Schema to
>     my $prefix = Email::Store::DBI->TABLE_PREFIX();
>     $sql =~ s/TABLE_PREFIX_/$prefix/sg;
> 
> which I know isn't right at all, but I don't how to look in the right 
> place in the calling stack or whatever... It's temporary; I'm sure 
> someone will be able to advise how to fix this.
> 
> -- Bowen
> 
There's stuff above here

Generated at 14:00 on 11 Nov 2004 by mariachi 0.52