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