The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

has sqla => (
is => 'ro', init_arg => undef,
handles => [ qw(
expand_expr render_aqt join_query_parts
) ],
);
sub cb {
my ($self, $method, @args) = @_;
return sub {
local $self->{sqla} = shift;
$self->$method(@args, @_)
};
}
sub register {
my ($self, @pairs) = @_;
my $sqla = $self->sqla;
while (my ($method, $cases) = splice(@pairs, 0, 2)) {
my @cases = @$cases;
while (my ($name, $case) = splice(@cases, 0, 2)) {
$sqla->$method($name, $self->cb($case));
}
}
return $self;
}
sub apply_to {
my ($self, $sqla) = @_;
$self = $self->new unless ref($self);
local $self->{sqla} = $sqla;
$self->register_extensions($sqla);
}
requires 'register_extensions';
1;
__END__
=head1 NAME
SQL::Abstract::Role::Plugin - helpful methods for plugin authors
=head1 METHODS
=head2 apply_to
Applies the plugin to an L<SQL::Abstract> object.
=head2 register_extensions
Provided by the plugin, registers its extensions to the sqla object.
=head2 cb
Creates a callback to call a method on the plugin.
=head2 register
Calls methods on the sqla object with arguments wrapped as callbacks.
=head2 sqla
Available only during plugin callback executions, contains the currently
active L<SQL::Abstract> object.
=cut