Centralize remaining uses of Sub::Name within _Util
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / IdentityInsert.pm
CommitLineData
fabbd5cc 1package DBIx::Class::Storage::DBI::IdentityInsert;
2
3use strict;
4use warnings;
5use base 'DBIx::Class::Storage::DBI';
6use mro 'c3';
7
fabbd5cc 8=head1 NAME
9
10DBIx::Class::Storage::DBI::IdentityInsert - Storage Component for Sybase ASE and
11MSSQL for Identity Inserts / Updates
12
13=head1 DESCRIPTION
14
15This is a storage component for Sybase ASE
16(L<DBIx::Class::Storage::DBI::Sybase::ASE>) and Microsoft SQL Server
17(L<DBIx::Class::Storage::DBI::MSSQL>) to support identity inserts, that is
18inserts of explicit values into C<IDENTITY> columns.
19
20This is done by wrapping C<INSERT> operations in a pair of table identity
21toggles like:
22
23 SET IDENTITY_INSERT $table ON
24 $sql
25 SET IDENTITY_INSERT $table OFF
26
27=cut
28
29# SET IDENTITY_X only works as part of a statement scope. We can not
4a0eed52 30# $dbh->do the $sql and the wrapping set()s individually. Hence the
fabbd5cc 31# sql mangling. The newlines are important.
32sub _prep_for_execute {
33 my $self = shift;
34
35 return $self->next::method(@_) unless $self->_autoinc_supplied_for_op;
36
37 my ($op, $ident) = @_;
38
39 my $table = $self->sql_maker->_quote($ident->name);
40 $op = uc $op;
41
4a5fd481 42 DBIx::Class::Exception->throw(
43 "Unexpected _autoinc_supplied_for_op flag in callstack - please file a bug including the stacktrace ( @{[ DBIx::Class::_ENV_::HELP_URL() ]} ):\n\n STACKTRACE STARTS",
44 'stacktrace'
45 ) if $op ne 'INSERT' and $op ne 'UPDATE';
46
fabbd5cc 47 my ($sql, $bind) = $self->next::method(@_);
48
49 return (<<EOS, $bind);
50SET IDENTITY_$op $table ON
51$sql
52SET IDENTITY_$op $table OFF
53EOS
54
55}
56
a2bd3796 57=head1 FURTHER QUESTIONS?
fabbd5cc 58
a2bd3796 59Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
fabbd5cc 60
a2bd3796 61=head1 COPYRIGHT AND LICENSE
fabbd5cc 62
a2bd3796 63This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
64by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
65redistribute it and/or modify it under the same terms as the
66L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
fabbd5cc 67
68=cut
69
701;