use warnings;
use base 'DBIx::Class::Storage::DBI::Cursor';
use mro 'c3';
+use DBIx::Class::Storage::DBI::ADO::CursorUtils '_normalize_guids';
+use namespace::clean;
=head1 NAME
=cut
-sub _dbh_next {
- my ($storage, $dbh, $self) = @_;
+sub next {
+ my $self = shift;
- my $next = $self->next::can;
+ my @row = $self->next::method(@_);
- my @row = $next->(@_);
-
- my $col_info = $storage->_resolve_column_info($self->args->[0]);
-
- my $select = $self->args->[1];
-
- for my $select_idx (0..$#$select) {
- my $selected = $select->[$select_idx];
-
- next if ref $selected;
-
- my $data_type = $col_info->{$selected}{data_type};
-
- if ($storage->_is_guid_type($data_type)) {
- my $returned = $row[$select_idx];
-
- $row[$select_idx] = substr($returned, 1, 36)
- if substr($returned, 0, 1) eq '{';
- }
- }
+ _normalize_guids(
+ $self->args->[1],
+ $self->{_colinfos} ||= $self->storage->_resolve_column_info($self->args->[0]),
+ \@row,
+ $self->storage
+ );
return @row;
}
-sub _dbh_all {
- my ($storage, $dbh, $self) = @_;
-
- my $next = $self->next::can;
-
- my @rows = $next->(@_);
-
- my $col_info = $storage->_resolve_column_info($self->args->[0]);
-
- my $select = $self->args->[1];
-
- for my $row (@rows) {
- for my $select_idx (0..$#$select) {
- my $selected = $select->[$select_idx];
-
- next if ref $selected;
-
- my $data_type = $col_info->{$selected}{data_type};
+sub all {
+ my $self = shift;
- if ($storage->_is_guid_type($data_type)) {
- my $returned = $row->[$select_idx];
+ my @rows = $self->next::method(@_);
- $row->[$select_idx] = substr($returned, 1, 36)
- if substr($returned, 0, 1) eq '{';
- }
- }
- }
+ _normalize_guids(
+ $self->args->[1],
+ $self->{_colinfos} ||= $self->storage->_resolve_column_info($self->args->[0]),
+ $_,
+ $self->storage
+ ) for @rows;
return @rows;
}