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: |