File Coverage

blib/lib/DBIx/Class/Storage/DBI/SQLAnywhere/Cursor.pm
Criterion Covered Total %
statement 12 20 60.0
branch n/a
condition 0 6 0.0
subroutine 4 6 66.6
pod 2 2 100.0
total 18 34 52.9


line stmt bran cond sub pod time code
1             package DBIx::Class::Storage::DBI::SQLAnywhere::Cursor;
2              
3 2     2   2596 use strict;
  2         4  
  2         56  
4 2     2   9 use warnings;
  2         4  
  2         50  
5 2     2   11 use base 'DBIx::Class::Storage::DBI::Cursor';
  2         3  
  2         204  
6 2     2   13 use mro 'c3';
  2         4  
  2         12  
7              
8             =head1 NAME
9              
10             DBIx::Class::Storage::DBI::SQLAnywhere::Cursor - GUID Support for SQL Anywhere
11             over L<DBD::SQLAnywhere>
12              
13             =head1 DESCRIPTION
14              
15             This class is for normalizing GUIDs retrieved from SQL Anywhere via
16             L<DBD::SQLAnywhere>.
17              
18             You probably don't want to be here, see
19             L<DBIx::Class::Storage::DBI::SQLAnywhere> for information on the SQL Anywhere
20             driver.
21              
22             Unfortunately when using L<DBD::SQLAnywhere>, GUIDs come back in binary, the
23             purpose of this class is to transform them to text.
24             L<DBIx::Class::Storage::DBI::SQLAnywhere> sets
25             L<cursor_class|DBIx::Class::Storage::DBI/cursor_class> to this class by default.
26             It is overridable via your
27             L<connect_info|DBIx::Class::Storage::DBI/connect_info>.
28              
29             You can use L<DBIx::Class::Cursor::Cached> safely with this class and not lose
30             the GUID normalizing functionality,
31             L<::Cursor::Cached|DBIx::Class::Cursor::Cached> uses the underlying class data
32             for the inner cursor class.
33              
34             =cut
35              
36             my $unpack_guids = sub {
37             my ($select, $col_infos, $data, $storage) = @_;
38              
39             for my $select_idx (0..$#$select) {
40             next unless (
41             defined $data->[$select_idx]
42             and
43             length($data->[$select_idx]) == 16
44             );
45              
46             my $selected = $select->[$select_idx];
47              
48             my $data_type = $col_infos->{$select->[$select_idx]}{data_type}
49             or next;
50              
51             $data->[$select_idx] = $storage->_uuid_to_str($data->[$select_idx])
52             if $storage->_is_guid_type($data_type);
53             }
54             };
55              
56              
57             sub next {
58 0     0 1   my $self = shift;
59              
60 0           my @row = $self->next::method(@_);
61              
62             $unpack_guids->(
63             $self->args->[1],
64 0   0       $self->{_colinfos} ||= $self->storage->_resolve_column_info($self->args->[0]),
65             \@row,
66             $self->storage
67             );
68              
69 0           return @row;
70             }
71              
72             sub all {
73 0     0 1   my $self = shift;
74              
75 0           my @rows = $self->next::method(@_);
76              
77             $unpack_guids->(
78             $self->args->[1],
79             $self->{_colinfos} ||= $self->storage->_resolve_column_info($self->args->[0]),
80             $_,
81             $self->storage
82 0   0       ) for @rows;
83              
84              
85 0           return @rows;
86             }
87              
88             =head1 FURTHER QUESTIONS?
89              
90             Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
91              
92             =head1 COPYRIGHT AND LICENSE
93              
94             This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
95             by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
96             redistribute it and/or modify it under the same terms as the
97             L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
98              
99             =cut
100              
101             1;
102              
103             # vim:sts=2 sw=2: