Streamline ::ResultSource::* inheritance, similar to d009cb7d
[dbsrgits/DBIx-Class-Historic.git] / examples / Schema / testdb.pl
1 #!/usr/bin/env perl
2
3 use warnings;
4 use strict;
5
6 use MyApp::Schema;
7 use DBIx::Class::_Util 'parent_dir';
8
9 my $db_fn = parent_dir( $INC{'MyApp/Schema.pm'} ) . '../db/example.db';
10
11 # for other DSNs, e.g. MySql, see the perldoc for the relevant dbd
12 # driver, e.g perldoc L<DBD::mysql>.
13 my $schema = MyApp::Schema->connect("dbi:SQLite:$db_fn");
14
15 get_tracks_by_cd('Bad');
16 get_tracks_by_artist('Michael Jackson');
17
18 get_cd_by_track('Stan');
19 get_cds_by_artist('Michael Jackson');
20
21 get_artist_by_track('Dirty Diana');
22 get_artist_by_cd('The Marshall Mathers LP');
23
24
25 sub get_tracks_by_cd {
26     my $cdtitle = shift;
27     print "get_tracks_by_cd($cdtitle):\n";
28     my $rs = $schema->resultset('Track')->search(
29         {
30             'cd.title' => $cdtitle
31         },
32         {
33             join     => [qw/ cd /],
34         }
35     );
36     while (my $track = $rs->next) {
37         print $track->title . "\n";
38     }
39     print "\n";
40 }
41
42 sub get_tracks_by_artist {
43     my $artistname = shift;
44     print "get_tracks_by_artist($artistname):\n";
45     my $rs = $schema->resultset('Track')->search(
46         {
47             'artist.name' => $artistname
48         },
49         {
50             join => {
51                 'cd' => 'artist'
52             },
53         }
54     );
55     while (my $track = $rs->next) {
56         print $track->title . " (from the CD '" . $track->cd->title
57           . "')\n";
58     }
59     print "\n";
60 }
61
62 sub get_cd_by_track {
63     my $tracktitle = shift;
64     print "get_cd_by_track($tracktitle):\n";
65     my $rs = $schema->resultset('Cd')->search(
66         {
67             'tracks.title' => $tracktitle
68         },
69         {
70             join     => [qw/ tracks /],
71         }
72     );
73     my $cd = $rs->first;
74     print $cd->title . " has the track '$tracktitle'.\n\n";
75 }
76
77 sub get_cds_by_artist {
78     my $artistname = shift;
79     print "get_cds_by_artist($artistname):\n";
80     my $rs = $schema->resultset('Cd')->search(
81         {
82             'artist.name' => $artistname
83         },
84         {
85             join     => [qw/ artist /],
86         }
87     );
88     while (my $cd = $rs->next) {
89         print $cd->title . "\n";
90     }
91     print "\n";
92 }
93
94 sub get_artist_by_track {
95     my $tracktitle = shift;
96     print "get_artist_by_track($tracktitle):\n";
97     my $rs = $schema->resultset('Artist')->search(
98         {
99             'tracks.title' => $tracktitle
100         },
101         {
102             join => {
103                 'cds' => 'tracks'
104             }
105         }
106     );
107     my $artist = $rs->first;
108     print $artist->name . " recorded the track '$tracktitle'.\n\n";
109 }
110
111 sub get_artist_by_cd {
112     my $cdtitle = shift;
113     print "get_artist_by_cd($cdtitle):\n";
114     my $rs = $schema->resultset('Artist')->search(
115         {
116             'cds.title' => $cdtitle
117         },
118         {
119             join     => [qw/ cds /],
120         }
121     );
122     my $artist = $rs->first;
123     print $artist->name . " recorded the CD '$cdtitle'.\n\n";
124 }