GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
SQL::Abstract::Plugin::BangOverrides(3) User Contributed Perl Documentation SQL::Abstract::Plugin::BangOverrides(3)

SQL::Abstract::Plugin::BangOverrides

  $sqla->plugin('+BangOverrides');
  ...
  profit();

Wraps all currently existing clause based statements such that when a clause of '!name' is encountered, if its value is a coderef, it's called with the original value of the 'name' clause and expected to return a replacement, and if not, it's simply used as a direct replacement.

This allows for passing data through existing systems that attempt to have their own handling for thing but whose capabilities are now superceded by SQL::Abstract, and is primarily useful to provide access to experimental feature bundles such as SQL::Abstract::Plugin::ExtraClauses.

As an example of such a thing, given an appropriate DBIC setup (see "examples/bangdbic.pl"):

  $s->storage->sqlmaker->plugin('+ExtraClauses')->plugin('+BangOverrides');

  my $rs2 = $s->resultset('Foo')->search({
    -op => [ '=', { -ident => 'outer.y' }, { -ident => 'me.x' } ]
  });
  # (SELECT me.x, me.y, me.z FROM foo me WHERE ( outer.y = me.x ))

  my $rs3 = $rs2->search({}, {
    '!from' => sub { my ($sqla, $from) = @_;
      my $base = $sqla->expand_expr({ -old_from => $from });
      return [ $base, -join => [ 'wub', on => [ 'me.z' => 'wub.z' ] ] ];
    }
  });
  # (SELECT me.x, me.y, me.z FROM foo me JOIN wub ON me.z = wub.z WHERE ( outer.y = me.x ))

  my $rs4 = $rs3->search({}, {
    '!with' => [ [ qw(wub x y z) ], $s->resultset('Bar')->as_query ],
  });
  # (WITH wub(x, y, z) AS (SELECT me.a, me.b, me.c FROM bar me) SELECT me.x, me.y, me.z FROM foo me JOIN wub ON me.z = wub.z WHERE ( outer.y = me.x ))

  my $rs5 = $rs->search({}, { select => [ { -coalesce => [ { -ident => 'x' }, { -value => 7 } ] } ] });
  # (SELECT -COALESCE( -IDENT( x ), -VALUE( 7 ) ) FROM foo me WHERE ( z = ? ))

  my $rs6 = $rs->search({}, { '!select' => [ { -coalesce => [ { -ident => 'x' }, { -value => 7 } ] } ] });
  # (SELECT COALESCE(x, ?) FROM foo me WHERE ( z = ? ))
2021-01-21 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.