in reply to LIMIT clause in Class::DBI

I found this to be a problem for me as well. In retrospect, I think I could have been well served to stick with DBI as suggested above. However, I wrote my own pager for Class::DBI and Oracle using Data::Page. If you are using MySQL you can find similar code on CPAN already.

The invoking code looks like this:

use Data::Page; my $total_rows = $table->get_count_sql($sql_where_clause); # my $pager = Data::Page->new($total_rows, $G::CF{rows_per_page}, $current_page_num); # Now get only the needed chunk from the DB my @results = $table->get_range_sql($sql_where_clause, $pager->first, $pager->last);
The supporting functions added to Class::DBI are on my scratchpad

The interesting bit was getting the SQL that would work with Oracle to provide a "limit" or an "offset" like MySQL. This ends up being ridiculously complicated:

Select * From ( SELECT %s ,rownum R FROM (SELECT * FROM %s %s ) ) WHERE R BETWEEN %s AND %s
Update:
Note that you need to be very careful about what you pass into the where clause. This code will allow bad things to happen if a tainted where clause is passed in.

-------------------------------------
Nothing is too wonderful to be true
-- Michael Faraday