[prev] [thread] [next] [Date index for 2006/02/07]
--===============1585163703==
Content-Type: multipart/alternative;
boundary="----=_Part_6569_1872237.1139274199789"
------=_Part_6569_1872237.1139274199789
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
I sent an email earlier about using "LEFT JOIN" with CDBI::Sweet's prefetch
attribute. I've hacked together a version that works for me, and retains
backwards compatibility with the existing prefetch attribute. I'd like to
clean it up and submit it as a patch, but I want to make sure the interface
is reasonable first.
Currently, "prefetch" allows you to specify a set of relationships to
automatically populate via an inner join using syntax like this:
$attr{prefetch} =3D qw/rel1 rel2 rel3/;
CDBI::Sweet automatically figures out which columns to use for the join and
sets up the FROM and WHERE clauses accordingly. I've made a small change
that allows you to specify the type of join you would like:
$attr{prefetch} =3D ['rel1', {name =3D> 'rel2', type =3D> 'left'}, 'rel=
3'];
The joins are ordered as they will appear in the "FROM" clause, so this
would be:
FROM me, rel1 left join rel2, rel3
The other small enhancement is that the column returned from the database i=
s
checked for null before being populated. This allows you to use "has_a"
relationships (for example) with null-able keys. If you prefetch using such
a relationship and use a "left" join, you get either "undef" or a reference
to the joined object, depending on whether the column was null or not.
This trivially extends to any other type of join, and essentially gives you
a way to control the "FROM" clause in the same way you can now control the
"WHERE" clause using SQL::Abstract.
I've hacked this in for now, and need to spend some time making it look
nicer, but I'm happy to send a diff to anyone who is curious to see it in
action. I'd love to hear any feedback. It's working for me as-is, but I
could be missing any number of big reasons why it won't work in general. If
you've got one, let me know!
Charles.
------=_Part_6569_1872237.1139274199789
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
I sent an email earlier about using "LEFT JOIN" with CDBI::Sweet'=
s prefetch attribute. I've hacked together a version that works for me, and=
retains backwards compatibility with the existing prefetch attribute. I'd =
like to clean it up and submit it as a patch, but I want to make sure the i=
nterface is reasonable first.
<br><br>Currently, "prefetch" allows you to specify a set of rela=
tionships to automatically populate via an inner join using syntax like thi=
s:<br><br> $attr{prefetch} =3D qw/rel1 rel2 rel3/;<br><br=
>CDBI::Sweet automatically figures out which columns to use for the join an=
d sets up the FROM and WHERE clauses accordingly. I've made a small change =
that allows you to specify the type of join you would like:
<br><br> $attr{prefetch} =3D ['rel1', {name =3D> 'rel2=
', type =3D> 'left'}, 'rel3'];<br><br>The joins are ordered as they will=
appear in the "FROM" clause, so this would be:<br><br> &nbs=
p; FROM me, rel1 left join rel2, rel3
<br><br>The other small enhancement is that the column returned from the da=
tabase is checked for null before being populated. This allows you to use &=
quot;has_a" relationships (for example) with null-able keys. If you pr=
efetch using such a relationship and use a "left" join, you get e=
ither "undef" or a reference to the joined object, depending on w=
hether the column was null or not.
<br><br>This trivially extends to any other type of join, and essentially g=
ives you a way to control the "FROM" clause in the same way you c=
an now control the "WHERE" clause using SQL::Abstract.<br><br>
I've hacked this in for now, and need to spend some time making it look nic=
er, but I'm happy to send a diff to anyone who is curious to see it in acti=
on. I'd love to hear any feedback. It's working for me as-is, but I could b=
e missing any number of big reasons why it won't work in general. If you've=
got one, let me know!
<br><br>Charles.<br>
------=_Part_6569_1872237.1139274199789--
--===============1585163703==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
ClassDBI mailing list
ClassDBI@xxxxx.xxxxxxxxxxxxxxxx.xxx
http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
--===============1585163703==--
|
[CDBI] RFC: CDBI::Sweet prefetch
|
Generated at 23:19 on 12 Feb 2006 by mariachi v0.52