-sub search :Exported {
- return shift->SUPER::search(@_) if caller eq "Class::DBI"; # oops
- my ($self, $r) = @_;
- my %fields = map {$_ => 1 } $self->columns;
- my $oper = "like"; # For now
- use Carp; Carp::confess("Urgh") unless ref $r;
- my %params = %{$r->{params}};
- my %values = map { $_ => {$oper, $params{$_} } }
- grep { $params{$_} and $fields{$_} } keys %params;
-
- $r->objects([ %values ? $self->search_where(%values) : $self->retrieve_all ]);
- $r->template("list");
- $r->{template_args}{search} = 1;
+=head2 setup
+
+ This method is inherited from Maypole::Model::Base and calls setup_database,
+ which uses Class::DBI::Loader to create and load Class::DBI classes from
+ the given database schema.
+
+=cut
+
+=head2 setup_database
+
+The $opts argument is a hashref of options. The "options" key is a hashref of
+Database connection options . Other keys may be various Loader arguments or
+flags. It has this form:
+ {
+ # DB connection options
+ options { AutoCommit => 1 , ... },
+ # Loader args
+ relationships => 1,
+ ...
+ }
+
+=cut
+
+sub setup_database {
+ my ( $class, $config, $namespace, $dsn, $u, $p, $opts ) = @_;
+ $dsn ||= $config->dsn;
+ $u ||= $config->user;
+ $p ||= $config->pass;
+ $opts ||= $config->opts;
+ $config->dsn($dsn);
+ warn "No DSN set in config" unless $dsn;
+ $config->loader || $config->loader(
+ Class::DBI::Loader->new(
+ namespace => $namespace,
+ dsn => $dsn,
+ user => $u,
+ password => $p,
+ %$opts,
+ )
+ );
+ $config->{classes} = [ $config->{loader}->classes ];
+ $config->{tables} = [ $config->{loader}->tables ];
+
+ my @table_class = map { $_ . " => " . $config->{loader}->_table2class($_) } @{ $config->{tables} };
+ warn( 'Loaded tables to classes: ' . join ', ', @table_class )
+ if $namespace->debug;