]> git.donarmstrong.com Git - debbugs.git/blob - lib/Debbugs/DB/Result/Bug.pm
move Debbugs to lib
[debbugs.git] / lib / Debbugs / DB / Result / Bug.pm
1 use utf8;
2 package Debbugs::DB::Result::Bug;
3
4 # Created by DBIx::Class::Schema::Loader
5 # DO NOT MODIFY THE FIRST PART OF THIS FILE
6
7 =head1 NAME
8
9 Debbugs::DB::Result::Bug - Bugs
10
11 =cut
12
13 use strict;
14 use warnings;
15
16 use base 'DBIx::Class::Core';
17
18 =head1 COMPONENTS LOADED
19
20 =over 4
21
22 =item * L<DBIx::Class::InflateColumn::DateTime>
23
24 =item * L<DBIx::Class::TimeStamp>
25
26 =back
27
28 =cut
29
30 __PACKAGE__->load_components("InflateColumn::DateTime", "TimeStamp");
31
32 =head1 TABLE: C<bug>
33
34 =cut
35
36 __PACKAGE__->table("bug");
37
38 =head1 ACCESSORS
39
40 =head2 id
41
42   data_type: 'integer'
43   is_nullable: 0
44
45 Bug number
46
47 =head2 creation
48
49   data_type: 'timestamp with time zone'
50   default_value: current_timestamp
51   is_nullable: 0
52   original: {default_value => \"now()"}
53
54 Time bug created
55
56 =head2 log_modified
57
58   data_type: 'timestamp with time zone'
59   default_value: current_timestamp
60   is_nullable: 0
61   original: {default_value => \"now()"}
62
63 Time bug log was last modified
64
65 =head2 last_modified
66
67   data_type: 'timestamp with time zone'
68   default_value: current_timestamp
69   is_nullable: 0
70   original: {default_value => \"now()"}
71
72 Time bug status was last modified
73
74 =head2 archived
75
76   data_type: 'boolean'
77   default_value: false
78   is_nullable: 0
79
80 True if bug has been archived
81
82 =head2 unarchived
83
84   data_type: 'timestamp with time zone'
85   is_nullable: 1
86
87 Time bug was last unarchived; null if bug has never been unarchived
88
89 =head2 forwarded
90
91   data_type: 'text'
92   default_value: (empty string)
93   is_nullable: 0
94
95 Where bug has been forwarded to; empty if it has not been forwarded
96
97 =head2 summary
98
99   data_type: 'text'
100   default_value: (empty string)
101   is_nullable: 0
102
103 Summary of the bug; empty if it has no summary
104
105 =head2 outlook
106
107   data_type: 'text'
108   default_value: (empty string)
109   is_nullable: 0
110
111 Outlook of the bug; empty if it has no outlook
112
113 =head2 subject
114
115   data_type: 'text'
116   is_nullable: 0
117
118 Subject of the bug
119
120 =head2 severity
121
122   data_type: 'integer'
123   is_foreign_key: 1
124   is_nullable: 0
125
126 =head2 done
127
128   data_type: 'integer'
129   is_foreign_key: 1
130   is_nullable: 1
131
132 Individual who did the -done; empty if it has never been -done
133
134 =head2 done_full
135
136   data_type: 'text'
137   default_value: (empty string)
138   is_nullable: 0
139
140 =head2 owner
141
142   data_type: 'integer'
143   is_foreign_key: 1
144   is_nullable: 1
145
146 Individual who owns this bug; empty if no one owns it
147
148 =head2 owner_full
149
150   data_type: 'text'
151   default_value: (empty string)
152   is_nullable: 0
153
154 =head2 submitter
155
156   data_type: 'integer'
157   is_foreign_key: 1
158   is_nullable: 1
159
160 Individual who submitted this bug; empty if there is no submitter
161
162 =head2 submitter_full
163
164   data_type: 'text'
165   default_value: (empty string)
166   is_nullable: 0
167
168 =head2 unknown_packages
169
170   data_type: 'text'
171   default_value: (empty string)
172   is_nullable: 0
173
174 Package name if the package is not known
175
176 =head2 unknown_affects
177
178   data_type: 'text'
179   default_value: (empty string)
180   is_nullable: 0
181
182 Package name if the affected package is not known
183
184 =cut
185
186 __PACKAGE__->add_columns(
187   "id",
188   { data_type => "integer", is_nullable => 0 },
189   "creation",
190   {
191     data_type     => "timestamp with time zone",
192     default_value => \"current_timestamp",
193     is_nullable   => 0,
194     original      => { default_value => \"now()" },
195   },
196   "log_modified",
197   {
198     data_type     => "timestamp with time zone",
199     default_value => \"current_timestamp",
200     is_nullable   => 0,
201     original      => { default_value => \"now()" },
202   },
203   "last_modified",
204   {
205     data_type     => "timestamp with time zone",
206     default_value => \"current_timestamp",
207     is_nullable   => 0,
208     original      => { default_value => \"now()" },
209   },
210   "archived",
211   { data_type => "boolean", default_value => \"false", is_nullable => 0 },
212   "unarchived",
213   { data_type => "timestamp with time zone", is_nullable => 1 },
214   "forwarded",
215   { data_type => "text", default_value => "", is_nullable => 0 },
216   "summary",
217   { data_type => "text", default_value => "", is_nullable => 0 },
218   "outlook",
219   { data_type => "text", default_value => "", is_nullable => 0 },
220   "subject",
221   { data_type => "text", is_nullable => 0 },
222   "severity",
223   { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
224   "done",
225   { data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
226   "done_full",
227   { data_type => "text", default_value => "", is_nullable => 0 },
228   "owner",
229   { data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
230   "owner_full",
231   { data_type => "text", default_value => "", is_nullable => 0 },
232   "submitter",
233   { data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
234   "submitter_full",
235   { data_type => "text", default_value => "", is_nullable => 0 },
236   "unknown_packages",
237   { data_type => "text", default_value => "", is_nullable => 0 },
238   "unknown_affects",
239   { data_type => "text", default_value => "", is_nullable => 0 },
240 );
241
242 =head1 PRIMARY KEY
243
244 =over 4
245
246 =item * L</id>
247
248 =back
249
250 =cut
251
252 __PACKAGE__->set_primary_key("id");
253
254 =head1 RELATIONS
255
256 =head2 bug_affects_binpackages
257
258 Type: has_many
259
260 Related object: L<Debbugs::DB::Result::BugAffectsBinpackage>
261
262 =cut
263
264 __PACKAGE__->has_many(
265   "bug_affects_binpackages",
266   "Debbugs::DB::Result::BugAffectsBinpackage",
267   { "foreign.bug" => "self.id" },
268   { cascade_copy => 0, cascade_delete => 0 },
269 );
270
271 =head2 bug_affects_srcpackages
272
273 Type: has_many
274
275 Related object: L<Debbugs::DB::Result::BugAffectsSrcpackage>
276
277 =cut
278
279 __PACKAGE__->has_many(
280   "bug_affects_srcpackages",
281   "Debbugs::DB::Result::BugAffectsSrcpackage",
282   { "foreign.bug" => "self.id" },
283   { cascade_copy => 0, cascade_delete => 0 },
284 );
285
286 =head2 bug_binpackages
287
288 Type: has_many
289
290 Related object: L<Debbugs::DB::Result::BugBinpackage>
291
292 =cut
293
294 __PACKAGE__->has_many(
295   "bug_binpackages",
296   "Debbugs::DB::Result::BugBinpackage",
297   { "foreign.bug" => "self.id" },
298   { cascade_copy => 0, cascade_delete => 0 },
299 );
300
301 =head2 bug_blocks_blocks
302
303 Type: has_many
304
305 Related object: L<Debbugs::DB::Result::BugBlock>
306
307 =cut
308
309 __PACKAGE__->has_many(
310   "bug_blocks_blocks",
311   "Debbugs::DB::Result::BugBlock",
312   { "foreign.blocks" => "self.id" },
313   { cascade_copy => 0, cascade_delete => 0 },
314 );
315
316 =head2 bug_blocks_bugs
317
318 Type: has_many
319
320 Related object: L<Debbugs::DB::Result::BugBlock>
321
322 =cut
323
324 __PACKAGE__->has_many(
325   "bug_blocks_bugs",
326   "Debbugs::DB::Result::BugBlock",
327   { "foreign.bug" => "self.id" },
328   { cascade_copy => 0, cascade_delete => 0 },
329 );
330
331 =head2 bug_merged_bugs
332
333 Type: has_many
334
335 Related object: L<Debbugs::DB::Result::BugMerged>
336
337 =cut
338
339 __PACKAGE__->has_many(
340   "bug_merged_bugs",
341   "Debbugs::DB::Result::BugMerged",
342   { "foreign.bug" => "self.id" },
343   { cascade_copy => 0, cascade_delete => 0 },
344 );
345
346 =head2 bug_mergeds_merged
347
348 Type: has_many
349
350 Related object: L<Debbugs::DB::Result::BugMerged>
351
352 =cut
353
354 __PACKAGE__->has_many(
355   "bug_mergeds_merged",
356   "Debbugs::DB::Result::BugMerged",
357   { "foreign.merged" => "self.id" },
358   { cascade_copy => 0, cascade_delete => 0 },
359 );
360
361 =head2 bug_messages
362
363 Type: has_many
364
365 Related object: L<Debbugs::DB::Result::BugMessage>
366
367 =cut
368
369 __PACKAGE__->has_many(
370   "bug_messages",
371   "Debbugs::DB::Result::BugMessage",
372   { "foreign.bug" => "self.id" },
373   { cascade_copy => 0, cascade_delete => 0 },
374 );
375
376 =head2 bug_srcpackages
377
378 Type: has_many
379
380 Related object: L<Debbugs::DB::Result::BugSrcpackage>
381
382 =cut
383
384 __PACKAGE__->has_many(
385   "bug_srcpackages",
386   "Debbugs::DB::Result::BugSrcpackage",
387   { "foreign.bug" => "self.id" },
388   { cascade_copy => 0, cascade_delete => 0 },
389 );
390
391 =head2 bug_status_caches
392
393 Type: has_many
394
395 Related object: L<Debbugs::DB::Result::BugStatusCache>
396
397 =cut
398
399 __PACKAGE__->has_many(
400   "bug_status_caches",
401   "Debbugs::DB::Result::BugStatusCache",
402   { "foreign.bug" => "self.id" },
403   { cascade_copy => 0, cascade_delete => 0 },
404 );
405
406 =head2 bug_tags
407
408 Type: has_many
409
410 Related object: L<Debbugs::DB::Result::BugTag>
411
412 =cut
413
414 __PACKAGE__->has_many(
415   "bug_tags",
416   "Debbugs::DB::Result::BugTag",
417   { "foreign.bug" => "self.id" },
418   { cascade_copy => 0, cascade_delete => 0 },
419 );
420
421 =head2 bug_user_tags
422
423 Type: has_many
424
425 Related object: L<Debbugs::DB::Result::BugUserTag>
426
427 =cut
428
429 __PACKAGE__->has_many(
430   "bug_user_tags",
431   "Debbugs::DB::Result::BugUserTag",
432   { "foreign.bug" => "self.id" },
433   { cascade_copy => 0, cascade_delete => 0 },
434 );
435
436 =head2 bug_vers
437
438 Type: has_many
439
440 Related object: L<Debbugs::DB::Result::BugVer>
441
442 =cut
443
444 __PACKAGE__->has_many(
445   "bug_vers",
446   "Debbugs::DB::Result::BugVer",
447   { "foreign.bug" => "self.id" },
448   { cascade_copy => 0, cascade_delete => 0 },
449 );
450
451 =head2 done
452
453 Type: belongs_to
454
455 Related object: L<Debbugs::DB::Result::Correspondent>
456
457 =cut
458
459 __PACKAGE__->belongs_to(
460   "done",
461   "Debbugs::DB::Result::Correspondent",
462   { id => "done" },
463   {
464     is_deferrable => 0,
465     join_type     => "LEFT",
466     on_delete     => "NO ACTION",
467     on_update     => "NO ACTION",
468   },
469 );
470
471 =head2 owner
472
473 Type: belongs_to
474
475 Related object: L<Debbugs::DB::Result::Correspondent>
476
477 =cut
478
479 __PACKAGE__->belongs_to(
480   "owner",
481   "Debbugs::DB::Result::Correspondent",
482   { id => "owner" },
483   {
484     is_deferrable => 0,
485     join_type     => "LEFT",
486     on_delete     => "NO ACTION",
487     on_update     => "NO ACTION",
488   },
489 );
490
491 =head2 severity
492
493 Type: belongs_to
494
495 Related object: L<Debbugs::DB::Result::Severity>
496
497 =cut
498
499 __PACKAGE__->belongs_to(
500   "severity",
501   "Debbugs::DB::Result::Severity",
502   { id => "severity" },
503   { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
504 );
505
506 =head2 submitter
507
508 Type: belongs_to
509
510 Related object: L<Debbugs::DB::Result::Correspondent>
511
512 =cut
513
514 __PACKAGE__->belongs_to(
515   "submitter",
516   "Debbugs::DB::Result::Correspondent",
517   { id => "submitter" },
518   {
519     is_deferrable => 0,
520     join_type     => "LEFT",
521     on_delete     => "NO ACTION",
522     on_update     => "NO ACTION",
523   },
524 );
525
526
527 # Created by DBIx::Class::Schema::Loader v0.07048 @ 2018-04-11 13:06:55
528 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:qxkLXbv8JGoV9reebbOUEw
529
530 use Carp;
531 use List::AllUtils qw(uniq);
532
533 __PACKAGE__->many_to_many(tags => 'bug_tags','tag');
534 __PACKAGE__->many_to_many(user_tags => 'bug_user_tags','user_tag');
535 __PACKAGE__->many_to_many(srcpackages => 'bug_srcpackages','src_pkg');
536 __PACKAGE__->many_to_many(binpackages => 'bug_binpackages','bin_pkg');
537 __PACKAGE__->many_to_many(affects_binpackages => 'bug_affects_binpackages','bin_pkg');
538 __PACKAGE__->many_to_many(affects_srcpackages => 'bug_affects_srcpackages','src_pkg');
539 __PACKAGE__->many_to_many(messages => 'bug_messages','message');
540
541 sub sqlt_deploy_hook {
542     my ($self, $sqlt_table) = @_;
543     # CREATE INDEX bug_idx_owner ON bug(owner);
544     # CREATE INDEX bug_idx_submitter ON bug(submitter);
545     # CREATE INDEX bug_idx_done ON bug(done);
546     # CREATE INDEX bug_idx_forwarded ON bug(forwarded);
547     # CREATE INDEX bug_idx_last_modified ON bug(last_modified);
548     # CREATE INDEX bug_idx_severity ON bug(severity);
549     # CREATE INDEX bug_idx_creation ON bug(creation);
550     # CREATE INDEX bug_idx_log_modified ON bug(log_modified);
551     for my $idx (qw(owner submitter done forwarded last_modified),
552                  qw(severity creation log_modified),
553                 ) {
554         $sqlt_table->add_index(name => 'bug_idx'.$idx,
555                                fields => [$idx]);
556     }
557 }
558
559 =head1 Utility Functions
560
561 =cut
562
563 =head2 set_related_packages
564
565  $b->set_related_packages($relationship,
566                           \@packages,
567                           $package_cache ,
568                          );
569
570 Set bug-related packages.
571
572 =cut
573
574 sub set_related_packages {
575     my ($self,$relationship,$pkgs,$pkg_cache) = @_;
576
577     my @unset_packages;
578     my @pkg_ids;
579     if ($relationship =~ /binpackages/) {
580         for my $pkg (@{$pkgs}) {
581             my $pkg_id =
582               $self->result_source->schema->resultset('BinPkg')->
583               get_bin_pkg_id($pkg);
584             if (not defined $pkg_id) {
585                 push @unset_packages,$pkg;
586             } else {
587                push @pkg_ids, $pkg_id;
588             }
589         }
590     } elsif ($relationship =~ /srcpackages/) {
591         for my $pkg (@{$pkgs}) {
592             my $pkg_id =
593               $self->result_source->schema->resultset('SrcPkg')->
594               get_src_pkg_id($pkg);
595             if (not defined $pkg_id) {
596                 push @unset_packages,$pkg;
597             } else {
598                 push @pkg_ids,$pkg_id;
599             }
600         }
601     } else {
602         croak "Unsupported relationship $relationship";
603     }
604     @pkg_ids = uniq @pkg_ids;
605     if ($relationship eq 'binpackages') {
606         $self->set_binpackages([map {{id => $_}} @pkg_ids]);
607     } elsif ($relationship eq 'srcpackages') {
608         $self->set_srcpackages([map {{id => $_}} @pkg_ids]);
609     } elsif ($relationship eq 'affects_binpackages') {
610         $self->set_affects_binpackages([map {{id => $_}} @pkg_ids]);
611     } elsif ($relationship eq 'affects_srcpackages') {
612         $self->set_affects_srcpackages([map {{id => $_}} @pkg_ids]);
613     } else {
614         croak "Unsupported relationship $relationship";
615     }
616     return @unset_packages
617 }
618 # You can replace this text with custom code or comments, and it will be preserved on regeneration
619 1;