refactor part 2
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Sybase / Microsoft_SQL_Server.pm
1 package DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server;
2
3 use strict;
4 use warnings;
5
6 use base qw/
7   DBIx::Class::Storage::DBI::Sybase
8   DBIx::Class::Storage::DBI::MSSQL
9 /;
10 use mro 'c3';
11
12 sub _rebless {
13   my $self = shift;
14   my $dbh  = $self->_get_dbh;
15
16   if (not $self->_typeless_placeholders_supported) {
17     bless $self,
18       'DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::NoBindVars';
19     $self->_rebless;
20   }
21 }
22
23 sub _run_connection_actions {
24   my $self = shift;
25
26   # LongReadLen doesn't work with MSSQL through DBD::Sybase, and the default is
27   # huge on some versions of SQL server and can cause memory problems, so we
28   # fix it up here (see ::DBI::Sybase.pm)
29   $self->set_textsize;
30
31   $self->next::method(@_);
32 }
33
34 sub _dbh_begin_work {
35   my $self = shift;
36
37   $self->_get_dbh->do('BEGIN TRAN');
38 }
39
40 sub _dbh_commit {
41   my $self = shift;
42   my $dbh  = $self->_dbh
43     or $self->throw_exception('cannot COMMIT on a disconnected handle');
44   $dbh->do('COMMIT');
45 }
46
47 sub _dbh_rollback {
48   my $self = shift;
49   my $dbh  = $self->_dbh
50     or $self->throw_exception('cannot ROLLBACK on a disconnected handle');
51   $dbh->do('ROLLBACK');
52 }
53
54 1;
55
56 =head1 NAME
57
58 DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server - Support for Microsoft
59 SQL Server via DBD::Sybase
60
61 =head1 SYNOPSIS
62
63 This subclass supports MSSQL server connections via L<DBD::Sybase>.
64
65 =head1 DESCRIPTION
66
67 This driver tries to determine whether your version of L<DBD::Sybase> and
68 supporting libraries (usually FreeTDS) support using placeholders, if not the
69 storage will be reblessed to
70 L<DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::NoBindVars>.
71
72 The MSSQL specific functionality is provided by
73 L<DBIx::Class::Storage::DBI::MSSQL>.
74
75 =head1 AUTHOR
76
77 See L<DBIx::Class/CONTRIBUTORS>.
78
79 =head1 LICENSE
80
81 You may distribute this code under the same terms as Perl itself.
82
83 =cut