Commit | Line | Data |
2a57124d |
1 | package DBIx::Class::Storage::DBI::ODBC; |
2 | use strict; |
3 | use warnings; |
2a57124d |
4 | use base qw/DBIx::Class::Storage::DBI/; |
2ad62d97 |
5 | use mro 'c3'; |
2a57124d |
6 | |
b1dbf716 |
7 | use DBIx::Class::_Util 'modver_gt_or_eq'; |
8 | use namespace::clean; |
9 | |
75d3bdb2 |
10 | sub _rebless { shift->_determine_connector_driver('ODBC') } |
52b420dd |
11 | |
75d3bdb2 |
12 | # Whether or not we are connecting via the freetds ODBC driver |
aca3b4c3 |
13 | sub _using_freetds { |
14 | my $self = shift; |
15 | |
16 | my $dsn = $self->_dbi_connect_info->[0]; |
17 | |
18 | return 1 if ( |
19 | ( (! ref $dsn) and $dsn =~ /driver=FreeTDS/i) |
20 | or |
21 | ( ($self->_dbh_get_info('SQL_DRIVER_NAME')||'') =~ /tdsodbc/i ) |
22 | ); |
23 | |
24 | return 0; |
25 | } |
26 | |
27 | # Either returns the FreeTDS version via which we are connecting, 0 if can't |
28 | # be determined, or undef otherwise |
29 | sub _using_freetds_version { |
30 | my $self = shift; |
31 | return undef unless $self->_using_freetds; |
32 | return $self->_dbh_get_info('SQL_DRIVER_VER') || 0; |
33 | } |
34 | |
11f7049f |
35 | sub _disable_odbc_array_ops { |
36 | my $self = shift; |
37 | my $dbh = $self->_get_dbh; |
38 | |
b1dbf716 |
39 | $DBD::ODBC::__DBIC_DISABLE_ARRAY_OPS_VIA__ ||= [ do { |
40 | if( modver_gt_or_eq('DBD::ODBC', '1.35_01') ) { |
41 | odbc_array_operations => 0; |
42 | } |
43 | elsif( modver_gt_or_eq('DBD::ODBC', '1.33_01') ) { |
44 | odbc_disable_array_operations => 1; |
45 | } |
46 | }]; |
47 | |
48 | if (my ($k, $v) = @$DBD::ODBC::__DBIC_DISABLE_ARRAY_OPS_VIA__) { |
49 | $dbh->{$k} = $v; |
11f7049f |
50 | } |
51 | } |
52 | |
2a57124d |
53 | =head1 NAME |
54 | |
55 | DBIx::Class::Storage::DBI::ODBC - Base class for ODBC drivers |
56 | |
2a57124d |
57 | =head1 DESCRIPTION |
58 | |
59 | This class simply provides a mechanism for discovering and loading a sub-class |
60 | for a specific ODBC backend. It should be transparent to the user. |
61 | |
a2bd3796 |
62 | =head1 FURTHER QUESTIONS? |
2a57124d |
63 | |
a2bd3796 |
64 | Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>. |
2a57124d |
65 | |
a2bd3796 |
66 | =head1 COPYRIGHT AND LICENSE |
2a57124d |
67 | |
a2bd3796 |
68 | This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE> |
69 | by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can |
70 | redistribute it and/or modify it under the same terms as the |
71 | L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>. |
2a57124d |
72 | |
73 | =cut |
a2bd3796 |
74 | |
75 | 1; |
76 | |
ab17c175 |
77 | # vim:sts=2 sw=2: |