}
method _attach_additional_sources () {
- my $raw_name = $self->_raw_source_name;
+ my $raw_name = $self->raw_source_name;
my $schema = $self->schema;
# if the raw source is already present we can assume we're done
return if grep { $_ eq $raw_name } $schema->sources;
+
# our parent should've been registered already actually due to DBIC
# attaching subclass sources later in load_namespaces
+
my $parent;
if ($self->parent_source) {
my $parent_name = $self->parent_source->name;
confess "Couldn't find attached source for parent $parent_name - did you use load_classes? This module is only compatible with load_namespaces"
unless $parent;
}
- my $table = Table->new({ name => '_'.$self->name });
- $table->add_columns(
- map { ($_ => { %{$self->column_info($_)} }) }
- grep { $self->column_info($_)->{originally_defined_in} eq $self->name }
- $self->columns
- );
+
+ # create the raw table source
+
+ my $table = Table->new({ name => $self->raw_table_name });
+
# we don't need to add the PK cols explicitly if we're the root table
- # since they already got added above
+ # since they'll get added below
+
if ($parent) {
my %join;
foreach my $pri ($self->primary_columns) {
$table->add_column($pri => \%info);
$join{"foreign.${pri}"} = "self.${pri}";
}
- $table->add_relationship('parent', $parent->source_name, \%join);
+ # have to use source name lookups rather than result class here
+ # because we don't actually have a result class on the raw sources
+ $table->add_relationship('parent', $parent->raw_source_name, \%join);
}
+
+ # add every column that's actually a concrete part of us
+
+ $table->add_columns(
+ map { ($_ => { %{$self->column_info($_)} }) }
+ grep { $self->column_info($_)->{originally_defined_in} eq $self->name }
+ $self->columns
+ );
$table->set_primary_key($self->primary_columns);
$schema->register_source($raw_name => $table);
}
return $self->next::method(@args);
}
-method _raw_source_name () {
+method raw_source_name () {
my $base = $self->source_name;
confess "Can't generate raw source name when we don't have a source_name"
unless $base;
return 'Raw::'.$base;
}
+method raw_table_name () {
+ return '_'.$self->name;
+}
+
method add_columns (@args) {
my $ret = $self->next::method(@args);
$_->{originally_defined_in} ||= $self->name for values %{$self->_columns};
'Columns for raw foo ok'
);
-warn Dumper $raw_foo->_columns;
+my $raw_bar = MTITest->source('Raw::Bar');
+
+is_deeply(
+ [ $raw_bar->columns ],
+ [ qw(id b) ],
+);
+
+ok($raw_bar->has_relationship('parent'), 'parent rel exists');
+
+my $parent_info = $raw_bar->relationship_info('parent');
+
+is(
+ $parent_info->{source}, 'Raw::Foo',
+ 'parent rel points to raw parent'
+);
+
+warn Dumper $raw_bar->_columns;
+
+warn Dumper $raw_bar->_relationships;