X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDBConnect.pm;h=9fcf7f412a7081475a3a37d6f8a1f1c30ba9c400;hb=f3324b5ad66924333bf2a313974f6d4d21932707;hp=aeb8719dac1340cc6c8f97e055df77cc975be21b;hpb=0e0dfd4f1176f309af3387cf45906d9026d2d15e;p=kivitendo-erp.git diff --git a/SL/DBConnect.pm b/SL/DBConnect.pm index aeb8719da..9fcf7f412 100644 --- a/SL/DBConnect.pm +++ b/SL/DBConnect.pm @@ -4,10 +4,18 @@ use strict; use DBI; use SL::DB; +use SL::DBConnect::Cache; -sub connect { +my %dateformat_to_datestyle = ( + 'yy-mm-dd' => 'ISO', + 'yyyy-mm-dd' => 'ISO', + 'mm/dd/yy' => 'SQL, US', + 'dd/mm/yy' => 'SQL, EUROPEAN', + 'dd.mm.yy' => 'GERMAN' +); + +sub _connect { my ($self, @args) = @_; - @args = $self->get_connect_args if !@args; return DBI->connect(@args) unless $::lx_office_conf{debug} && $::lx_office_conf{debug}->{dbix_log4perl}; @@ -22,6 +30,41 @@ sub connect { return DBIx::Log4perl->connect(@args); } +sub connect { + my ($self, @args) = @_; + @args = $self->get_connect_args if !@args; + my $initial_sql = $self->get_initial_sql; + + if (my $cached_dbh = SL::DBConnect::Cache->get(@args, $initial_sql)) { + return $cached_dbh; + } + + my $dbh = $self->_connect(@args); + return undef if !$dbh; + + if ($initial_sql) { + $dbh->do($initial_sql); + $dbh->commit if !$dbh->{AutoCommit}; + } + SL::DBConnect::Cache->store($dbh, @args, $initial_sql); + + return $dbh; +} + +sub get_datestyle { + my ($self, $dateformat) = @_; + return $dateformat_to_datestyle{ $dateformat || $::myconfig{dateformat} // '' }; +} + +sub get_initial_sql { + my ($self) = @_; + + return undef if !%::myconfig || !$::myconfig{dateformat}; + + my $datestyle = $self->get_datestyle; + return $datestyle ? qq|SET DateStyle to '${datestyle}'| : ''; +} + sub get_connect_args { my ($self, @args) = @_; my ($domain, $type) = SL::DB::_register_db(SL::DB->default_domain, 'KIVITENDO'); @@ -38,7 +81,7 @@ sub get_connect_args { sub get_options { my $self = shift; my $options = { - pg_enable_utf8 => $::locale->is_utf8, + pg_enable_utf8 => 1, @_ }; @@ -76,7 +119,7 @@ optionally routing through DBIx::Log4perl Connects to the database. If the configuration parameter C is set then the call is made through -L. Otherwise L is called directly. +L. Otherwise L is called directly. In each case C<@dbi_args> is passed through as-is. @@ -97,6 +140,19 @@ C<%options> are optional database options like C (fourth parameter to L). They're merged with default settings by filtering them through L/get_options>. +=item C + +Returns the appropriate value for the C SQL call +depending on C<$dateformat> (e.g. C if C<$dateformat> +equals C). If C<$dateformat> is not given then it defaults +to C<$::myconfig{dateformat}>. + +=item C + +Returns SQL commands that should be executed right after a connection +has been established. This is usually the call to configure the +C format used by the database. + =item C Returns a hash reference of database options (fourth parameter to