[Dbix-class] Arbitrary SQL - Sybase backend
Lee Standen
nom at standen.id.au
Tue Jan 13 06:21:16 GMT 2009
A quick google search finds me:
SELECT BOTTOM 5 * FROM
(SELECT TOP 15 * FROM someTable
ORDER BY orderColumns DESC)
Having a *very* brief look at the code, it seems some work might need to be
done to separate the "paging" method out into DB specific modules...
Does DBIC already use SQL::Abstract::Limit? Seems that has all the
appropriate logic in there, but DB support is based on a "you have to read
it list" rather than a specific module matching the DBD::module
On 9/01/09 6:06 PM, "Raimund Hook" <raimund.hook at is.co.za> wrote:
> Hi
>
> I'm working with a system with a Sybase backend.
>
> I'm building a Catalyst application, and one of my pages pulls data from
> a table with 20000+ rows. In the process of trying to paginate this
> data, I've found that Sybase doesn't like the 'traditional' methods of
> pagination, and in fact, the SQL generated has lead me down a long
> frustrating journey to find an 'equivalent' command.
>
> (please forgive the Catalyst specific code, I know this isn't really a
> Catalyst forum)
>
> my $accounts = $c->model('Common::Accounts')->search(undef, {columns =>
> [qw/AccountID AccountName/], page => $page, rows => 10});
>
> with a SQLite backend, the SQL generated is:
>
> "SELECT me.AccountID, me.AccountName FROM Accounts me LIMIT 10 OFFSET
> 20" (assuming $page = 3)
>
> Sybase doesn't support the LIMIT/OFFSET Syntax, and can only seem to do
> a 'TOP x'-type of query. However, I've found the following query to work
> (using Sybase's 'identity' column magic):
>
> "SELECT AccountID, AccountName, RowNum=identity(9)
> INTO #temp_accounts
> FROM Accounts
> SELECT * FROM #temp_accounts WHERE RowNum BETWEEN 20 AND 30
> DROP TABLE #temp_accounts"
>
> I've tried to implement this as a custom ResultSource, but the problem
> with that is the SELECT that wraps it. Sybase seems to have issues with
> "An INTO clause is not allowed in a derived table." specifically.
>
> Essentially, I need a way to run my query directly, without being
> wrapped in an additional SELECT.
>
> I believe there is a way to reference the dbh directly using
> DBIx::Class::Storage::DBI->dbh, but I'd like to avoid that if at all
> possible. (plus I'm not too sure how to invoke that properly in the
> middle of my Catalyst app :P )
>
> Any help here would be appreciated.
>
> Thanks and regards
> Raimund Hook
> raimund dot hook at is dot co dot za
> Please note: This email and its content are subject to the disclaimer as
> displayed at the following link
> http://www.is.co.za/legal/E-mail+Confidentiality+Notice+and+Disclaimer.htm.
> Should you not have Web access, send a mail to disclaimers at is.co.za and a copy
> will be emailed to you.
>
> _______________________________________________
> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
>
More information about the DBIx-Class
mailing list