package DBIx::Library; use strict; use Carp; use vars qw( $VERSION ); use Data::Dumper; use DBIx::Library::SQL; $VERSION = 0.02; # Initiate a new object: sub new { my $object_or_class = shift; my $class = ref($object_or_class) || $object_or_class; my $options = { @_ }; my $self = { quries => $options->{quries} || {}, default => "SELECT 0;", clean => 1, delimeter => '$$', dbh => $options->{dbh} || undef, }; $self->{clean} = $options->{clean} if exists $options->{clean}; $self->{default} = $options->{default} if exists $options->{default}; bless $self, $class; return $self; } sub AUTOLOAD { my $self = shift; my $method = $DBIx::Library::AUTOLOAD; $method =~ s/^DBIx::Library:://; return if $method =~ /DESTROY$/; $self->_get_SQL($method, @_); } sub _get_SQL { my $self = shift; my $method = shift; if (exists $self->{quries}->{$method}) { my $sql = $self->{quries}->{$method}; my $del = qr/\Q$self->{delimeter}\E/; my $params = { @_ }; foreach my $param ( keys %$params ) { my $match = $del . $param .$del; $sql =~ s/$match/$params->{$param}/igs; } $sql =~ s/$del(.+?)$del//g if $self->{clean}; return $self->_wrap_SQL($sql); } return $self->_wrap_SQL($self->{default}); } sub _wrap_SQL { my $self = shift; my $sql = shift; if (defined $self->{dbh}) { return DBIx::Library::SQL->new($sql, $self->{dbh}); } else { return $sql; } } 1;