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   1931 use strict;
  2         4  
  2         62  
4 2     2   9 use warnings;
  2         2  
  2         65  
5 2     2   10 use base 'DBIx::Class::Storage::DBI::Cursor';
  2         2  
  2         235  
6 2     2   10 use mro 'c3';
  2         5  
  2         16  
7              
8             =head1 NAME
9              
10             DBIx::Class::Storage::DBI::SQLAnywhere::Cursor - GUID Support for SQL Anywhere
11             over L
12              
13             =head1 DESCRIPTION
14              
15             This class is for normalizing GUIDs retrieved from SQL Anywhere via
16             L.
17              
18             You probably don't want to be here, see
19             L for information on the SQL Anywhere
20             driver.
21              
22             Unfortunately when using L, GUIDs come back in binary, the
23             purpose of this class is to transform them to text.
24             L sets
25             L to this class by default.
26             It is overridable via your
27             L.
28              
29             You can use L 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.
91              
92             =head1 COPYRIGHT AND LICENSE
93              
94             This module is free software L
95             by the L. You can
96             redistribute it and/or modify it under the same terms as the
97             L.
98              
99             =cut
100              
101             1;
102              
103             # vim:sts=2 sw=2: