techcode has asked for the wisdom of the Perl Monks concerning the following question:
Don't know if this is right place for posting this - so you might consider moving it ...
This is some module I'm working on. It's sort of DB abstraction - it (dis)connects and generates insert/update SQL for you. No fancy things - used an older version of it in few web based projects to speed up work a little bit as I mostly need simple SQL insert/update queries for those.
I would appreciate if anybody would comment on it. How could I improve it - what am I doing good/wrong and why ... guess I will improve my Perl skills along the way :)
package DBIx::Handy; use strict; use DBI; sub new { my $class = shift; my %config = @_; my $self = {'_CONFIG' => \%config}; bless ($self,$class); return $self; } sub connect { my $self = shift; # Configs my $c = $self->{_CONFIG}; unless (defined $self->{_DBH}){ $self->{_DBH} = DBI->connect('dbi:' . $c->{driver} . ':database=' . $c->{database} . ';host=' . $c->{host}, $c->{username}, $c->{password}, {'RaiseError' => 1}) or die "Could not connect to + database. Error message: $!"; } return $self->{_DBH}; } sub disconnect { my $self = shift; $self->{_DBH}->disconnect() if (defined $self->{_DBH}); # If it fails, it's already disconnect ... return 1; } sub prepare { my $self = shift; my $sql = shift; $self->connect() if not defined($self->{_DBH}); $self->{_STH} = $self->{_DBH}->prepare($sql); return $self->{_STH}; } sub execute { my $self = shift; my %params = @_; $self->prepare($params{sql}); $self->{_STH}->execute(@{$params{data}}); if(defined $params{method}){ my $method = $params{method}; #if( @{ $params{method_params} } ){ # return $self->{_STH}->$method( @{ $params{method_params} } ); #} else { # return $self->{_STH}->$method(); #} return $self->{_STH}->$method( @{ $params{method_params} } ); } else { return $self->{_STH}; } } sub insert { my $self = shift; my %params = @_; my @fields = $self->_GET_FIELDS($params{table}); my $data = $params{data}; my $sql = 'INSERT INTO ' . $params{table} . ' ('; my ($sql_part1, $sql_part2, @data); foreach (@fields){ if(defined($data->{$_}) && (length($data->{$_}) >= 1) && ($data->{ +$_} ne '')){ $sql_part1 .= "$_,"; $sql_part2 .= '?,'; push (@data,$data->{$_}); } } chop($sql_part1); chop($sql_part2); # to remove last , $sql_part1 .= ')'; $sql_part2 .= ')'; $sql .= $sql_part1 . ' VALUES (' . $sql_part2; return $self->DB_execute(sql => $sql, data => \@data,); } sub update { my $self = shift; my %params = @_; my @fields = $self->_GET_FIELDS($params{table}); my $data = $params{data}; my $sql = 'UPDATE ' . $params{table} . ' SET '; my @data; foreach (@fields){ if(defined($data->{$_}) && (length($data->{$_}) >= 1) && ($data->{$_} ne '') && ($_ ne $params{id_field}) ){ $sql .= $_ . ' = ?,'; push @data,$data->{$_}; } } chop($sql); # to remove last , $sql .= ' WHERE ' . $params{id_field} . ' = ?'; # where id_field = + id_value push @data, $data->{$params{id_field}}; return $self->DB_execute(sql => $sql, data => \@data,); } sub _GET_FIELDS { my $self = shift; my $table = shift; my $results = $self->execute(sql => 'SHOW COLUMNS FROM ' . $table +, method_params => 'Field'); return(keys %{$results}); } 1;
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Comments on my code, advices how to improve it.
by davidrw (Prior) on Aug 30, 2005 at 16:25 UTC | |
Re: Comments on my code, advices how to improve it.
by jZed (Prior) on Aug 30, 2005 at 16:33 UTC | |
Re: Comments on my code, advices how to improve it.
by jdhedden (Deacon) on Aug 30, 2005 at 16:34 UTC | |
Re: Comments on my code, advices how to improve it.
by techcode (Hermit) on Aug 30, 2005 at 16:46 UTC | |
Re: Comments on my code, advices how to improve it.
by rir (Vicar) on Aug 31, 2005 at 04:14 UTC | |
by techcode (Hermit) on Sep 01, 2005 at 19:51 UTC | |
Re: Comments on my code, advices how to improve it.
by chanio (Priest) on Aug 30, 2005 at 20:07 UTC |