pod coverage for Storage::DBI::ODBC::Microsoft_SQL_Server
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / ODBC / Microsoft_SQL_Server.pm
CommitLineData
c1cac633 1package DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server;
2use strict;
3use warnings;
4
5use base qw/DBIx::Class::Storage::DBI/;
6
7sub _prep_for_execute {
8 my $self = shift;
9 my ($op, $extra_bind, $ident, $args) = @_;
10
11 my ($sql, $bind) = $self->SUPER::_prep_for_execute(@_);
12 $sql .= ';SELECT SCOPE_IDENTITY()' if $op eq 'insert';
13
14 return ($sql, $bind);
15}
16
17sub insert {
18 my ($self, $source, $to_insert) = @_;
19
20 my $bind_attributes = $self->source_bind_attributes($source);
21 my (undef, $sth) = $self->_execute( 'insert' => [], $source, $bind_attributes, $to_insert);
22 $self->{_scope_identity} = $sth->fetchrow_array;
23
24 return $to_insert;
25}
26
27sub last_insert_id { shift->{_scope_identity} }
28
29sub sqlt_type { 'SQLServer' }
30
31sub _sql_maker_opts {
32 my ( $self, $opts ) = @_;
33
34 if ( $opts ) {
35 $self->{_sql_maker_opts} = { %$opts };
36 }
37
38 return { limit_dialect => 'Top', %{$self->{_sql_maker_opts}||{}} };
39}
40
411;
42
43__END__
44
45=head1 NAME
46
47DBIx::Class::Storage::ODBC::Microsoft_SQL_Server - Support specific to
48Microsoft SQL Server over ODBC
49
50=head1 DESCRIPTION
51
52This class implements support specific to Microsoft SQL Server over ODBC,
53including auto-increment primary keys and SQL::Abstract::Limit dialect. It
54is loaded automatically by by DBIx::Class::Storage::DBI::ODBC when it
55detects a MSSQL back-end.
56
57=head1 IMPLEMENTATION NOTES
58
59Microsoft SQL Server supports three methods of retrieving the IDENTITY
60value for inserted row: IDENT_CURRENT, @@IDENTITY, and SCOPE_IDENTITY().
61SCOPE_IDENTITY is used here because it is the safest. However, it must
62be called is the same execute statement, not just the same connection.
63
64So, this implementation appends a SELECT SCOPE_IDENTITY() statement
65onto each INSERT to accommodate that requirement.
66
6f96f99f 67=head1 METHODS
68
69=head2 insert
70
71=head2 last_insert_id
72
73=head2 sqlt_type
c1cac633 74
75=head1 AUTHORS
76
77Marc Mims C<< <marc@questright.com> >>
78
79=head1 LICENSE
80
81You may distribute this code under the same terms as Perl itself.
82
83=cut