Rose-DB-Object
view release on metacpan or search on metacpan
t/spot-check-12.t view on Meta::CPAN
### key_columns => { client_id => 'id' },
### },
###],
);
sub init_db { Rose::DB->new }
###
package main;
{
my $dbh = Rose::DB->new->retain_dbh();
{
local $dbh->{'RaiseError'} = 0;
local $dbh->{'PrintError'} = 0;
$dbh->do('DROP TABLE addresses');
$dbh->do('DROP TABLE clients');
}
$dbh->do(<<"EOF");
CREATE TABLE clients
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR,
UNIQUE(name)
)
EOF
$dbh->do(<<"EOF");
CREATE TABLE addresses
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
client_id INT NOT NULL REFERENCES clients (id),
street VARCHAR,
UNIQUE(client_id)
)
EOF
$dbh->disconnect;
}
Clients->new( name => 'c1' )->save;
ok(Addresses->can('load_or_save'), 'helpers 1');
ok(Addresses->can('find_or_create'), 'helpers 2');
ok(Clients->can('load_or_save'), 'helpers 3');
ok(Clients->can('find_or_create2'), 'helpers 4');
my $c = Clients->new( name => 'c1' );
$c->load;
my $a = Addresses->new( client_id => $c->id, street => 's1' );
$c->address($a);
#$Rose::DB::Object::Debug = 1;
#$Rose::DB::Object::Manager::Debug = 1;
ok($c->save( cascade => 1, changes_only => 1 ), 'save cascade changes only');
$c = Rose::DB::Object::Manager->get_objects(
object_class => 'Clients',
with_objects => 'address')->[0];
ok(!keys %{ $c->{MODIFIED_COLUMNS()} || {} }, 'check modified columns');
ok(has_loaded_related($c, 'address'), 'has_loaded_related() 1');
ok(has_loaded_related(object => $c, relationship => 'address'), 'has_loaded_related() 2');
$c->address->street('s2');
ok($c->save(cascade => 1, changes_only => 1), 'save cascade changes only - loaded with Manager');
$a = Addresses->new(id => $a->id)->load;
is($a->street, 's2', 'save cascade changes only - check');
}
END
{
if(have_db('sqlite_admin'))
{
my $dbh = get_dbh('sqlite_admin');
local $dbh->{'RaiseError'} = 0;
local $dbh->{'PrintError'} = 0;
$dbh->do('DROP TABLE addresses');
$dbh->do('DROP TABLE clients');
}
}
( run in 2.083 seconds using v1.01-cache-2.11-cpan-98e64b0badf )