X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCDBICompat%2FConstructor.pm;h=78c6d333a0b92dae7cd20f176e650a6ba477fdaa;hb=91028369783da0db94a61e879860b8da97417fbb;hp=f44079b64cbed5282c387e65e29732dcfabf24f2;hpb=28f7f7d31e0d17c5362935ac52f7e67a189ddf0f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/CDBICompat/Constructor.pm b/lib/DBIx/Class/CDBICompat/Constructor.pm index f44079b..78c6d33 100644 --- a/lib/DBIx/Class/CDBICompat/Constructor.pm +++ b/lib/DBIx/Class/CDBICompat/Constructor.pm @@ -4,20 +4,29 @@ package # hide from PAUSE use strict; use warnings; +use base 'DBIx::Class::CDBICompat::ImaDBI'; + +use Carp; +use DBIx::Class::_Util qw(quote_sub perlstring); +use namespace::clean; + +__PACKAGE__->set_sql(Retrieve => <<''); +SELECT __ESSENTIAL__ +FROM __TABLE__ +WHERE %s + sub add_constructor { - my ($class, $meth, $sql) = @_; - $class = ref $class if ref $class; - no strict 'refs'; - - my %attrs; - $attrs{rows} = $1 if $sql =~ s/LIMIT\s+(.*)\s+$//i; - $attrs{order_by} = $1 if $sql =~ s/ORDER BY\s+(.*)//i; - - *{"${class}::${meth}"} = - sub { - my ($class, @args) = @_; - return $class->search_literal($sql, @args, \%attrs); - }; + my ($class, $method, $fragment) = @_; + + croak("constructors needs a name") unless $method; + + carp("$method already exists in $class") && return + if $class->can($method); + + quote_sub "${class}::${method}" => sprintf( <<'EOC', perlstring $fragment ); + my $self = shift; + $self->sth_to_objects($self->sql_Retrieve(%s), \@_); +EOC } 1;