Merge fix
[kivitendo-erp.git] / SL / DB.pm
1 package SL::DB;
2
3 use strict;
4
5 use Carp;
6 use Data::Dumper;
7 use English qw(-no_match_vars);
8 use Rose::DB;
9
10 use base qw(Rose::DB);
11
12 __PACKAGE__->use_private_registry;
13
14 my (%_db_registered, %_initial_sql_executed);
15
16 sub create {
17   my $domain = shift || SL::DB->default_domain;
18   my $type   = shift || SL::DB->default_type;
19
20   if ($type eq 'LXOFFICE') {
21     $domain = 'LXEMPTY' unless %::myconfig && $::myconfig{dbname};
22     $type   = join $SUBSCRIPT_SEPARATOR, map { $::myconfig{$_} } qw(dbdriver dbname dbhost dbport dbuser dbpasswd) if %::myconfig;
23   }
24
25   _register_db($domain, $type);
26
27   my $db = __PACKAGE__->new_or_cached(domain => $domain, type => $type);
28
29   return $db;
30 }
31
32 sub _register_db {
33   my $domain = shift;
34   my $type   = shift;
35
36   my $idx    = "${domain}::${type}";
37   return if $_db_registered{$idx};
38
39   $_db_registered{$idx} = 1;
40
41   __PACKAGE__->register_db(domain          => $domain,
42                            type            => $type,
43                            driver          => $::myconfig{dbdriver} || 'Pg',
44                            database        => $::myconfig{dbname},
45                            host            => $::myconfig{dbhost},
46                            port            => $::myconfig{dbport} || 5432,
47                            username        => $::myconfig{dbuser},
48                            password        => $::myconfig{dbpasswd},
49                            connect_options => { pg_enable_utf8 => $::locale && $::locale->is_utf8,
50                                               },
51                           );
52 }
53
54 1;