| | 969 | my ($self,$q) = @_; |
|---|
| | 970 | |
|---|
| | 971 | my ($rowR,$rowE,@regkeys,%ids); |
|---|
| | 972 | %$rowR = map {$_,undef}, ('id','serial','key_name','status','datecreated','notes'); |
|---|
| | 973 | %$rowE = map {$_,undef}, ('name','new_val','old_val','rkid'); |
|---|
| | 974 | |
|---|
| | 975 | my $query = new Relations::Query(); my $entries; |
|---|
| | 976 | if ($entries = delete exists $q->{where}->{entries}) { |
|---|
| | 977 | $query->set( |
|---|
| | 978 | -select => "RegKeys.*,RKEntries.name,RKEntries.new_val,RKEntries.old_val,RKEntries.rkid", |
|---|
| | 979 | -from => "RegKeys JOIN RKEntries ON RegKeys.id=RKEntries.rkid" |
|---|
| | 980 | ); |
|---|
| | 981 | foreach my $entry (@{$entries}) { |
|---|
| | 982 | $query->set(-where => $q->{where}); |
|---|
| | 983 | $query->add(-where => $entry); |
|---|
| | 984 | my $sth = $self->{dbh}->prepare($query->get()); |
|---|
| | 985 | $sth->execute(); |
|---|
| | 986 | $sth->bind_columns(\$rowR->{id},\$rowR->{serial},\$rowR->{key_name},\$rowR->{status}, |
|---|
| | 987 | \$rowR->{datecreated},\$rowR->{notes},\$rowE->{name},\$rowE->{new_val}, |
|---|
| | 988 | \$rowE->{old_val},\$rowE->{rkid}); |
|---|
| | 989 | $sth->fetch(); |
|---|
| | 990 | if(exists $ids{$rowR->{id}) { |
|---|
| | 991 | push @($regkeys[$rowR->{id}]->{entries}),$rowE; |
|---|
| | 992 | } |
|---|
| | 993 | else { |
|---|
| | 994 | push $regkeys, $rowR; |
|---|
| | 995 | $ids{$rowR->{id}} = $#regkeys; |
|---|
| | 996 | push @{$regkeys[$#regkeys]->{entries}},$rowE; |
|---|
| | 997 | } |
|---|
| | 998 | } |
|---|
| | 999 | } |
|---|
| | 1000 | else { |
|---|
| | 1001 | $query->set( |
|---|
| | 1002 | -select => "*", |
|---|
| | 1003 | -from => "RegKeys", |
|---|
| | 1004 | -where => $q->{where} |
|---|
| | 1005 | ); |
|---|
| | 1006 | @regkeys = @{$self->{dbh}->selectall_arrayref($query->get(),{ Slice => {} })}; |
|---|
| | 1007 | foreach my $row (@regkeys) { |
|---|
| | 1008 | my $subquery = new Relations::Query( |
|---|
| | 1009 | -select => ['name','new_val','old_val'], |
|---|
| | 1010 | -from => 'RKEntries', |
|---|
| | 1011 | -where => {rkid => $row->{id}} |
|---|
| | 1012 | ); |
|---|
| | 1013 | $rowE = $self->{dbh}->selectall_arrayref($query->get(),{ Slice => {} }); |
|---|
| | 1014 | if(scalar @{$rowE}) { $row->{entries} = $rowE; } |
|---|
| | 1015 | } |
|---|
| | 1016 | } |
|---|
| | 1017 | return \@regkeys; |
|---|