Commit | Line | Data |
65b76960 |
1 | package DBIx::Data::Collection::Set; |
2 | |
3 | use Moose; |
4 | use Method::Signatures::Simple; |
5 | use Data::Perl::Stream::Array; |
6 | |
7 | has _store => (is => 'ro', required => 1, init_arg => 'store'); |
8 | |
9 | has _column_order => (is => 'ro', required => 1, init_arg => 'column_order'); |
10 | |
11 | has _class => (is => 'ro', predicate => '_has_class'); |
12 | |
13 | has _member_cache => (is => 'rw', lazy_build => 1); |
14 | |
15 | method _build__member_cache { |
16 | my $stream = $self->_new_raw_stream; |
17 | my @cache; |
18 | while (my ($raw) = $stream->next) { |
19 | push @cache, $self->_inflate($raw); |
20 | } |
21 | \@cache; |
22 | } |
23 | |
24 | method _new_raw_stream { |
25 | $self->_store->new_select_command([])->execute; |
26 | } |
27 | |
28 | method _inflate ($raw) { |
29 | my @order = @{$self->_column_order}; |
30 | my %final; |
31 | @final{@order} = @$raw; |
32 | bless(\%final, $self->_class) if $self->_has_class; |
33 | \%final; |
34 | } |
35 | |
36 | method flatten { |
37 | @{$self->_member_cache}; |
38 | } |
39 | |
40 | method as_stream { |
41 | Data::Perl::Stream::Array->new(array => $self->_member_cache); |
42 | } |
43 | |
44 | 1; |