[Dbix-class] [PATCH] allow non-columns to be passed in joins using the from attribute
mike
pulsation at gmail.com
Thu Sep 21 01:22:42 CEST 2006
On 9/20/06, mike <pulsation at gmail.com> wrote:
> i have no idea how backwards this is. it took me over an hour just to
> track down where this was being generated.
>
> it allows you to pass a scalar ref as a condition to any custom JOINs
> using the from attribute. i don't know if it affects anything else,
> but it makes my query (http://scsys.co.uk:8001/4102) work.
for those behind restrictive firewalls, the query desired is as follows:
SELECT
`me`.`product_id`,
`me`.`publisher_id`,
`me`.`srds_classification_id`,
`me`.`type`,
`me`.`name`,
`me`.`active`,
`me`.`date_created`,
`me`.`description`,
`me`.`weight`,
`me`.`universal`
FROM
`products` `me`
LEFT JOIN `authorizations` `authorizations` ON (
`authorizations`.`product_id` = `me`.`product_id` AND
`authorizations.active` = 1 )
WHERE
(
`me`.`active` = 1
AND
`me`.`publisher_id` = 2209
AND
`authorizations.authorization_id` IS NULL
)
GROUP BY
`me`.`product_id`
the affected part is the second condition for the JOIN. without this
patch, the 1 is quoted as `1`, which is undesired. with the patch,
passing the 1 as a scalar reference allows it to be passed unquoted.
the associated search construct is:
$rs->search
(
{
'me.publisher_id' => $publisher->id,
'me.active' => 1,
'authorizations.authorization_id' => undef
},
{
from =>
[
{ 'me', 'products' },
[
{ 'authorizations', 'authorizations', -join_type => 'left' },
{
'me.product_id' => 'authorizations.product_id',
'authorizations.active' => \'1'
}
]
],
group_by => [ 'me.product_id' ]
}
);
i'm open to other suggestions; this is merely what i found to work for
me. it merely retrieves the products that do *not* have any
associated authorizations with the active flag set to 1.
-mike
More information about the Dbix-class
mailing list