1 package DBIx::Class::ResultSet::WithMetaData;
8 use MooseX::Method::Signatures;
9 extends 'DBIx::Class::ResultSet';
30 my $new = $self->next::method(@_);
31 foreach my $key (qw/_row_info was_row id_cols/) {
32 alias $new->{$key} = $new->{attrs}{$key};
35 unless ($new->_row_info) {
39 unless ($new->id_cols && scalar(@{$new->id_cols})) {
40 $new->id_cols([sort $new->result_source->primary_columns]);
47 my $rs = $self->search({});
48 $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
50 foreach my $row ($rs->all) {
51 if (my $info = $self->row_info_for(id => $self->_mk_id(row => $row))) {
52 $row = { %{$row}, %{$info} };
57 return ($self->was_row) ? $rows[0] : \@rows;
60 method add_row_info (Int :$id, :$row, HashRef :$info) {
62 $id = $self->_mk_id(row => { $row->get_columns });
64 unless ($self->find($id)) {
66 die 'invalid id passed to add_row_info';
69 if (my $existing = $self->_row_info->{$id}) {
70 $info = { %{$existing}, %{$info} };
73 $self->_row_info->{$id} = $info;
76 method row_info_for (Int :$id) {
77 return $self->_row_info->{$id};
80 method order_by (Str :$col) {
81 $col = "me.$col" unless ($col =~ m/\./);
82 return $self->search({}, { order_by => $col });
85 method limit (Int :$count) {
86 return $self->search({}, { rows => $count });
89 method _mk_id (HashRef :$row) {
90 return join('-', map { $row->{$_} } @{$self->id_cols});