[Dbix-class] DBIx::Class,
mysql and 'SQL_CALC_FOUND_ROWS'/'SELECT FOUND_ROWS()'
Matthew Braid
dbixclass at mdb.id.au
Wed Dec 15 01:21:59 GMT 2010
Hi all,
I need to do pagination for a site I'm building in Catalyst, and my
underlying RDMS is mysql. Rather than using count and search, I want
to use mysql's SQL_CALC_FOUND_ROWS modifier and the 'SELECT
FOUND_ROWS()' statement (since that's a lot faster than count+search).
Unfortunately I have no idea how to actually do this with DBIx::Class.
My initial guess for the first part was something along the lines of:
$rs->search({column => 'value'}, {select => ['SQL_CALC_FOUND_ROWS *'], ....})
This did the right thing database-wise (DBIC_TRACE revealed exactly
the right SQL statement), but the resulting rows' accessors (like id,
name etc) all returned nothing - I ended up with a big table of no
data.
So I changed it to:
$rs->search({column => 'value'}, {columns => ['SQL_CALC_FOUND_ROWS *'], ...})
But this resulted in an invalid SQL statement since 'me.' had been
prepended to 'SQL_CALC_FOUND_ROWS'.
Even if I had succeeded in getting the first part working, I have no
idea how to go about formulating the statement 'SELECT FOUND_ROWS()'
with DBIx::Class - there's no FROM table, and from what I can tell
DBIx::Class seems to assume there is always a table.
Is there a method for doing both of this statements? Falling back to
using the raw database handle $schema->storage->dbh seems to be a bit
of a shame here....
Thanks,
MDB
More information about the DBIx-Class
mailing list