-
-
17 May 2022 10:49:29 UTC
- Distribution: DBIx-Class
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Repository
- Issues (121)
- Testers (1086 / 3 / 0)
- Kwalitee
Bus factor: 1- % Coverage
- License: perl_5
- Perl: v5.8.1
- Activity
24 month- Tools
- Download (858.78KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
and 210 contributors-
mst: Matt S Trout (project founder - original idea, architecture and implementation)
-
castaway: Jess Robinson (lions share of the reference documentation and manuals)
-
abraxxa: Alexander Hartmaier
-
acca: Alexander Kuznetsov
-
acme: Leon Brocard
-
aherzog: Adam Herzog
-
Alexander Keusch
-
alexrj: Alessandro Ranellucci
-
alnewkirk: Al Newkirk
-
Altreus: Alastair McGowan-Douglas
-
amiri: Amiri Barksdale
-
amoore: Andrew Moore
-
Andrew Mehta
-
andrewalker: Andre Walker
-
andyg: Andy Grundman
-
ank: Andres Kievsky
-
arc: Aaron Crane
-
arcanez: Justin Hunter
-
ash: Ash Berlin
-
bert: Norbert Csongrádi
-
bfwg: Colin Newell
-
blblack: Brandon L. Black
-
bluefeet: Aran Deltac
-
boghead: Bryan Beeley
-
bphillips: Brian Phillips
-
brd: Brad Davis
-
Brian Kirkbride
-
bricas: Brian Cassidy
-
brunov: Bruno Vecchi
-
caelum: Rafael Kitover
-
caldrin: Maik Hentsche
-
chorny: Alexandr Ciornii
-
cj: C.J. Adams-Collier
-
claco: Christopher H. Laco
-
clkao: CL Kao
- Ctrl-O http://ctrlo.com/
-
da5id: David Jack Olrik
-
dams: Damien Krotkine
-
dandv: Dan Dascalescu
-
dariusj: Darius Jokilehto
-
davewood: David Schmidt
-
daxim: Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯
-
dduncan: Darren Duncan
-
debolaz: Anders Nor Berle
-
dew: Dan Thomas
-
dim0xff: Dmitry Latin
-
dkubb: Dan Kubb
-
dnm: Justin Wheeler
-
dpetrov: Dimitar Petrov
-
Dr^ZigMan: Robert Stone
-
dsteinbrunner: David Steinbrunner
-
duncan_dmg: Duncan Garland
-
dwc: Daniel Westermann-Clark
-
dyfrgi: Michael Leuchtenburg
-
edenc: Eden Cardim
- Eligo http://eligo.co.uk/
-
ether: Karen Etheridge
-
evdb: Edmund von der Burg
-
faxm0dem: Fabien Wernli
-
felliott: Fitz Elliott
-
fgabolde: Fabrice Gabolde
-
freetime: Bill Moseley
-
frew: Arthur Axel "fREW" Schmidt
-
gbjk: Gareth Kirwan
-
geotheve: Georgina Thevenet
-
Getty: Torsten Raudssus
-
goraxe: Gordon Irving
-
gphat: Cory G Watson
- Grant Street Group http://www.grantstreet.com/
-
gregoa: Gregor Herrmann
-
groditi: Guillermo Roditi
-
gshank: Gerda Shank
-
guacamole: Fred Steinberg
-
Haarg: Graham Knop
-
hobbs: Andrew Rodland
-
Ian Wells
-
idn: Ian Norton
-
ilmari: Dagfinn Ilmari Mannsåker
-
ingy: Ingy döt Net
-
initself: Mike Baas
-
ironcamel: Naveed Massjouni
-
jasonmay: Jason May
-
jawnsy: Jonathan Yu
-
jegade: Jens Gassmann
-
jeneric: Eric A. Miller
-
jesper: Jesper Krogh
-
Jesse Sheidlower
-
jgoulah: John Goulah
-
jguenther: Justin Guenther
-
jhannah: Jay Hannah
-
jmac: Jason McIntosh
-
jmmills: Jason M. Mills
-
jnapiorkowski: John Napiorkowski
-
Joe Carlson
-
jon: Jon Schutz
-
Jordan Metzmeier
-
jshirley: J. Shirley
- kaare: Kaare Rasmussen
-
kd: Kieren Diment
-
kentnl: Kent Fredric
-
kkane: Kevin L. Kane
-
konobi: Scott McWhirter
-
lejeunerenard: Sean Zellmer
-
leont: Leon Timmermans
-
littlesavage: Alexey Illarionov
-
lukes: Luke Saunders
-
marcus: Marcus Ramberg
-
mateu: Mateu X. Hunter
-
Matt LeBlanc
-
Matt Sickler
- mattlaw: Matt Lawrence
-
mattp: Matt Phillips
-
mdk: Mark Keating
-
melo: Pedro Melo
-
metaperl: Terrence Brannon
-
michaelr: Michael Reddick
-
milki: Jonathan Chu
-
minty: Murray Walker
-
mithaldu: Christian Walde
-
mjemmeson: Michael Jemmeson
- mna: Maya
-
mo: Moritz Onken
-
moltar: Roman Filippov
-
moritz: Moritz Lenz
-
mrf: Mike Francis
-
mstratman: Mark A. Stratman
-
ned: Neil de Carteret
-
nigel: Nigel Metheringham
-
ningu: David Kamholz
-
Nniuq: Ron "Quinn" Straight"
-
norbi: Norbert Buchmuller
-
nothingmuch: Yuval Kogman
-
nuba: Nuba Princigalli
-
Numa: Dan Sully
-
oalders: Olaf Alders
-
Olly Betts
-
osfameron: Hakim Cassimally
-
ovid: Curtis "Ovid" Poe
-
oyse: Øystein Torget
-
paulm: Paul Makepeace
-
penguin: K J Cheetham
-
perigrin: Chris Prather
-
Peter Siklósi
-
Peter Valdemar Mørch
-
peter: Peter Collingbourne
-
phaylon: Robert Sedlacek
-
plu: Johannes Plunien
-
pmooney: Paul Mooney
-
Possum: Daniel LeWarne
-
pplu: Jose Luis Martinez
-
quicksilver: Jules Bean
-
racke: Stefan Hornburg
-
rafl: Florian Ragwitz
-
rainboxx: Matthias Dietrich
-
rbo: Robert Bohne
-
rbuels: Robert Buels
-
rdj: Ryan D Johnson
-
Relequestual: Ben Hutton
-
renormalist: Steffen Schwigon
-
rjbs: Ricardo Signes
-
Robert Krimen
-
Robert Olson
-
robkinyon: Rob Kinyon
-
Roman Ardern-Corris
-
ruoso: Daniel Ruoso
-
Sadrak: Felix Antonius Wilhelm Ostmann
- sc_: Just Another Perl Hacker
-
schwern: Michael G Schwern
-
Scott R. Godin
-
scotty: Scotty Allen
-
semifor: Marc Mims
-
Simon Elliott
-
SineSwiper: Brendan Byrd
-
skaufman: Samuel Kaufman
-
solomon: Jared Johnson
-
spb: Stephen Bennett
-
Squeeks
-
srezic: Slaven Rezic
-
sszabo: Stephan Szabo
-
Stephen Peters
-
stonecolddevin: Devin Austin
-
talexb: Alex Beamish
-
tamias: Ronald J Kimball
-
TBSliver: Tom Bloor
-
teejay: Aaron Trevena
-
theorbtwo: James Mastros
-
Thomas Kratz
-
timbunce: Tim Bunce
-
tinita: Tina Mueller
- Todd Lipcon
-
Tom Hukins
-
tommy: Tommy Butler
-
tonvoon: Ton Voon
-
triode: Pete Gamache
-
typester: Daisuke Murase
-
uree: Oriol Soriano
-
uwe: Uwe Voelker
-
vanstyn: Henry Van Styn
-
victori: Victor Igumnov
-
wdh: Will Hawes
-
wesm: Wes Malone
-
willert: Sebastian Willert
-
wintermute: Toby Corkindale
-
wreis: Wallace Reis
-
x86-64
-
xenoterracide: Caleb Cushing
-
xmikew: Mike Wisener
-
yrlnry: Mark Jason Dominus
-
zamolxes: Bogdan Lucaciu
-
Zefram: Andrew Main
- Dependencies
- Class::Accessor::Grouped
- Class::C3::Componentised
- Class::Inspector
- Config::Any
- Context::Preserve
- DBI
- Data::Dumper::Concise
- Devel::GlobalDestruction
- Hash::Merge
- MRO::Compat
- Module::Find
- Moo
- Path::Class
- SQL::Abstract::Classic
- Scope::Guard
- Sub::Name
- Text::Balanced
- Try::Tiny
- namespace::clean
- Reverse dependencies
- CPAN Testers List
- Dependency graph
- NAME
- SYNOPSIS
- DESCRIPTION
- METHODS
- connect_info
- on_connect_do
- on_disconnect_do
- dbh_do
- disconnect
- with_deferred_fk_checks
- connected
- dbh
- connect_call_datetime_setup
- connect_call_rebase_sqlmaker
- select
- sql_limit_dialect
- last_insert_id
- _native_data_type
- sqlt_type
- bind_attribute_by_data_type
- is_datatype_numeric
- create_ddl_dir
- deployment_statements
- datetime_parser
- datetime_parser_type
- build_datetime_parser
- is_replicating
- lag_behind_master
- relname_to_table_alias
- USAGE NOTES
- FURTHER QUESTIONS?
- COPYRIGHT AND LICENSE
NAME
DBIx::Class::Storage::DBI - DBI storage handler
SYNOPSIS
my $schema = MySchema->connect('dbi:SQLite:my.db'); $schema->storage->debug(1); my @stuff = $schema->storage->dbh_do( sub { my ($storage, $dbh, @args) = @_; $dbh->do("DROP TABLE authors"); }, @column_list ); $schema->resultset('Book')->search({ written_on => $schema->storage->datetime_parser->format_datetime(DateTime->now) });
DESCRIPTION
This class represents the connection to an RDBMS via DBI. See DBIx::Class::Storage for general information. This pod only documents DBI-specific methods and behaviors.
METHODS
connect_info
This method is normally called by "connection" in DBIx::Class::Schema, which encapsulates its argument list in an arrayref before passing them here.
The argument list may contain:
The same 4-element argument set one would normally pass to "connect" in DBI, optionally followed by extra attributes recognized by DBIx::Class:
$connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ];
A single code reference which returns a connected DBI database handle optionally followed by extra attributes recognized by DBIx::Class:
$connect_info_args = [ sub { DBI->connect (...) }, \%extra_attributes? ];
A single hashref with all the attributes and the dsn/user/password mixed together:
$connect_info_args = [{ dsn => $dsn, user => $user, password => $pass, %dbi_attributes, %extra_attributes, }]; $connect_info_args = [{ dbh_maker => sub { DBI->connect (...) }, %dbi_attributes, %extra_attributes, }];
This is particularly useful for Catalyst based applications, allowing the following config (Config::General style):
<Model::DB> schema_class App::DB <connect_info> dsn dbi:mysql:database=test user testuser password TestPass AutoCommit 1 </connect_info> </Model::DB>
The
dsn
/user
/password
combination can be substituted by thedbh_maker
key whose value is a coderef that returns a connected DBI database handle
Please note that the DBI docs recommend that you always explicitly set
AutoCommit
to either 0 or 1. DBIx::Class further recommends that it be set to 1, and that you perform transactions via our "txn_do" in DBIx::Class::Schema method. DBIx::Class will set it to 1 if you do not do explicitly set it to zero. This is the default for most DBDs. See "DBIx::Class and AutoCommit" for details.DBIx::Class specific connection attributes
In addition to the standard DBI connection attributes, DBIx::Class recognizes the following connection options. These options can be mixed in with your other DBI connection attributes, or placed in a separate hashref (
\%extra_attributes
) as shown above.Every time
connect_info
is invoked, any previous settings for these options will be cleared before setting the new ones, regardless of whether any options are specified in the newconnect_info
.- on_connect_do
-
Specifies things to do immediately after connecting or re-connecting to the database. Its value may contain:
- a scalar
-
This contains one SQL statement to execute.
- an array reference
-
This contains SQL statements to execute in order. Each element contains a string or a code reference that returns a string.
- a code reference
-
This contains some code to execute. Unlike code references within an array reference, its return value is ignored.
- on_disconnect_do
-
Takes arguments in the same form as "on_connect_do" and executes them immediately before disconnecting from the database.
Note, this only runs if you explicitly call "disconnect" on the storage object.
- on_connect_call
-
A more generalized form of "on_connect_do" that calls the specified
connect_call_METHOD
methods in your storage driver.on_connect_do => 'select 1'
is equivalent to:
on_connect_call => [ [ do_sql => 'select 1' ] ]
Its values may contain:
- a scalar
-
Will call the
connect_call_METHOD
method. - a code reference
-
Will execute
$code->($storage)
- an array reference
-
Each value can be a method name or code reference.
- an array of arrays
-
For each array, the first item is taken to be the
connect_call_
method name or code reference, and the rest are parameters to it.
Some predefined storage methods you may use:
- do_sql
-
Executes a SQL string or a code reference that returns a SQL string. This is what "on_connect_do" and "on_disconnect_do" use.
It can take:
- a scalar
-
Will execute the scalar as SQL.
- an arrayref
-
Taken to be arguments to "do" in DBI, the SQL string optionally followed by the attributes hashref and bind values.
- a code reference
-
Will execute
$code->($storage)
and execute the return array refs as above.
- datetime_setup
-
Execute any statements necessary to initialize the database session to return and accept datetime/timestamp values used with DBIx::Class::InflateColumn::DateTime.
Only necessary for some databases, see your specific storage driver for implementation details.
- on_disconnect_call
-
Takes arguments in the same form as "on_connect_call" and executes them immediately before disconnecting from the database.
Calls the
disconnect_call_METHOD
methods as opposed to theconnect_call_METHOD
methods called by "on_connect_call".Note, this only runs if you explicitly call "disconnect" on the storage object.
- disable_sth_caching
-
If set to a true value, this option will disable the caching of statement handles via "prepare_cached" in DBI.
- limit_dialect
-
Sets a specific SQL::Abstract::Limit-style limit dialect, overriding the default "sql_limit_dialect" setting of the storage (if any). For a list of available limit dialects see DBIx::Class::SQLMaker::LimitDialects.
- quote_names
-
When true automatically sets "quote_char" and "name_sep" to the characters appropriate for your particular RDBMS. This option is preferred over specifying "quote_char" directly.
- quote_char
-
Specifies what characters to use to quote table and column names.
quote_char
expects either a single character, in which case is it is placed on either side of the table/column name, or an arrayref of length 2 in which case the table/column name is placed between the elements.For example under MySQL you should use
quote_char => '`'
, and for SQL Server you should usequote_char => [qw/[ ]/]
. - name_sep
-
This parameter is only useful in conjunction with
quote_char
, and is used to specify the character that separates elements (schemas, tables, columns) from each other. If unspecified it defaults to the most commonly used.
. - unsafe
-
This Storage driver normally installs its own
HandleError
, setsRaiseError
andShowErrorStatement
on, and setsPrintError
off on all database handles, including those supplied by a coderef. It does this so that it can have consistent and useful error behavior.If you set this option to a true value, Storage will not do its usual modifications to the database handle's attributes, and instead relies on the settings in your connect_info DBI options (or the values you set in your connection coderef, in the case that you are connecting via coderef).
Note that your custom settings can cause Storage to malfunction, especially if you set a
HandleError
handler that suppresses exceptions and/or disableRaiseError
. - auto_savepoint
-
If this option is true, DBIx::Class will use savepoints when nesting transactions, making it possible to recover from failure in the inner transaction without having to abort all outer transactions.
- cursor_class
-
Use this argument to supply a cursor class other than the default DBIx::Class::Storage::DBI::Cursor.
Some real-life examples of arguments to "connect_info" and "connect" in DBIx::Class::Schema
# Simple SQLite connection ->connect_info([ 'dbi:SQLite:./foo.db' ]); # Connect via subref ->connect_info([ sub { DBI->connect(...) } ]); # Connect via subref in hashref ->connect_info([{ dbh_maker => sub { DBI->connect(...) }, on_connect_do => 'alter session ...', }]); # A bit more complicated ->connect_info( [ 'dbi:Pg:dbname=foo', 'postgres', 'my_pg_password', { AutoCommit => 1 }, { quote_char => q{"} }, ] ); # Equivalent to the previous example ->connect_info( [ 'dbi:Pg:dbname=foo', 'postgres', 'my_pg_password', { AutoCommit => 1, quote_char => q{"}, name_sep => q{.} }, ] ); # Same, but with hashref as argument # See parse_connect_info for explanation ->connect_info( [{ dsn => 'dbi:Pg:dbname=foo', user => 'postgres', password => 'my_pg_password', AutoCommit => 1, quote_char => q{"}, name_sep => q{.}, }] ); # Subref + DBIx::Class-specific connection options ->connect_info( [ sub { DBI->connect(...) }, { quote_char => q{`}, name_sep => q{@}, on_connect_do => ['SET search_path TO myschema,otherschema,public'], disable_sth_caching => 1, }, ] );
on_connect_do
This method is deprecated in favour of setting via "connect_info".
on_disconnect_do
This method is deprecated in favour of setting via "connect_info".
dbh_do
Arguments: ($subref | $method_name), @extra_coderef_args?
Execute the given $subref or $method_name using the new exception-based connection management.
The first two arguments will be the storage object that
dbh_do
was called on and a database handle to use. Any additional arguments will be passed verbatim to the called subref as arguments 2 and onwards.Using this (instead of $self->_dbh or $self->dbh) ensures correct exception handling and reconnection (or failover in future subclasses).
Your subref should have no side-effects outside of the database, as there is the potential for your subref to be partially double-executed if the database connection was stale/dysfunctional.
Example:
my @stuff = $schema->storage->dbh_do( sub { my ($storage, $dbh, @cols) = @_; my $cols = join(q{, }, @cols); $dbh->selectrow_array("SELECT $cols FROM foo"); }, @column_list );
disconnect
Our
disconnect
method also performs a rollback first if the database is not inAutoCommit
mode.with_deferred_fk_checks
Storage specific method to run the code ref with FK checks deferred or in MySQL's case disabled entirely.
connected
Verifies that the current database handle is active and ready to execute an SQL statement (e.g. the connection did not get stale, server is still answering, etc.) This method is used internally by "dbh".
dbh
Returns a
$dbh
- a data base handle of class DBI. The returned handle is guaranteed to be healthy by implicitly calling "connected", and if necessary performing a reconnection before returning. Keep in mind that this is very expensive on some database engines. Consider using "dbh_do" instead.connect_call_datetime_setup
A no-op stub method, provided so that one can always safely supply the connection option
on_connect_call => 'datetime_setup'
This way one does not need to know in advance whether the underlying storage requires any sort of hand-holding when dealing with calendar data.
connect_call_rebase_sqlmaker
This on-connect call takes as a single argument the name of a class to "rebase" the SQLMaker inheritance hierarchy upon. For this to work properly the target class MUST inherit from DBIx::Class::SQLMaker::ClassicExtensions and SQL::Abstract::Classic as shown below.
This infrastructure is provided to aid recent activity around experimental new aproaches to SQL generation within DBIx::Class. You can (and are encouraged to) mix and match old and new within the same codebase as follows:
package DBIx::Class::Awesomer::SQLMaker; # you MUST inherit in this order to get the composition right # you are free to override-without-next::method any part you need use base qw( DBIx::Class::SQLMaker::ClassicExtensions << OPTIONAL::AWESOME::Class::Implementing::ExtraRainbowSauce >> SQL::Abstract::Classic ); << your new code goes here >> ... and then ... my $experimental_schema = $original_schema->connect( sub { $original_schema->storage->dbh }, { # the nested arrayref is important, as per # https://metacpan.org/pod/DBIx::Class::Storage::DBI#on_connect_call on_connect_call => [ [ rebase_sqlmaker => 'DBIx::Class::Awesomer::SQLMaker' ] ], }, );
select
Handle a SQL select statement.
sql_limit_dialect
This is an accessor for the default SQL limit dialect used by a particular storage driver. Can be overridden by supplying an explicit "limit_dialect" to "connect" in DBIx::Class::Schema. For a list of available limit dialects see DBIx::Class::SQLMaker::LimitDialects.
last_insert_id
Return the row id of the last insert.
_native_data_type
This API is EXPERIMENTAL, will almost definitely change in the future, and currently only used by ::AutoCast and ::Sybase::ASE.
The default implementation returns
undef
, implement in your Storage driver if you need this functionality.Should map types from other databases to the native RDBMS type, for example
VARCHAR2
toVARCHAR
.Types with modifiers should map to the underlying data type. For example,
INTEGER AUTO_INCREMENT
should becomeINTEGER
.Composite types should map to the container type, for example
ENUM(foo,bar,baz)
becomesENUM
.sqlt_type
Returns the database driver name.
bind_attribute_by_data_type
Given a datatype from column info, returns a database specific bind attribute for
$dbh->bind_param($val,$attribute)
or nothing if we will let the database planner just handle it.This method is always called after the driver has been determined and a DBI connection has been established. Therefore you can refer to
DBI::$constant
and/orDBD::$driver::$constant
directly, without worrying about loading the correct modules.is_datatype_numeric
Given a datatype from column_info, returns a boolean value indicating if the current RDBMS considers it a numeric value. This controls how "set_column" in DBIx::Class::Row decides whether to mark the column as dirty - when the datatype is deemed numeric a
!=
comparison will be performed instead of the usualeq
.create_ddl_dir
Creates a SQL file based on the Schema, for each of the specified database engines in
\@databases
in the given directory. (note: specify SQL::Translator names, not DBI driver names).Given a previous version number, this will also create a file containing the ALTER TABLE statements to transform the previous schema into the current one. Note that these statements may contain
DROP TABLE
orDROP COLUMN
statements that can potentially destroy data.The file names are created using the
ddl_filename
method below, please override this method in your schema if you would like a different file name format. For the ALTER file, the same format is used, replacing $version in the name with "$preversion-$version".See "METHODS" in SQL::Translator for a list of values for
\%sqlt_args
. The most common value for this would be{ add_drop_table => 1 }
to have the SQL produced include aDROP TABLE
statement for each table created. For quoting purposes supplyquote_identifiers
.If no arguments are passed, then the following default values are assumed:
- databases - ['MySQL', 'SQLite', 'PostgreSQL']
- version - $schema->schema_version
- directory - './'
- preversion - <none>
By default,
\%sqlt_args
will have{ add_drop_table => 1, ignore_constraint_names => 1, ignore_index_names => 1 }
merged with the hash passed in. To disable any of those features, pass in a hashref like the following
{ ignore_constraint_names => 0, # ... other options }
WARNING: You are strongly advised to check all SQL files created, before applying them.
deployment_statements
Returns the statements used by "deploy" in DBIx::Class::Storage and "deploy" in DBIx::Class::Schema.
The SQL::Translator (not DBI) database driver name can be explicitly provided in
$type
, otherwise the result of "sqlt_type" is used as default.$directory
is used to return statements from files in a previously created "create_ddl_dir" directory and is optional. The filenames are constructed from "ddl_filename" in DBIx::Class::Schema, the schema name and the$version
.If no
$directory
is specified then the statements are constructed on the fly using SQL::Translator and$version
is ignored.See "METHODS" in SQL::Translator for a list of values for
$sqlt_args
.datetime_parser
Returns the datetime parser class
datetime_parser_type
Defines the datetime parser class - currently defaults to DateTime::Format::MySQL
build_datetime_parser
is_replicating
A boolean that reports if a particular DBIx::Class::Storage::DBI is set to replicate from a master database. Default is undef, which is the result returned by databases that don't support replication.
lag_behind_master
Returns a number that represents a certain amount of lag behind a master db when a given storage is replicating. The number is database dependent, but starts at zero and increases with the amount of lag. Default in undef
relname_to_table_alias
DBIx::Class uses DBIx::Class::Relationship names as table aliases in queries.
This hook is to allow specific DBIx::Class::Storage drivers to change the way these aliases are named.
The default behavior is
"$relname_$join_count" if $join_count > 1
, otherwise"$relname"
.USAGE NOTES
DBIx::Class and AutoCommit
DBIx::Class can do some wonderful magic with handling exceptions, disconnections, and transactions when you use
AutoCommit => 1
(the default) combined with txn_do for transaction support.If you set
AutoCommit => 0
in your connect info, then you are always in an assumed transaction between commits, and you're telling us you'd like to manage that manually. A lot of the magic protections offered by this module will go away. We can't protect you from exceptions due to database disconnects because we don't know anything about how to restart your transactions. You're on your own for handling all sorts of exceptional cases if you choose theAutoCommit => 0
path, just as you would be with raw DBI.FURTHER QUESTIONS?
Check the list of additional DBIC resources.
COPYRIGHT AND LICENSE
This module is free software copyright by the DBIx::Class (DBIC) authors. You can redistribute it and/or modify it under the same terms as the DBIx::Class library.
Module Install Instructions
To install DBIx::Class, copy and paste the appropriate command in to your terminal.
cpanm DBIx::Class
perl -MCPAN -e shell install DBIx::Class
For more information on module installation, please visit the detailed CPAN module installation guide.