X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FODBC%2FMicrosoft_SQL_Server.pm;h=911ca48d353063313c119e31ec3c6afa584219a5;hb=23b2c49b17262ecf84307c9ffba88ed38ecc90cb;hp=1b5fba2c31d43367ef8a413fc4616bec0509f201;hpb=796acb6af56d6943d694a356b7afe1909c620aca;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm b/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm index 1b5fba2..911ca48 100644 --- a/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm +++ b/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm @@ -24,7 +24,7 @@ to Microsoft SQL Server over ODBC =head1 DESCRIPTION This class implements support specific to Microsoft SQL Server over ODBC. It is -loaded automatically by by DBIx::Class::Storage::DBI::ODBC when it detects a +loaded automatically by DBIx::Class::Storage::DBI::ODBC when it detects a MSSQL back-end. Most of the functionality is provided from the superclass @@ -36,12 +36,13 @@ L. sudo aptitude install tdsodbc libdbd-odbc-perl unixodbc -In case it is not already there put the following in C: +In case it is not already there put the following (adjust for non-64bit arch) in +C: [FreeTDS] Description = FreeTDS - Driver = /usr/lib/odbc/libtdsodbc.so - Setup = /usr/lib/odbc/libtdsS.so + Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so + Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so UsageCount = 1 Set your C<$dsn> in L as follows: @@ -78,6 +79,10 @@ The following options are alternative ways to enable concurrent executing statement support. Each has its own advantages and drawbacks and works on different platforms. Read each section carefully. +For more details about using MAS in MSSQL over DBD::ODBC see this excellent +document provided by EasySoft: +L. + In order of preference, they are: =over 8 @@ -128,9 +133,8 @@ sub connect_call_use_mars { if ($dsn !~ /MARS_Connection=/) { if ($self->_using_freetds) { - my $v = $self->_using_freetds_version; - $self->throw_exception("FreeTDS 0.91 or later required for MARS support, you have $v") - if $v < 0.91; + $self->throw_exception('FreeTDS does not support MARS at the time of ' + .'writing.'); } if (exists $self->_server_info->{normalized_dbms_version} && @@ -139,7 +143,7 @@ sub connect_call_use_mars { } if (my ($data_source) = $dsn =~ /^dbi:ODBC:([\w-]+)\z/i) { # prefix with DSN - warn "Bare DSN in ODBC connect string, rewriting as 'dsn=$data_source'" + carp_unique "Bare DSN in ODBC connect string, rewriting as 'dsn=$data_source'" ." for MARS\n"; $dsn = "dbi:ODBC:dsn=$data_source"; } @@ -212,6 +216,8 @@ sub connect_call_use_dynamic_cursors { sub _run_connection_actions { my $self = shift; + $self->next::method (@_); + # keep the dynamic_cursors_support and driver-state in sync # on every reconnect my $use_dyncursors = ($self->_dbic_connect_attributes->{odbc_cursortype} || 0) > 1; @@ -239,16 +245,17 @@ sub _run_connection_actions { $self->_using_dynamic_cursors(1); $self->_identity_method('@@identity'); - $self->_no_scope_identity_query($self->_using_freetds); } else { $self->_using_dynamic_cursors(0); $self->_identity_method(undef); - $self->_no_scope_identity_query(undef); } } - $self->next::method (@_); + $self->_no_scope_identity_query($self->_using_dynamic_cursors + ? $self->_using_freetds + : undef + ); # freetds is too damn broken, some fixups if ($self->_using_freetds) { @@ -265,7 +272,7 @@ sub _run_connection_actions { # FreeTDS is too broken wrt execute_for_fetch batching # just disable it outright until things quiet down - $self->_get_dbh->{odbc_disable_array_operations} = 1; + $self->_disable_odbc_array_ops; } }