a - cool!
b- way too much!  i would have settled for "yeah, the manager class  
is what i'd use"

i'm running with straight-sql right now, but i'll give it a shot  
using manager joins tomorrow morning!


On Jun 13, 2006, at 8:48 PM, John Siracusa wrote:

> On 6/13/06 6:09 PM, Jonathan Vanasco wrote:
>> in plain sql it  would be:
>>
>> SELECT *
>> FROM account , email , verification_string
>> WHERE
>> account.id = email. account_id AND
>> email.id = verification_string.id AND
>> email.email_address= %s AND
>> verification_string.verification_string= %s
>>
>> can this be done trivially in rosedb using the table/class objects?
>
> Yes, this is exactly what the Manager class is designed to do.  You  
> can find
> documentation here:
>
> http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object/ 
> Manager.pm
>
> The tutorial shows how to create a Manager class for each of your
> Rose::DB::Object-derived classes:
>
> http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object/ 
> Tutorial.pod#M
> ultiple_objects
>
> and how to use a Manager to formulate queries that use JOINs behind  
> the
> scenes:
>
> http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object/ 
> Tutorial.pod#A
> uto-joins_and_other_Manager_features
>
> In your example, assuming standard class and relationship names,  
> the Manager
> call would look something like this:
>
>     $emails =
>       Email::Manager->get_emails(
>         require_objects => [ qw(account verification_string) ],
>         query =>
>         [
>           'email.email_address' => 'bar',
>           'verification_string.verification_string' => 'foo',
>         ]);
>
> after which $emails would be a reference to an array of Email  
> objects, each
> with its own Account and VerificationString sub-objects already  
> attached.
>
>     foreach my $email (@$emails)
>     {
>       # No database access performed here; all data already
>       # loaded by the Manager call above.
>       my $addr = $email->email_address;
>       my $ok   = $email->account->is_verified;
>       my $vs   = $email->verification_string->verification_string;
>       ...
>     }
>
> The SQL produced by the Email::Manager would look something like this:
>
>   SELECT
>     t1.id,
>     t1.account_id,
>     t1.email_address,
>     t2.id,
>     t2.is_verified,
>     t3.id,
>     t3.email_id,
>     t3.verification_string
>   FROM
>     email t1,
>     account t2,
>     verification_string t3
>   WHERE
>     t1.email_address = ? AND
>     t3.verification_string = ? AND
>     t1.account_id = t2.id AND
>     t1.id = t3.email_id
>   ORDER BY t1.id
>
> with "bar" and "foo" bound to the appropriate DBI place-holders ("?").
>
> (The ORDER BY clause is inserted automatically if the relationship  
> between
> email and verification_string is one-to-many.  If you've set it up as
> one-to-one or many-to-one instead, then it would be omitted.)
>
> You can formulate a similar query using the Account::Manager or
> VerificationString::Manager as well.  Which is best depends on how  
> you've
> set up your relationships and what kind of indexes you have on  
> these tables.
>
> -John
>
>
>
>
> _______________________________________________
> Rose-db-object mailing list
> Rose-db-object@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rose-db-object
>

//Jonathan Vanasco

|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
- - - - - - - - - - - -
| RoadSound.com / Indie-Rock.net
| Collaborative Online Management And Syndication Tools
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
- - - - - - - - - - - -





_______________________________________________
Rose-db-object mailing list
Rose-db-object@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rose-db-object

Reply via email to