64b600dd15bc5a5d4b51833ac653caea5270419e
[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   return $self;
19 }
20
21 sub _fetch {
22   my ($self) = @_;
23
24   return $self if $self->{info};
25
26   $self->{info} = {};
27
28   foreach my $table (qw(session session_content)) {
29     my $query = <<SQL;
30       SELECT a.attname, format_type(a.atttypid, a.atttypmod) AS format_type, d.adsrc, a.attnotnull
31       FROM pg_attribute a
32       LEFT JOIN pg_attrdef d ON (a.attrelid = d.adrelid) AND (a.attnum = d.adnum)
33       WHERE (a.attrelid = 'auth.${table}'::regclass)
34         AND (a.attnum > 0)
35         AND NOT a.attisdropped
36       ORDER BY a.attnum
37 SQL
38
39     $self->{info}->{$table} = { selectall_as_map($::form, $self->{auth}->dbconnect, $query, 'attname', [ qw(format_type adsrc attnotnull) ]) };
40   }
41
42   return $self;
43 }
44
45 sub info {
46   my ($self) = @_;
47   return $self->_fetch->{info};
48 }
49
50 sub has {
51   my ($self, $column, $table) = @_;
52   return $self->info->{$table || 'session_content'}->{$column};
53 }
54
55 1;