HTML-Puzzle

 view release on metacpan or  search on metacpan

Puzzle/DBTable.pm  view on Meta::CPAN

     
my @fields_req	= qw/dbh name/;
my $DEBUG_FH;     

sub new
{   
	my $proto = shift;
    my $class = ref($proto) || $proto;
    my $self = {};
    bless $self,$class;
    $self->_init(@_);
    return $self;
}							

sub _init {
	my $self = shift;
	my (%options) = @_;
	# Assign default options
	while (my ($key,$value) = each(%fields)) {
		$self->{$key} = $self->{$key} || $value;
    }
    # Assign options
    while (my ($key,$value) = each(%options)) {
    	$self->{$key} = $value
    }
    # Check required params
    foreach (@fields_req) {
		croak "You must declare '$_' in " . ref($self) . "::new"
				if (!defined $self->{$_});
	}
	$DEBUG_FH = new FileHandle ">>$DEBUG_FILE_PATH" if ($DEBUG);										
}

sub DESTROY {
	$DEBUG_FH->close if ($DEBUG);
}

sub add {
	my $self 	= shift;
	my $values 	= shift;
	my %values	= %{$values};
	if (!exists $values{date}) {
		# built default date
		my @lt = localtime;
		my $lt = $lt[5]+1900; $lt .= &_f2($lt[4]+1); $lt.=&_f2($lt[3]);
		$lt .= &_f2($lt[2]); $lt .= &_f2($lt[1]); $lt.=&_f2($lt[0]);
		$values{date} = $lt;
	}
	# costruisco la stringa chiave1,chiave2,...
	my $keys	= join(',',keys(%values));
	# array dei valori
	my @values  = values(%values);
	# costruisco la stringa ?,?,?...
	my $jolly	= join(',',map('?',@values));
	my $sql 	= qq/Insert into $self->{name} ($keys) values ($jolly)/;
	debug($sql);
	$self->{dbh}->do($sql,undef,@values) or 
		die "Unable to execute $sql with params " . join(';',@values);
}

sub update {
	my $self 	= shift;
	my $fields	= shift;
	my $filter	= shift;
	# create sql string
	my $sql 	= qq/Update $self->{name} set /;
	# built section field1 = ? for update
	my $set = join(',',map("$_ = ? ",keys(%{$fields})));
	# built where section
	my $where = join(',',map("$_ = ? ",keys(%{$filter})));
	# complete sql is...
	$sql .= qq/$set where $where/;
	# get values
	my @values = (values(%{$fields}),values(%{$filter}));
	$self->{dbh}->do($sql,undef,@values) or 
		die "Unable to execute $sql with params: " . join(@values);
}

sub delete {
	my $self	= shift;
	my $id		= shift;
	$id = [$id] unless (ref($id)) ;
	my $in = join(', ',map('?',@{$id}));
	my $sql		= qq/delete from $self->{name} where id in ($in)/;
	$self->{dbh}->do($sql,undef,@{$id}) or 
		die "Unable to execute $sql with id $id ";
}

sub array_items {
	my $self 					= shift;
	my (undef,undef,$filter) 	= @_;
	my $sql						= $self->_item_sql(@_);
	return $self->_rec_as_array($sql,values(%{$filter}));
}

sub hash_items {
	my $self 					= shift;
	my (undef,undef,$filter) 	= @_;
	my $sql						= $self->_item_sql(@_);
	return $self->_rec_as_hash($sql,values(%{$filter}));
}


sub create {
	my $self	= shift;
	my $dbh; my $name;
	if (defined $self) {
		$dbh	= $self->{dbh};
		$name	= $self->{name};
	} else {
		my @dbInfo	= &_prompt_db_info;
		$dbh		= &_local_dbh(@dbInfo);
		$name		= $dbInfo[-1];
	}
	my $sql		=
		qq/
			CREATE TABLE $name (
	  		  id smallint(1) unsigned NOT NULL auto_increment,
			  title varchar(255) NOT NULL default '',
			  txt_short varchar(255) default NULL,
			  txt_long text,



( run in 0.749 second using v1.01-cache-2.11-cpan-e1769b4cff6 )