package LIMS::Model::Roles::DBIxSimple; use Moose::Role; use DateTime::Format::MySQL; use LIMS::Local::DBIxSimple; use Data::Dumper; has params => ( is => 'rw', isa => 'HashRef', default => sub { {} } ); has constraints => ( is => 'ro', isa => 'ArrayRef[Str]', traits => ['Array'], default => sub { [] }, handles => { all_constraints => 'elements', # array accessor add_constraint => 'push', }, ); has bind_vars => ( is => 'ro', isa => 'ArrayRef[Str]', traits => ['Array'], default => sub { [] }, handles => { add_bind_vars => 'push', all_bind_vars => 'elements', }, ); has constraint_title => ( is => 'rw', isa => 'Str' ); # for chart & template titles has lims_dbix => ( is => 'ro', isa => 'DBIx::Simple', lazy_build => 1 ); # requires 'lims_dbix'; # LIMS::Model::Base method sub get_cols { my ($self, $table) = @_; my $dbh = $self->lims_dbix; my $meta = $self->get_meta($table); # warn Dumper $meta; my @cols = keys %$meta; # warn Dumper \@cols; return \@cols; } sub get_meta { my ($self, $table) = @_; my $dbh = $self->lims_dbix; my $t = $dbh->query("show columns from $table")->hashes; # warn Dumper $t; my %meta = map { $_->{field} => $_ } @$t; # warn Dumper \%meta; return \%meta; } sub get_enum_opts { my ($self, $table, $col) = @_; my $meta = $self->get_meta($table); my $col_type = $meta->{$col}->{type}; my ($enum) = $col_type =~ /enum\((.*)\)/; # warn $enum; my @opts = sort grep { $_ =~ s/\'//g } split ',', $enum; # warn Dumper \@opts; return \@opts; } sub inflate_mysql_date_to_datetime { my $self = shift; my $date = shift; return DateTime::Format::MySQL->parse_date($date); } # plural of above: sub inflate_mysql_dates_to_datetime { my $self = shift; my $data = shift; # hashref my $cols = shift; # array(ref) of cols to inflate map { $data->{$_} = DateTime::Format::MySQL->parse_date($data->{$_}); } grep $data->{$_}, @$cols; } sub inflate_mysql_timestamp_to_datetime { my $self = shift; my $data = shift; # hashref my $cols = shift; # array(ref) of cols to inflate map { $data->{$_} = DateTime::Format::MySQL->parse_datetime($data->{$_}); } grep $data->{$_}, @$cols; } #------------------------------------------------------------------------------- sub _build_lims_dbix { my $self = shift; my $dbh = $self->lims_db->dbh; my $dbix = LIMS::Local::DBIxSimple->new($dbh); return $dbix; } 1;