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=b2db13f5facb085c6dfd56b1162718ca91de2d70;hb=6298a324307439b76419d0f5db453b0d10f10517;hp=108b8cf99db73ad31fd91f7b30cd6802f0bf83ad;hpb=c35154363b56ff97ee04888f1b6ac762f2d7468b;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 108b8cf..b2db13f 100644 --- a/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm +++ b/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm @@ -2,96 +2,187 @@ package DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server; use strict; use warnings; -use base qw/DBIx::Class::Storage::DBI/; +use base qw/DBIx::Class::Storage::DBI::MSSQL/; +use mro 'c3'; +use Scalar::Util 'reftype'; +use Try::Tiny; +use namespace::clean; -sub _prep_for_execute { - my $self = shift; - my ($op, $extra_bind, $ident, $args) = @_; +__PACKAGE__->mk_group_accessors(simple => qw/ + _using_dynamic_cursors +/); - my ($sql, $bind) = $self->next::method (@_); - $sql .= ';SELECT SCOPE_IDENTITY()' if $op eq 'insert'; +=head1 NAME - return ($sql, $bind); -} +DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server - Support specific +to Microsoft SQL Server over ODBC -sub _execute { - my $self = shift; - my ($op) = @_; +=head1 DESCRIPTION - my ($rv, $sth, @bind) = $self->dbh_do($self->can('_dbh_execute'), @_); - if ($op eq 'insert') { - $self->{_scope_identity} = $sth->fetchrow_array; - $sth->finish; - } +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 +MSSQL back-end. - return wantarray ? ($rv, $sth, @bind) : $rv; -} +Most of the functionality is provided from the superclass +L. + +=head1 MULTIPLE ACTIVE STATEMENTS + +The following options are alternative ways to enable concurrent executing +statement support. Each has its own advantages and drawbacks. + +=head2 connect_call_use_dynamic_cursors + +Use as: + + on_connect_call => 'use_dynamic_cursors' -sub last_insert_id { shift->{_scope_identity} } +in your L as one way to enable multiple +concurrent statements. -sub sqlt_type { 'SQLServer' } +Will add C<< odbc_cursortype => 2 >> to your DBI connection attributes. See +L for more information. -sub _sql_maker_opts { - my ( $self, $opts ) = @_; +Alternatively, you can add it yourself and dynamic cursor support will be +automatically enabled. - if ( $opts ) { - $self->{_sql_maker_opts} = { %$opts }; - } +If you're using FreeTDS, C must be set to at least C<8.0>. - return { limit_dialect => 'Top', %{$self->{_sql_maker_opts}||{}} }; +This will not work with CODE ref connect_info's. + +B this will break C, and C