[Dbix-class] Search_rs not returning newly created rows

Kenneth S Mclane ksmclane at us.ibm.com
Tue Jun 19 19:22:24 GMT 2012


Len Jaffe <lenjaffe at jaffesystems.com> wrote on 06/19/2012 02:06:21 PM:

> From:
> 
> Len Jaffe <lenjaffe at jaffesystems.com>
> 
> To:
> 
> "DBIx::Class user and developer list" <dbix-class at lists.scsys.co.uk>
> 
> Date:
> 
> 06/19/2012 02:10 PM
> 
> Subject:
> 
> Re: [Dbix-class] Search_rs not returning newly created rows
> 
> 

> On Tue, Jun 19, 2012 at 2:58 PM, Kenneth S Mclane <ksmclane at us.ibm.com> 
wrote:
> 
> Moritz Lenz <moritz at faui2k3.org> wrote on 06/19/2012 01:16:42 PM:

>  
> It looks like it is because of the relationships limiting the rows 
> returned. I can comment out the prefetch statement and my extra rows
> actually show up. In one case this works fine, in another it causes 
> the search to fail. I think I may need to create a second rs with 
> just the related data so if I get a null value I can bypass it. Not 
> sure exactly how to do this and keep the data straight.
> 
> Can you share the relevant queries?
> 
> It may be that you're using an inner join when you need and outer 
> join if you can;t create the related records before the re-query.
> 
> L.
> 
> -- 
> lenjaffe at jaffesystems.com   614-404-4214             
www.volunteerable.net
> Proprietor: http://www.theycomewithcheese.com/ - An Homage to Fromage
> Greenbar: Grubmaster: 2012-2009, Grub Asst: 2008, Trained: 2007.

This is the code with the prefetch commented out.
sub list :Local {
        my ($self, $c, $page) = @_;
        $page = $c->req->param('page') || 1;
        my $search = $c->req->param('search');
        $search =~ s/($search)/\U$1/gi;
        my $rs = $c->model('ORANGES::Account')->search_rs( { -or => [
                'me.account_code' => {'like', "%$search%" },
                'me.account_name' => {'like', "%$search%" }, 
        ] },{ 
        #prefetch => { account => [ { department => 'manager'}, { servers 
=> 'subs' }, 'metrics' ] },
        order_by => 'me.account_code',
        rows => 5,
        page => $page,
        });
        $c->stash(accounts => $rs);
        $c->stash(pager => $rs->pager());
        $c->stash->{'template'}=>'results/list';
}

which generates this SQL and gives me the account info minus the related 
data I normally get:

SELECT account_id, account_code, account_name, account_policy, 
account_workitem, account_target, start_date, kit_date, upgrade_date, 
approval_date, sunset_date, alert_flag, cirats_flag, report_flag, 
priv_flag, sample_flag, sample_rate, account_pid, department_id, chip_id 
FROM (
  SELECT account_id, account_code, account_name, account_policy, 
account_workitem, account_target, start_date, kit_date, upgrade_date, 
approval_date, sunset_date, alert_flag, cirats_flag, report_flag, 
priv_flag, sample_flag, sample_rate, account_pid, department_id, chip_id, 
ROW_NUMBER() OVER(  ORDER BY me.account_code ) AS rno__row__index FROM (
    SELECT me.account_id, me.account_code, me.account_name, 
me.account_policy, me.account_workitem, me.account_target, me.start_date, 
me.kit_date, me.upgrade_date, me.approval_date, me.sunset_date, 
me.alert_flag, me.cirats_flag, me.report_flag, me.priv_flag, 
me.sample_flag, me.sample_rate, me.account_pid, me.department_id, 
me.chip_id  FROM HCDB_TEST.ACCOUNT me WHERE ( ( me.account_code LIKE ? OR 
me.account_name LIKE ? ) )
  ) me
) me WHERE rno__row__index >= ? AND rno__row__index <= ?

: '%11211%', '%11211%', '1', '5'
SELECT me.department_id, me.department_code, me.department_pid, 
me.manager_id FROM HCDB_TEST.DEPARTMENT me WHERE ( me.department_id = ? ): 
'170'
SELECT me.account_id, me.account_code, me.num_servers, me.num_subsystems 
FROM HCDB_TEST.METRICS me WHERE ( me.account_id = ? ): '2445'
SELECT me.account_id, me.account_code, me.num_servers, me.num_subsystems 
FROM HCDB_TEST.METRICS me WHERE ( me.account_id = ? ): '2445'

And if I un-comment it I get this sql and no results on page:

SELECT me.account_id, me.account_code, me.account_name, me.account_policy, 
me.account_workitem, me.account_target, me.start_date, me.kit_date, 
me.upgrade_date, me.approval_date, me.sunset_date, me.alert_flag, 
me.cirats_flag, me.report_flag, me.priv_flag, me.sample_flag, 
me.sample_rate, me.account_pid, me.department_id, me.chip_id, 
account.account_id, account.account_code, account.account_name, 
account.account_policy, account.account_workitem, account.account_target, 
account.start_date, account.kit_date, account.upgrade_date, 
account.approval_date, account.sunset_date, account.alert_flag, 
account.cirats_flag, account.report_flag, account.priv_flag, 
account.sample_flag, account.sample_rate, account.account_pid, 
account.department_id, account.chip_id, department.department_id, 
department.department_code, department.department_pid, 
department.manager_id, manager.manager_id, manager.manager_name, 
manager.manager_email, servers.server_id, servers.server_name, 
servers.server_domain, servers.server_ip, servers.server_type, 
servers.os_vendor, servers.os_name, servers.os_version, 
servers.account_id, subs.subsystem_id, subs.subsystem_name, 
subs.subsystem_env, subs.subsystem_app, subs.subsystem_date, 
subs.software_vendor, subs.software_name, subs.software_version, 
subs.software_fixpack, subs.confidential_flag, subs.hck_frequency, 
subs.hck_retention, subs.hck_fixtime, subs.hck_notify, subs.subsystem_pid, 
subs.server_id, metrics.account_id, metrics.account_code, 
metrics.num_servers, metrics.num_subsystems FROM (
SELECT account_id, account_code, account_name, account_policy, 
account_workitem, account_target, start_date, kit_date, upgrade_date, 
approval_date, sunset_date, alert_flag, cirats_flag, report_flag, 
priv_flag, sample_flag, sample_rate, account_pid, department_id, chip_id 
FROM (
  SELECT account_id, account_code, account_name, account_policy, 
account_workitem, account_target, start_date, kit_date, upgrade_date, 
approval_date, sunset_date, alert_flag, cirats_flag, report_flag, 
priv_flag, sample_flag, sample_rate, account_pid, department_id, chip_id, 
ROW_NUMBER() OVER(  ORDER BY me.account_code ) AS rno__row__index FROM (
    SELECT me.account_id, me.account_code, me.account_name, 
me.account_policy, me.account_workitem, me.account_target, me.start_date, 
me.kit_date, me.upgrade_date, me.approval_date, me.sunset_date, 
me.alert_flag, me.cirats_flag, me.report_flag, me.priv_flag, 
me.sample_flag, me.sample_rate, me.account_pid, me.department_id, 
me.chip_id  FROM HCDB_TEST.ACCOUNT me  JOIN HCDB_TEST.ACCOUNT account ON 
account.account_id = me.account_id  JOIN HCDB_TEST.DEPARTMENT department 
ON department.department_id = account.department_id  JOIN 
HCDB_TEST.MANAGER manager ON manager.manager_id = department.manager_id 
JOIN HCDB_TEST.METRICS metrics ON metrics.account_id = account.account_id 
WHERE ( ( me.account_code LIKE ? OR me.account_name LIKE ? ) )
  ) me
) me WHERE rno__row__index >= ? AND rno__row__index <= ?

) me  JOIN HCDB_TEST.ACCOUNT account ON account.account_id = me.account_id 
 JOIN HCDB_TEST.DEPARTMENT department ON department.department_id = 
account.department_id  JOIN HCDB_TEST.MANAGER manager ON 
manager.manager_id = department.manager_id LEFT JOIN HCDB_TEST.SERVER 
servers ON servers.account_id = account.account_id LEFT JOIN 
HCDB_TEST.SUBSYSTEM subs ON subs.server_id = servers.server_id  JOIN 
HCDB_TEST.METRICS metrics ON metrics.account_id = account.account_id WHERE 
( ( me.account_code LIKE ? OR me.account_name LIKE ? ) ) ORDER BY 
me.account_code, servers.account_id, subs.server_id: '%11211%', '%11211%', 
'1', '5', '%11211%', '%11211%'
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20120619/837b811b/attachment-0001.htm


More information about the DBIx-Class mailing list