CGI-AppToolkit

 view release on metacpan or  search on metacpan

lib/CGI/AppToolkit/Data/SQLObject.pm  view on Meta::CPAN

	if ($self->can('prestore')) {
		$self->prestore($args, $error_object);	
	}		

	return $error_object if $error_object->has_errors;

	# save a new one and return the id
	if ((($index && !$args->{$index}) || $args->{'-insert'}) && !$args->{'-update'}) {

		if ($self->can('preinsert')) {
			$self->preinsert($args, $error_object);	
		
			return $error_object if $error_object->has_errors;
		}		

		my $statement = $self->get_db_statement('insert');
		my ($sth, $order) = @$statement;
	
		return $error_object if $error_object->has_errors;

		$sth->execute(@{$args}{@$order});

		if ($self->can('postinsert')) {
			$self->postinsert($args, $sth);	
		}		
	
		return $error_object if $error_object->has_errors;

		return $args;

	# update and return the old info
	} else {
		
		my $old = undef;
		if (defined wantarray || $self->can('preupdate')) {
			$old = $self->fetch({'id' => $args->{'id'}, '-one' => 1});
		}

		if ($self->can('preupdate')) {
			$self->preupdate($args, $old, $error_object);	
		
			return $error_object if $error_object->has_errors;
		}		
		
		my $statement = $self->get_db_statement('update');
		my ($sth, $order) = @$statement;	
		$sth->execute(@{$args}{@$order});

		if ($self->can('postupdate')) {
			$self->postupdate($args, $old, $sth);	
		}		
				
		return $old if defined wantarray;
	}
}


#-------------------------------------#

# get a prepared db statement
sub update {
	my $self = shift;
	my $name = shift;
		
	#if we're passed several values, recurse then quit
	if (ref $_[0] eq 'ARRAY') {
		my $ret = [];
		my $stores = shift;
		
		foreach my $args (@$stores) {
			push @$ret, $self->update($args);
		}
			
		return $ret;
	}
	
	my $args = ref $_[0] eq 'HASH' ? shift : {@_};

	$args->{'-update'} = 1;
	return $self->store($args);
}

#-------------------------------------#

# delete some objects
sub delete {
	my $self = shift;
	my $args = ref $_[0] eq 'HASH' ? shift : {@_};
	$self->_remap_keys($args);

	my $statement = undef;
	my $values = {};
	
	if ($self->can('predelete')) {
		($statement, $values) = $self->predelete($args);	
	}		
	
	unless ($statement) {
		my $table = $self->get_table();
		my $name = undef;
		
		$name = "delete:" . $self->_make_statement_name($args, $values);
		
		unless ($statement = $self->get_db_statement($name)) {
			my $sql = "delete from $table";
			my @order = ();
			
			$sql .= $self->_make_where($args, $name, \@order);
			
#			carp "delete SQL: $sql\n";
#			carp(join(', ', map{ref $_ eq 'ARRAY' ? @$_ : @_} @{$values}{@order}));
			
			my $sth = $self->get_kit->get_dbi()->prepare($sql);
			
			$statement = [$sth, \@order];
			$self->set_db_statement($name, $statement);
		}
	}
		
	if (!$statement) {
		if ($self->get_kit->get_errors_fatal()) {



( run in 0.902 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )