bf23f6d8d144e7976c7593a97cd8b17b4fd81f0a
[kivitendo-erp.git] / SL / Auth / ColumnInformation.pm
1 package SL::Auth::ColumnInformation;
2
3 use strict;
4
5 use Carp;
6 use Scalar::Util qw(weaken);
7
8 use SL::DBUtils;
9
10 sub new {
11   my ($class, %params) = @_;
12
13   my $self = bless {}, $class;
14
15   $self->{auth} = $params{auth} || croak "Missing 'auth'";
16   weaken $self->{auth};
17
18   $self->_fetch if $self->{auth}->dbconnect(1);
19
20   return $self;
21 }
22
23 sub _fetch {
24   my ($self) = @_;
25
26   return $self if $self->{info};
27
28   $self->{info} = {};
29
30   foreach my $table (qw(session session_content)) {
31     my $query = <<SQL;
32       SELECT a.attname, format_type(a.atttypid, a.atttypmod) AS format_type, d.adsrc, a.attnotnull
33       FROM pg_attribute a
34       LEFT JOIN pg_attrdef d ON (a.attrelid = d.adrelid) AND (a.attnum = d.adnum)
35       WHERE (a.attrelid = 'auth.${table}'::regclass)
36         AND (a.attnum > 0)
37         AND NOT a.attisdropped
38       ORDER BY a.attnum
39 SQL
40
41     $self->{info}->{$table} = { selectall_as_map($::form, $self->{auth}->dbconnect, $query, 'attname', [ qw(format_type adsrc attnotnull) ]) };
42   }
43
44   return $self;
45 }
46
47 sub info {
48   my ($self) = @_;
49   return $self->_fetch->{info};
50 }
51
52 sub has {
53   my ($self, $column, $table) = @_;
54   return $self->info->{$table || 'session_content'}->{$column};
55 }
56
57 1;