X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FMSSQL.pm;h=5f17153fe5f566c6396998c388c31c7044bb5fe1;hb=ff153e241d4990c6332359d942385d11019f0018;hp=8bd0d4595bb396bf867df0c8bb170a5ed0250465;hpb=c07482800ba8221bedd89f854dc56da865f7692f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/MSSQL.pm b/lib/DBIx/Class/Storage/DBI/MSSQL.pm index 8bd0d45..5f17153 100644 --- a/lib/DBIx/Class/Storage/DBI/MSSQL.pm +++ b/lib/DBIx/Class/Storage/DBI/MSSQL.pm @@ -3,7 +3,7 @@ package DBIx::Class::Storage::DBI::MSSQL; use strict; use warnings; -use base qw/DBIx::Class::Storage::DBI::AmbiguousGlob DBIx::Class::Storage::DBI/; +use base qw/DBIx::Class::Storage::DBI/; use mro 'c3'; use List::Util(); @@ -232,24 +232,14 @@ sub build_datetime_parser { sub sqlt_type { 'SQLServer' } -sub _get_mssql_version { - my $self = shift; - - my $data = $self->_get_dbh->selectrow_hashref('xp_msver ProductVersion'); - - if ($data->{Character_Value} =~ /^(\d+)\./) { - return $1; - } else { - $self->throw_exception(q{Your ProductVersion's Character_Value is missing or malformed!}); - } -} - sub sql_maker { my $self = shift; unless ($self->_sql_maker) { unless ($self->{_sql_maker_opts}{limit_dialect}) { - my $version = eval { $self->_get_mssql_version; } || 0; + + my ($version) = $self->_server_info->{dbms_ver} =~ /^(\d+)/; + $version ||= 0; $self->{_sql_maker_opts} = { limit_dialect => ($version >= 9 ? 'RowNumberOver' : 'Top'), @@ -263,6 +253,21 @@ sub sql_maker { return $self->_sql_maker; } +sub _ping { + my $self = shift; + + my $dbh = $self->_dbh or return 0; + + local $dbh->{RaiseError} = 1; + local $dbh->{PrintError} = 0; + + eval { + $dbh->do('select 1'); + }; + + return $@ ? 0 : 1; +} + 1; =head1 NAME @@ -341,7 +346,7 @@ outright disabled for MSSQL. Thus compromise between usability and perfection is the MSSQL-specific L C. It is deliberately not possible to set this on the Storage level, as the user -should inspect (and preferrably regression-test) the return of every such +should inspect (and preferably regression-test) the return of every such ResultSet individually. The example above would work if written like: $rs->search ({}, { @@ -354,7 +359,7 @@ ResultSet individually. The example above would work if written like: If it is possible to rewrite the search() in a way that will avoid the need for this flag - you are urged to do so. If DBIC internals insist that an ordered subselect is necessary for an operation, and you believe there is a -differnt/better way to get the same result - please file a bugreport. +different/better way to get the same result - please file a bugreport. =head1 AUTHOR