X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCDBICompat%2FConstructor.pm;h=f2e78b9251aa0193b7278d0e35d4809fd76200dc;hb=49eb5522ff64004f2fb7667b0e032555521bad32;hp=69837335405f13d5f1ac77e68fdc67a35e3841e8;hpb=656796f2088da66cc80f4eb127c39c923ef3c1dd;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/CDBICompat/Constructor.pm b/lib/DBIx/Class/CDBICompat/Constructor.pm index 6983733..f2e78b9 100644 --- a/lib/DBIx/Class/CDBICompat/Constructor.pm +++ b/lib/DBIx/Class/CDBICompat/Constructor.pm @@ -1,16 +1,32 @@ -package DBIx::Class::CDBICompat::Constructor; +package # hide from PAUSE + DBIx::Class::CDBICompat::Constructor; + +use base qw(DBIx::Class::CDBICompat::ImaDBI); + +use Sub::Name(); use strict; use warnings; +use Carp; + +__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'; - *{"${class}::${meth}"} = - sub { - my ($class, @args) = @_; - return $class->search_literal($sql, @args); + my ($class, $method, $fragment) = @_; + return croak("constructors needs a name") unless $method; + + no strict 'refs'; + my $meth = "$class\::$method"; + return carp("$method already exists in $class") + if *$meth{CODE}; + + *$meth = Sub::Name::subname $meth => sub { + my $self = shift; + $self->sth_to_objects($self->sql_Retrieve($fragment), \@_); }; }