File Coverage

blib/lib/DBIx/Class/Storage/DBI/ADO.pm
Criterion Covered Total %
statement 27 41 65.8
branch 0 4 0.0
condition n/a
subroutine 9 14 64.2
pod n/a
total 36 59 61.0


line stmt bran cond sub pod time code
1             package DBIx::Class::Storage::DBI::ADO;
2              
3 2     2   1257 use warnings;
  2         4  
  2         70  
4 2     2   10 use strict;
  2         4  
  2         71  
5              
6 2     2   11 use base 'DBIx::Class::Storage::DBI';
  2         5  
  2         199  
7 2     2   12 use mro 'c3';
  2         5  
  2         18  
8              
9 2     2   64 use Sub::Name;
  2         4  
  2         87  
10 2     2   11 use Try::Tiny;
  2         4  
  2         91  
11 2     2   12 use DBIx::Class::_Util 'sigwarn_silencer';
  2         5  
  2         105  
12 2     2   12 use namespace::clean;
  2         5  
  2         10  
13              
14             =head1 NAME
15              
16             DBIx::Class::Storage::DBI::ADO - Support for L<DBD::ADO>
17              
18             =head1 DESCRIPTION
19              
20             This class provides a mechanism for discovering and loading a sub-class
21             for a specific ADO backend, as well as some workarounds for L<DBD::ADO>. It
22             should be transparent to the user.
23              
24             =cut
25              
26 0     0     sub _rebless { shift->_determine_connector_driver('ADO') }
27              
28             # cleanup some warnings from DBD::ADO
29             # RT#65563, not fixed as of DBD::ADO v2.98
30             sub _dbh_get_info {
31 0     0     my $self = shift;
32              
33 0           local $SIG{__WARN__} = sigwarn_silencer(
34             qr{^Missing argument in sprintf at \S+/ADO/GetInfo\.pm}
35             );
36              
37 0           $self->next::method(@_);
38             }
39              
40             # Monkeypatch out the horrible warnings during global destruction.
41             # A patch to DBD::ADO has been submitted as well, and it was fixed
42             # as of 2.99
43             # https://rt.cpan.org/Ticket/Display.html?id=65563
44             sub _init {
45 0 0   0     unless ($DBD::ADO::__DBIC_MONKEYPATCH_CHECKED__) {
46 0           require DBD::ADO;
47              
48 0 0   0     unless (try { DBD::ADO->VERSION('2.99'); 1 }) {
  0            
  0            
49 2     2   779 no warnings 'redefine';
  2         4  
  2         405  
50 0           my $disconnect = *DBD::ADO::db::disconnect{CODE};
51              
52             *DBD::ADO::db::disconnect = subname 'DBD::ADO::db::disconnect' => sub {
53 0     0     local $SIG{__WARN__} = sigwarn_silencer(
54             qr/Not a Win32::OLE object|uninitialized value/
55             );
56 0           $disconnect->(@_);
57 0           };
58             }
59              
60 0           $DBD::ADO::__DBIC_MONKEYPATCH_CHECKED__ = 1;
61             }
62             }
63              
64             # Here I was just experimenting with ADO cursor types, left in as a comment in
65             # case you want to as well. See the DBD::ADO docs.
66             #sub _prepare_sth {
67             # my ($self, $dbh, $sql) = @_;
68             #
69             # my $sth = $self->disable_sth_caching
70             # ? $dbh->prepare($sql, { CursorType => 'adOpenStatic' })
71             # : $dbh->prepare_cached($sql, { CursorType => 'adOpenStatic' }, 3);
72             #
73             # $self->throw_exception($dbh->errstr) if !$sth;
74             #
75             # $sth;
76             #}
77              
78             =head1 FURTHER QUESTIONS?
79              
80             Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
81              
82             =head1 COPYRIGHT AND LICENSE
83              
84             This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
85             by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
86             redistribute it and/or modify it under the same terms as the
87             L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
88              
89             =cut
90              
91             1;
92              
93             # vim:sts=2 sw=2: