File: tstore2.x

package info (click to toggle)
libdbix-dbstag-perl 0.12-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,420 kB
  • sloc: perl: 6,152; sql: 588; xml: 221; lisp: 59; makefile: 20
file content (84 lines) | stat: -rw-r--r-- 2,046 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use lib 't';

BEGIN {
    # to handle systems with no installed Test module
    # we include the t dir (where a copy of Test.pm is located)
    # as a fallback
    eval { require Test; };
    use Test;    
    use DBIStagTest;
    plan tests => 2;
}
use DBIx::DBIStag;
use DBI;
use Data::Stag;
use FileHandle;

my $ddl = <<EOM
CREATE TABLE address (
  address_id serial NOT NULL PRIMARY KEY,
  addressline varchar(255),
  city VARCHAR(255)
);
CREATE TABLE person (
  person_id serial NOT NULL PRIMARY KEY,
  fname     varchar(255),
  lname     varchar(255),
  address_id   integer REFERENCES address(address_id),
  UNIQUE (fname, lname)
);
EOM
;

my $data = <<EOM
(personset
 (person
  (fname "joe")
  (lname "bloggs")
  (address 
   (addressline "1 a street")
   (city "san francisco")))
 (person
  (fname "fred")
  (lname "minger")
  (address 
   (addressline "5555 bogging avenue")
   (city "LA"))))
EOM
;

my $dbh = connect_to_cleandb();
#DBI->trace(1);

$dbh->do($ddl);

$dbh->guess_mapping;
my $personset = Data::Stag->from('sxprstr', $data);
my @persons  = $personset->getnode_person;
foreach (@persons) {
    $dbh->storenode($_);
}

our $NEW_ADDRESS = "some new address";
my $rset = $dbh->selectall_stag("SELECT * FROM person NATURAL JOIN address WHERE fname = 'joe'",
                               );
print $rset->sxpr;
my $joe = $rset->getnode_person;
my $OLD_ADDRESS = $joe->sgetnode_address->sget_addressline;

$joe->sgetnode_address->set_addressline($NEW_ADDRESS);
$dbh->storenode($joe);
$rset = $dbh->selectall_stag("SELECT * FROM person NATURAL JOIN address WHERE fname = 'joe'",
                               );
$joe = $rset->getnode_person;
ok($joe->sgetnode_address->sget_addressline eq $NEW_ADDRESS);

$joe->unset_person_id;
$joe->sgetnode_address->set_addressline($OLD_ADDRESS);

$dbh->storenode($joe);
$rset = $dbh->selectall_stag("SELECT * FROM person NATURAL JOIN address WHERE fname = 'joe'",
                               );
$joe = $rset->getnode_person;
ok($joe->sgetnode_address->sget_addressline eq $OLD_ADDRESS);