ActiveRecord-Simple
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/ActiveRecord/Simple.pm view on Meta::CPAN
}
}
return $connector->dbh;
}
sub objects {
$qm->{caller} = shift;
return $qm;
}
sub save {
my ($self) = @_;
#return unless $self->dbh;
croak "Undefined database handler" unless $self->dbh;
croak 'Object is read-only'
if exists $self->{read_only} && $self->{read_only} == 1;
my $save_param = {};
my $fields = $self->_get_columns;
my $pkey = ($self->can('_get_primary_key')) ? $self->_get_primary_key : undef;
FIELD:
for my $field (@$fields) {
next FIELD if defined $pkey && $field eq $pkey && !$self->{$pkey};
next FIELD if ref $field && ref $field eq 'HASH';
$save_param->{$field} = $self->{$field};
}
### Get additional fields from related objects:
for my $field (keys %$self) {
next unless ref $self->{$field};
next unless $self->can('_get_relations');
next unless grep { $_ eq $field } keys %{ $self->_get_relations };
my $relation = $self->_get_relations->{$field} or next;
next unless $relation->{type} && $relation->{type} eq 'one';
my $fk = $relation->{params}{fk};
my $pk = $relation->{params}{pk};
$save_param->{$fk} = $self->{$field}->$pk;
}
my $result;
if ($self->{isin_database}) {
$result = $self->_update($save_param);
}
else {
$result = $self->_insert($save_param);
}
$self->{need_to_save} = 0 if $result;
delete $self->{SQL} if $result;
return (defined $result) ? $self : undef;
}
sub update {
my ($self, $params) = @_;
my $fields = $self->_get_columns();
FIELD:
for my $field (@$fields) {
next FIELD if ! exists $params->{$field};
next FIELD if ! $params->{$field};
$self->{$field} = $params->{$field};
}
return $self;
}
# param:
# cascade => 1
sub delete {
my ($self, $param) = @_;
return unless $self->dbh;
#my $table_name = $self->_table_name;
my $table_name = _what_is_the_table_name($self);
my $pkey = $self->_get_primary_key;
return unless $self->{$pkey};
my $sql = qq{
DELETE FROM "$table_name" WHERE $pkey = ?
};
$sql .= ' CASCADE ' if $param && $param->{cascade};
my $res = undef;
$sql = ActiveRecord::Simple::Utils::quote_sql_stmt($sql, $self->dbh->{Driver}{Name});
if ( $self->dbh->do($sql, undef, $self->{$pkey}) ) {
$self->{isin_database} = undef;
delete $self->{$pkey};
$res = 1;
}
return $res;
}
sub is_defined {
my ($self) = @_;
return grep { defined $self->{$_} } @{ $self->_get_columns };
}
# param:
# only_defined_fields => 1
### TODO: refactor this
sub to_hash {
my ($self, $param) = @_;
my $field_names = $self->_get_columns;
push @$field_names, keys %{ $self->_get_mixins } if $self->can('_get_mixins');
my $attrs = {};
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.509 second using v1.00-cache-2.02-grep-82fe00e-cpan-b63e86051f13 )