From 63a9b3c81a58ced0c63fa7c02a45535cde91acae Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Tue, 28 Apr 2020 10:42:05 +0100 Subject: Add dbic-pg-server-cursors library, set as default Found at https://github.com/mzealey/dbic-pg-server-cursors, not on CPAN. --- perllib/DBIx/Class/SQLMaker/Pg/ServerCursor.pm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 perllib/DBIx/Class/SQLMaker/Pg/ServerCursor.pm (limited to 'perllib/DBIx/Class/SQLMaker/Pg/ServerCursor.pm') diff --git a/perllib/DBIx/Class/SQLMaker/Pg/ServerCursor.pm b/perllib/DBIx/Class/SQLMaker/Pg/ServerCursor.pm new file mode 100644 index 000000000..dc1be419e --- /dev/null +++ b/perllib/DBIx/Class/SQLMaker/Pg/ServerCursor.pm @@ -0,0 +1,21 @@ +package DBIx::Class::SQLMaker::Pg::ServerCursor; +use strict; +use warnings; +use base 'DBIx::Class::SQLMaker'; +use mro 'c3'; + +# SQLMaker to return the SQL which creates a server-side cursor on Postgres if +# _as_cursor is passed with the name of the cursor to create. +sub select { + my $self = shift; + my ($table, $fields, $where, $rs_attrs, $limit, $offset) = @_; + my ($sql, @all_bind) = $self->next::method(@_); + + if( my $cursor_name = $rs_attrs->{_as_cursor} ) { + $sql = "DECLARE $cursor_name CURSOR WITH HOLD FOR $sql"; + } + + return wantarray ? ($sql, @all_bind) : $sql; +} + +1 -- cgit v1.2.3