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   1175 use warnings;
  2         4  
  2         59  
4 2     2   7 use strict;
  2         4  
  2         39  
5              
6 2     2   8 use base 'DBIx::Class::Storage::DBI';
  2         3  
  2         168  
7 2     2   11 use mro 'c3';
  2         3  
  2         13  
8              
9 2     2   61 use Sub::Name;
  2         3  
  2         100  
10 2     2   9 use Try::Tiny;
  2         4  
  2         109  
11 2     2   9 use DBIx::Class::_Util 'sigwarn_silencer';
  2         3  
  2         97  
12 2     2   9 use namespace::clean;
  2         2  
  2         12  
13              
14             =head1 NAME
15              
16             DBIx::Class::Storage::DBI::ADO - Support for L
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. 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   778 no warnings 'redefine';
  2         4  
  2         450  
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.
81              
82             =head1 COPYRIGHT AND LICENSE
83              
84             This module is free software L
85             by the L. You can
86             redistribute it and/or modify it under the same terms as the
87             L.
88              
89             =cut
90              
91             1;
92              
93             # vim:sts=2 sw=2: