00c1ef670d2711c045d5c1aae4fc512f47616041
[dbsrgits/DBIx-Class.git] / t / lib / DBICTest / Schema / Artist.pm
1 package # hide from PAUSE
2     DBICTest::Schema::Artist;
3
4 use warnings;
5 use strict;
6
7 use base 'DBICTest::BaseResult';
8 use DBICTest::Util 'check_customcond_args';
9
10 __PACKAGE__->table('artist');
11 __PACKAGE__->source_info({
12     "source_info_key_A" => "source_info_value_A",
13     "source_info_key_B" => "source_info_value_B",
14     "source_info_key_C" => "source_info_value_C",
15 });
16 __PACKAGE__->add_columns(
17   'artistid' => {
18     data_type => 'integer',
19     is_auto_increment => 1,
20   },
21   'name' => {
22     data_type => 'varchar',
23     size      => 100,
24     is_nullable => 1,
25   },
26   rank => {
27     data_type => 'integer',
28     default_value => 13,
29   },
30   charfield => {
31     data_type => 'char',
32     size => 10,
33     is_nullable => 1,
34   },
35 );
36 __PACKAGE__->set_primary_key('artistid');
37 __PACKAGE__->add_unique_constraint(['name']);
38 __PACKAGE__->add_unique_constraint(artist => ['artistid']); # do not remove, part of a test
39 __PACKAGE__->add_unique_constraint(u_nullable => [qw/charfield rank/]);
40
41
42 __PACKAGE__->mk_classdata('field_name_for', {
43     artistid    => 'primary key',
44     name        => 'artist name',
45 });
46
47 # the undef condition in this rel is *deliberate*
48 # tests oddball legacy syntax
49 __PACKAGE__->has_many(
50     cds => 'DBICTest::Schema::CD', undef,
51     { order_by => { -asc => 'year'} },
52 );
53
54 __PACKAGE__->has_many(
55   cds_cref_cond => 'DBICTest::Schema::CD',
56   sub {
57     # This is for test purposes only. A regular user does not
58     # need to sanity check the passed-in arguments, this is what
59     # the tests are for :)
60     my $args = &check_customcond_args;
61
62     return (
63       { "$args->{foreign_alias}.artist" => { '=' => { -ident => "$args->{self_alias}.artistid"} },
64       },
65       $args->{self_result_object} && {
66         "$args->{foreign_alias}.artist" => $args->{self_rowobj}->artistid,  # keep old rowobj syntax as a test
67       }
68     );
69   },
70 );
71
72 __PACKAGE__->has_many(
73   cds_80s => 'DBICTest::Schema::CD',
74   sub {
75     # This is for test purposes only. A regular user does not
76     # need to sanity check the passed-in arguments, this is what
77     # the tests are for :)
78     my $args = &check_customcond_args;
79
80     return (
81       { "$args->{foreign_alias}.artist" => { '=' => \ "$args->{self_alias}.artistid" },
82         "$args->{foreign_alias}.year"   => { '>' => 1979, '<' => 1990 },
83       },
84       $args->{self_result_object} && {
85         "$args->{foreign_alias}.artist" => { '=' => \[ '?',  $args->{self_result_object}->artistid ] },
86         "$args->{foreign_alias}.year"   => { '>' => 1979, '<' => 1990 },
87       }
88     );
89   },
90 );
91
92
93 __PACKAGE__->has_many(
94   cds_84 => 'DBICTest::Schema::CD',
95   sub {
96     # This is for test purposes only. A regular user does not
97     # need to sanity check the passed-in arguments, this is what
98     # the tests are for :)
99     my $args = &check_customcond_args;
100
101     return (
102       { "$args->{foreign_alias}.artist" => { -ident => "$args->{self_alias}.artistid" },
103         "$args->{foreign_alias}.year"   => 1984,
104       },
105       $args->{self_result_object} && {
106         "$args->{foreign_alias}.artist" => $args->{self_result_object}->artistid,
107         "$args->{foreign_alias}.year"   => 1984,
108       }
109     );
110   }
111 );
112
113
114 __PACKAGE__->has_many(
115   cds_90s => 'DBICTest::Schema::CD',
116   sub {
117     # This is for test purposes only. A regular user does not
118     # need to sanity check the passed-in arguments, this is what
119     # the tests are for :)
120     my $args = &check_customcond_args;
121
122     return (
123       { "$args->{foreign_alias}.artist" => { -ident => "$args->{self_alias}.artistid" },
124         "$args->{foreign_alias}.year"   => { '>' => 1989, '<' => 2000 },
125       }
126     );
127   }
128 );
129
130
131 __PACKAGE__->has_many(
132     cds_unordered => 'DBICTest::Schema::CD'
133 );
134 __PACKAGE__->has_many(
135     cds_very_very_very_long_relationship_name => 'DBICTest::Schema::CD'
136 );
137
138 __PACKAGE__->has_many( twokeys => 'DBICTest::Schema::TwoKeys' );
139 __PACKAGE__->has_many( onekeys => 'DBICTest::Schema::OneKey' );
140
141 __PACKAGE__->has_many(
142   artist_undirected_maps => 'DBICTest::Schema::ArtistUndirectedMap',
143   [ {'foreign.id1' => 'self.artistid'}, {'foreign.id2' => 'self.artistid'} ],
144   { cascade_copy => 0 } # this would *so* not make sense
145 );
146
147 __PACKAGE__->has_many(
148     artwork_to_artist => 'DBICTest::Schema::Artwork_to_Artist' => 'artist_id'
149 );
150 __PACKAGE__->many_to_many('artworks', 'artwork_to_artist', 'artwork');
151
152 __PACKAGE__->has_many(
153     cds_without_genre => 'DBICTest::Schema::CD',
154     sub {
155         # This is for test purposes only. A regular user does not
156         # need to sanity check the passed-in arguments, this is what
157         # the tests are for :)
158         my $args = &check_customcond_args;
159
160         return (
161           {
162             "$args->{foreign_alias}.artist" => { -ident => "$args->{self_alias}.artistid" },
163             "$args->{foreign_alias}.genreid" => undef,
164           }, $args->{self_result_object} && {
165             "$args->{foreign_alias}.artist" => $args->{self_result_object}->artistid,
166             "$args->{foreign_alias}.genreid" => undef,
167           }
168         ),
169     },
170 );
171
172 sub sqlt_deploy_hook {
173   my ($self, $sqlt_table) = @_;
174
175   if ($sqlt_table->schema->translator->producer_type =~ /SQLite$/ ) {
176     $sqlt_table->add_index( name => 'artist_name_hookidx', fields => ['name'] )
177       or die $sqlt_table->error;
178   }
179 }
180
181 sub store_column {
182   my ($self, $name, $value) = @_;
183   $value = 'X '.$value if ($name eq 'name' && defined $value && $value =~ /(X )?store_column test/);
184   $self->next::method($name, $value);
185 }
186
187
188 1;