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 )