ActiveRecord-Simple
view release on metacpan or search on metacpan
lib/ActiveRecord/Simple.pm view on Meta::CPAN
}
else {
push @set_list, "$_ = ?";
push @bind, $param->{$_};
}
}
my $setstring = join q/, /, @set_list;
push @bind, $self->{$primary_key};
my $sql_stm = ActiveRecord::Simple::Utils::quote_sql_stmt(
qq{
UPDATE "$table_name" SET $setstring
WHERE
$primary_key = ?
},
$self->dbh->{Driver}{Name}
);
return $self->dbh->do($sql_stm, undef, @bind);
}
sub _mk_rw_accessors {
my ($class, $fields) = @_;
return unless $fields;
return if $class->can('_make_columns_accessors') && $class->_make_columns_accessors == 0;
$class->_mk_accessors($fields, 'rw');
}
sub _mk_ro_accessors {
my ($class, $fields) = @_;
return unless $fields;
return if $class->can('_make_columns_accessors') && $class->_make_columns_accessors == 0;
$class->_mk_accessors($fields, 'ro');
}
sub _mk_accessors {
my ($class, $fields, $type) = @_;
$type ||= 'rw';
my $code_string = q//;
METHOD_NAME:
for my $method_name (@$fields) {
next METHOD_NAME if $class->can($method_name);
$code_string .= "sub $method_name {\n";
if ($type eq 'rw') {
$code_string .= "if (\@_ > 1) { \$_[0]->{$method_name} = \$_[1]; return \$_[0] }\n";
}
elsif ($type eq 'ro') {
$code_string .= "die 'Object is read-only, sorry' if \@_ > 1;\n";
}
$code_string .= "return \$_[0]->{$method_name};\n }\n";
}
eval "package $class;\n $code_string" if $code_string;
say $@ if $@;
}
sub _guess {
my ($what_key, $class) = @_;
return 'id' if $what_key eq 'primary_key';
#eval { load $class }; ### TODO: check class has been loaded
#load $class unless is_loaded $class;
#mark_as_loaded $class;
load_module $class;
my $table_name = _what_is_the_table_name($class);
$table_name =~ s/s$// if $what_key eq 'foreign_key';
return ($what_key eq 'foreign_key') ? "$table_name\_id" : undef;
}
sub _delete_keys {
my ($self, $rx) = @_;
map { delete $self->{$_} if $_ =~ $rx } keys %$self;
}
sub _append_relation {
my ($class, $rel_name, $rel_hashref) = @_;
if ($class->can('_get_relations')) {
my $relations = $class->_get_relations();
$relations->{$rel_name} = $rel_hashref;
$class->relations($relations);
}
else {
$class->relations({ $rel_name => $rel_hashref });
}
return $rel_hashref;
}
sub _mk_attribute_getter {
my ($class, $method_name, $return) = @_;
return if $class->can($method_name);
eval "package $class; \n sub $method_name { \$return }";
}
sub _init_relations {
my ($class) = @_;
my $relations = $class->_get_relations;
no strict 'refs';
RELATION_NAME:
for my $relation_name ( keys %{ $relations }) {
my $pkg_method_name = $class . '::' . $relation_name;
next RELATION_NAME if $class->can($pkg_method_name); ### FIXME: orrrr $relation_name???
( run in 1.442 second using v1.01-cache-2.11-cpan-483215c6ad5 )