better type check for mssql+ado binary null strip
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / ADO / Microsoft_SQL_Server / Cursor.pm
CommitLineData
2edf3352 1package DBIx::Class::Storage::DBI::ADO::Microsoft_SQL_Server::Cursor;
2
3use strict;
4use warnings;
5use base 'DBIx::Class::Storage::DBI::Cursor';
6use mro 'c3';
7use DBIx::Class::Storage::DBI::ADO::CursorUtils qw/_normalize_guids _strip_trailing_binary_nulls/;
8use namespace::clean;
9
10=head1 NAME
11
12DBIx::Class::Storage::DBI::ADO::Microsoft_SQL_Server::Cursor - Remove trailing
13NULLs in binary data and normalize GUIDs for MSSQL over ADO
14
15=head1 DESCRIPTION
16
17This class is for removing trailing C<NULL>s from binary data and removing braces
18from GUIDs retrieved from Microsoft SQL Server over ADO.
19
20You probably don't want to be here, see
21L<DBIx::Class::Storage::DBI::ADO::Microsoft_SQL_Server> for information on the
22Microsoft SQL Server driver for ADO and L<DBIx::Class::Storage::DBI::MSSQL> for
23the Microsoft SQL Server driver base class.
24
25Unfortunately when using L<DBD::ADO>, binary data comes back padded with
26trailing C<NULL>s and GUIDs come back wrapped in braces, the purpose of this
27class is to remove the C<NULL>s and braces.
28L<DBIx::Class::Storage::DBI::ADO::Microsoft_SQL_Server> sets
29L<cursor_class|DBIx::Class::Storage::DBI/cursor_class> to this class by
30default. It is overridable via your
31L<connect_info|DBIx::Class::Storage::DBI/connect_info>.
32
33You can use L<DBIx::Class::Cursor::Cached> safely with this class and not lose
34the binary data normalizing functionality,
35L<::Cursor::Cached|DBIx::Class::Cursor::Cached> uses the underlying class data
36for the inner cursor class.
37
38=cut
39
40sub _dbh_next {
41 my ($storage, $dbh, $self) = @_;
42
43 my $next = $self->next::can;
44
45 my @row = $next->(@_);
46
47 my $col_infos = $storage->_resolve_column_info($self->args->[0]);
48
49 my $select = $self->args->[1];
50
51 _normalize_guids($select, $col_infos, \@row, $storage);
5efba7fc 52 _strip_trailing_binary_nulls($select, $col_infos, \@row, $storage);
2edf3352 53
54 return @row;
55}
56
57sub _dbh_all {
58 my ($storage, $dbh, $self) = @_;
59
60 my $next = $self->next::can;
61
62 my @rows = $next->(@_);
63
64 my $col_infos = $storage->_resolve_column_info($self->args->[0]);
65
66 my $select = $self->args->[1];
67
68 for (@rows) {
69 _normalize_guids($select, $col_infos, $_, $storage);
5efba7fc 70 _strip_trailing_binary_nulls($select, $col_infos, $_, $storage);
2edf3352 71 }
72
73 return @rows;
74}
75
761;
77
78=head1 AUTHOR
79
80See L<DBIx::Class/AUTHOR> and L<DBIx::Class/CONTRIBUTORS>.
81
82=head1 LICENSE
83
84You may distribute this code under the same terms as Perl itself.
85
86=cut
87
88# vim:sts=2 sw=2: