File Coverage

blib/lib/DBIx/Class/ResultSource.pm
Criterion Covered Total %
statement 412 483 85.3
branch 190 262 72.5
condition 188 278 67.6
subroutine 59 74 79.7
pod 18 27 66.6
total 867 1124 77.1


line stmt bran cond sub pod time code
1             package DBIx::Class::ResultSource;
2              
3             ### !!!NOTE!!!
4             #
5             # Some of the methods defined here will be around()-ed by code at the
6             # end of ::ResultSourceProxy. The reason for this strange arrangement
7             # is that the list of around()s of methods in this class depends
8             # directly on the list of may-not-be-defined-yet methods within
9             # ::ResultSourceProxy itself.
10             # If this sounds terrible - it is. But got to work with what we have.
11             #
12              
13 312     312   1899 use strict;
  312         724  
  312         8347  
14 312     312   1591 use warnings;
  312         671  
  312         7942  
15              
16 312     312   1705 use base 'DBIx::Class::ResultSource::RowParser';
  312         711  
  312         113310  
17              
18 312     312   2442 use DBIx::Class::Carp;
  312         739  
  312         1500  
19 312         24598 use DBIx::Class::_Util qw(
20             UNRESOLVABLE_CONDITION DUMMY_ALIASPAIR
21             dbic_internal_try fail_on_internal_call
22             refdesc emit_loud_diag dump_value serialize bag_eq
23 312     312   1981 );
  312         780  
24 312     312   2082 use DBIx::Class::SQLMaker::Util qw( normalize_sqla_condition extract_equality_conditions );
  312         739  
  312         15167  
25 312     312   109676 use DBIx::Class::ResultSource::FromSpec::Util 'fromspec_columns_info';
  312         957  
  312         17276  
26 312     312   2184 use SQL::Abstract 'is_literal_value';
  312         720  
  312         12775  
27 312     312   16712 use Devel::GlobalDestruction;
  312         27082  
  312         2403  
28 312     312   20597 use Scalar::Util qw( blessed weaken isweak refaddr );
  312         697  
  312         16052  
29              
30             # FIXME - somehow breaks ResultSetManager, do not remove until investigated
31 312     312   218383 use DBIx::Class::ResultSet;
  312         2100  
  312         11981  
32              
33 312     312   2398 use namespace::clean;
  312         2390  
  312         3392  
34              
35             # This global is present for the afaik nonexistent, but nevertheless possible
36             # case of folks using stock ::ResultSet with a completely custom Result-class
37             # hierarchy, not derived from DBIx::Class::Row at all
38             # Instead of patching stuff all over the place - this would be one convenient
39             # place to override things if need be
40             our $__expected_result_class_isa = 'DBIx::Class::Row';
41              
42             my @hashref_attributes = qw(
43             source_info resultset_attributes
44             _columns _unique_constraints _relationships
45             );
46             my @arrayref_attributes = qw(
47             _ordered_columns _primaries
48             );
49             __PACKAGE__->mk_group_accessors(rsrc_instance_specific_attribute =>
50             @hashref_attributes,
51             @arrayref_attributes,
52             qw( source_name name column_info_from_storage sqlt_deploy_callback ),
53             );
54              
55             __PACKAGE__->mk_group_accessors(rsrc_instance_specific_handler => qw(
56             resultset_class
57             result_class
58             ));
59              
60             =head1 NAME
61              
62             DBIx::Class::ResultSource - Result source object
63              
64             =head1 SYNOPSIS
65              
66             # Create a table based result source, in a result class.
67              
68             package MyApp::Schema::Result::Artist;
69             use base qw/DBIx::Class::Core/;
70              
71             __PACKAGE__->table('artist');
72             __PACKAGE__->add_columns(qw/ artistid name /);
73             __PACKAGE__->set_primary_key('artistid');
74             __PACKAGE__->has_many(cds => 'MyApp::Schema::Result::CD');
75              
76             1;
77              
78             # Create a query (view) based result source, in a result class
79             package MyApp::Schema::Result::Year2000CDs;
80             use base qw/DBIx::Class::Core/;
81              
82             __PACKAGE__->load_components('InflateColumn::DateTime');
83             __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
84              
85             __PACKAGE__->table('year2000cds');
86             __PACKAGE__->result_source->is_virtual(1);
87             __PACKAGE__->result_source->view_definition(
88             "SELECT cdid, artist, title FROM cd WHERE year ='2000'"
89             );
90              
91              
92             =head1 DESCRIPTION
93              
94             A ResultSource is an object that represents a source of data for querying.
95              
96             This class is a base class for various specialised types of result
97             sources, for example L. Table is the
98             default result source type, so one is created for you when defining a
99             result class as described in the synopsis above.
100              
101             More specifically, the L base class pulls in the
102             L component, which defines
103             the L method.
104             When called, C creates and stores an instance of
105             L. Luckily, to use tables as result
106             sources, you don't need to remember any of this.
107              
108             Result sources representing select queries, or views, can also be
109             created, see L for full details.
110              
111             =head2 Finding result source objects
112              
113             As mentioned above, a result source instance is created and stored for
114             you when you define a
115             L.
116              
117             You can retrieve the result source at runtime in the following ways:
118              
119             =over
120              
121             =item From a Schema object:
122              
123             $schema->source($source_name);
124              
125             =item From a Result object:
126              
127             $result->result_source;
128              
129             =item From a ResultSet object:
130              
131             $rs->result_source;
132              
133             =back
134              
135             =head1 METHODS
136              
137             =head2 new
138              
139             $class->new();
140              
141             $class->new({attribute_name => value});
142              
143             Creates a new ResultSource object. Not normally called directly by end users.
144              
145             =cut
146              
147             {
148             my $rsrc_registry;
149              
150             sub __derived_instances {
151             map {
152             (defined $_->{weakref})
153             ? $_->{weakref}
154             : ()
155 144334 50   144334   223005 } values %{ $rsrc_registry->{ refaddr($_[0]) }{ derivatives } }
  29472         76414  
  144334         739201  
156             }
157              
158             sub new {
159 101367     101367 1 279903 my ($class, $attrs) = @_;
160 101367 100       251923 $class = ref $class if ref $class;
161              
162 101367         211331 my $ancestor = delete $attrs->{__derived_from};
163              
164 101367         684926 my $self = bless { %$attrs }, $class;
165              
166              
167             DBIx::Class::_ENV_::ASSERT_NO_ERRONEOUS_METAINSTANCE_USE
168             and
169             # a constructor with 'name' as sole arg clearly isn't "inheriting" from anything
170 101367         216912 ( not ( keys(%$self) == 1 and exists $self->{name} ) )
171             and
172             defined CORE::caller(1)
173             and
174             (CORE::caller(1))[3] !~ / ::new$ | ^ DBIx::Class :: (?:
175             ResultSourceProxy::Table::table
176             |
177             ResultSourceProxy::Table::_init_result_source_instance
178             |
179             ResultSource::clone
180             ) $ /x
181             and
182             local $Carp::CarpLevel = $Carp::CarpLevel + 1
183             and
184             Carp::confess("Incorrect instantiation of '$self': you almost certainly wanted to call ->clone() instead");
185              
186              
187             my $own_slot = $rsrc_registry->{
188 101367         474018 my $own_addr = refaddr $self
189             } = { derivatives => {} };
190              
191 101367         380433 weaken( $own_slot->{weakref} = $self );
192              
193 101367 100 66     477705 if(
194             length ref $ancestor
195             and
196             my $ancestor_slot = $rsrc_registry->{
197             my $ancestor_addr = refaddr $ancestor
198             }
199             ) {
200              
201             # on ancestry recording compact registry slots, prevent unbound growth
202 89212         771996 for my $r ( $rsrc_registry, map { $_->{derivatives} } values %$rsrc_registry ) {
  12180073         17210762  
203             defined $r->{$_}{weakref} or delete $r->{$_}
204 12269285   66     37910125 for keys %$r;
205             }
206              
207 89212         994220 weaken( $_->{$own_addr} = $own_slot ) for map
208 185841         682627 { $_->{derivatives} }
209             (
210             $ancestor_slot,
211             (grep
212 12123129         20588597 { defined $_->{derivatives}{$ancestor_addr} }
213             values %$rsrc_registry
214             ),
215             )
216             ;
217             }
218              
219              
220 101367   100     308620 $self->{resultset_class} ||= 'DBIx::Class::ResultSet';
221 101367   50     220829 $self->{name} ||= "!!NAME NOT SET!!";
222 101367   50     426457 $self->{_columns_info_loaded} ||= 0;
223 101367   100     218308 $self->{sqlt_deploy_callback} ||= 'default_sqlt_deploy_hook';
224              
225 608202 100       2342334 $self->{$_} = { %{ $self->{$_} || {} } }
226 101367         211808 for @hashref_attributes, '__metadata_divergencies';
227              
228 202734 100       720046 $self->{$_} = [ @{ $self->{$_} || [] } ]
229 101367         197828 for @arrayref_attributes;
230              
231 101367         917862 $self;
232             }
233              
234             sub DBIx::Class::__Rsrc_Ancestry_iThreads_handler__::CLONE {
235 0     0   0 for my $r ( $rsrc_registry, map { $_->{derivatives} } values %$rsrc_registry ) {
  0         0  
236             %$r = map {
237 0         0 defined $_->{weakref}
238 0 0       0 ? ( refaddr $_->{weakref} => $_ )
239             : ()
240             } values %$r
241             }
242             }
243              
244              
245             # needs direct access to $rsrc_registry under an assert
246             #
247             sub set_rsrc_instance_specific_attribute {
248              
249             # only mark if we are setting something different
250 114332 100 100 114332 0 1481337 if (
      100        
      100        
      100        
251             (
252             defined( $_[2] )
253             xor
254             defined( $_[0]->{$_[1]} )
255             )
256             or
257             (
258             # both defined
259             defined( $_[2] )
260             and
261             (
262             # differ in ref-ness
263             (
264             length ref( $_[2] )
265             xor
266             length ref( $_[0]->{$_[1]} )
267             )
268             or
269             # both refs (the mark-on-same-ref is deliberate)
270             length ref( $_[2] )
271             or
272             # both differing strings
273             $_[2] ne $_[0]->{$_[1]}
274             )
275             )
276             ) {
277              
278 114202         182750 my $callsite;
279             # need to protect $_ here
280 114202         281426 for my $derivative (
281             $_[0]->__derived_instances,
282              
283             # DO NOT REMOVE - this blob is marking *ancestors* as tainted, here to
284             # weed out any fallout from https://github.com/dbsrgits/dbix-class/commit/9e36e3ec
285             # Note that there is no way to kill this warning, aside from never
286             # calling set_primary_key etc more than once per hierarchy
287             # (this is why the entire thing is guarded by an assert)
288             (
289             (
290             DBIx::Class::_ENV_::ASSERT_NO_ERRONEOUS_METAINSTANCE_USE
291             and
292             grep { $_[1] eq $_ } qw( _unique_constraints _primaries source_info )
293             )
294             ? (
295             map
296             { defined($_->{weakref}) ? $_->{weakref} : () }
297             grep
298             { defined( ( $_->{derivatives}{refaddr($_[0])} || {} )->{weakref} ) }
299             values %$rsrc_registry
300             )
301             : ()
302             ),
303             ) {
304              
305 24   66     103 $derivative->{__metadata_divergencies}{$_[1]}{ $callsite ||= do {
306              
307             #
308             # FIXME - this is horrible, but it's the best we can do for now
309             # Replace when Carp::Skip is written (it *MUST* take this use-case
310             # into consideration)
311             #
312 9         33 my ($cs) = DBIx::Class::Carp::__find_caller(__PACKAGE__);
313              
314 9         24 my ($fr_num, @fr) = 1;
315 9         58 while( @fr = CORE::caller($fr_num++) ) {
316 46 100 66     870 $cs =~ /^ \Qat $fr[1] line $fr[2]\E (?: $ | \n )/x
317             and
318             $fr[3] =~ s/.+:://
319             and
320             last
321             }
322              
323             # FIXME - using refdesc here isn't great, but I can't think of anything
324             # better at this moment
325             @fr
326 9 100       55 ? "@{[ refdesc $_[0] ]}->$fr[3](...) $cs"
  2         11  
327             : "$cs"
328             ;
329             } } = 1;
330             }
331             }
332              
333 114332         381959 $_[0]->{$_[1]} = $_[2];
334             }
335             }
336              
337             sub get_rsrc_instance_specific_attribute {
338              
339             $_[0]->__emit_stale_metadata_diag( $_[1] ) if (
340             ! $_[0]->{__in_rsrc_setter_callstack}
341             and
342 907493 100 100 907493 0 8715841 $_[0]->{__metadata_divergencies}{$_[1]}
343             );
344              
345 907493         4300238 $_[0]->{$_[1]};
346             }
347              
348              
349             # reuse the elaborate set logic of instance_specific_attr
350             sub set_rsrc_instance_specific_handler {
351 325     325 0 32033 $_[0]->set_rsrc_instance_specific_attribute($_[1], $_[2]);
352              
353             # trigger a load for the case of $foo->handler_accessor("bar")->new
354 325 100       2038 $_[0]->get_rsrc_instance_specific_handler($_[1])
355             if defined wantarray;
356             }
357              
358             # This is essentially the same logic as get_component_class
359             # (in DBIC::AccessorGroup). However the latter is a grouped
360             # accessor type, and here we are strictly after a 'simple'
361             # So we go ahead and recreate the logic as found in ::AG
362             sub get_rsrc_instance_specific_handler {
363              
364             # emit desync warnings if any
365 331033     331033 0 12448500 my $val = $_[0]->get_rsrc_instance_specific_attribute( $_[1] );
366              
367             # plain string means class - load it
368 312     312   474145 no strict 'refs';
  312         901  
  312         265207  
369 331033 100 66     1775609 if (
      100        
      100        
370             defined $val
371             and
372             # inherited CAG can't be set to undef effectively, so people may use ''
373             length $val
374             and
375             ! defined blessed $val
376             and
377 331030         1695786 ! ${"${val}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"}
378             ) {
379 21764         86646 $_[0]->ensure_class_loaded($val);
380              
381 21764         55067 ${"${val}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"}
382 21764         395816 = do { \(my $anon = 'loaded') };
  21764         45063  
383             }
384              
385 331033         3229996 $val;
386             }
387              
388              
389             sub __construct_stale_metadata_diag {
390 4 50   4   11 return '' unless $_[0]->{__metadata_divergencies}{$_[1]};
391              
392 4         9 my ($fr_num, @fr);
393              
394             # find the CAG getter FIRST
395             # allows unlimited user-namespace overrides without screwing around with
396             # $LEVEL-like crap
397 4   66     37 while(
398             @fr = CORE::caller(++$fr_num)
399             and
400             $fr[3] ne 'DBIx::Class::ResultSource::get_rsrc_instance_specific_attribute'
401 4         28 ) { 1 }
402              
403 4 50       11 Carp::confess( "You are not supposed to call __construct_stale_metadata_diag here..." )
404             unless @fr;
405              
406             # then find the first non-local, non-private reportable callsite
407 4   100     2061 while (
      66        
408             @fr = CORE::caller(++$fr_num)
409             and
410             (
411             $fr[2] == 0
412             or
413             $fr[3] eq '(eval)'
414             or
415             $fr[1] =~ /^\(eval \d+\)$/
416             or
417             $fr[3] =~ /::(?: __ANON__ | _\w+ )$/x
418             or
419             $fr[0] =~ /^DBIx::Class::ResultSource/
420             )
421 8         109 ) { 1 }
422              
423 4 50 33     28 my $by = ( @fr and $fr[3] =~ s/.+::// )
424             # FIXME - using refdesc here isn't great, but I can't think of anything
425             # better at this moment
426 4         15 ? " by 'getter' @{[ refdesc $_[0] ]}->$fr[3](...)\n within the callstack beginning"
427             : ''
428             ;
429              
430             # Given the full stacktrace combined with the really involved callstack
431             # there is no chance the emitter will properly deduplicate this
432             # Only complain once per callsite per source
433             return( ( $by and $_[0]->{__encountered_divergencies}{$by}++ )
434              
435             ? ''
436              
437 2         49 : "$_[0] (the metadata instance of source '@{[ $_[0]->source_name ]}') is "
438             . "*OUTDATED*, and does not reflect the modifications of its "
439             . "*ancestors* as follows:\n"
440             . join( "\n",
441             map
442 3         24 { " * $_->[0]" }
443             sort
444 1         20 { $a->[1] cmp $b->[1] }
445             map
446 3         20 { [ $_, ( $_ =~ /( at .+? line \d+)/ ) ] }
447 4 100 66     29 keys %{ $_[0]->{__metadata_divergencies}{$_[1]} }
  2         11  
448             )
449             . "\nStale metadata accessed${by}"
450             );
451             }
452              
453             sub __emit_stale_metadata_diag {
454 4   100 4   14 emit_loud_diag(
455             msg => (
456             # short circuit: no message - no diag
457             $_[0]->__construct_stale_metadata_diag($_[1])
458             ||
459             return 0
460             ),
461             # the constructor already does deduplication
462             emit_dups => 1,
463             confess => DBIx::Class::_ENV_::ASSERT_NO_ERRONEOUS_METAINSTANCE_USE,
464             );
465             }
466              
467             =head2 clone
468              
469             $rsrc_instance->clone( atribute_name => overridden_value );
470              
471             A wrapper around L inheriting any defaults from the callee. This method
472             also not normally invoked directly by end users.
473              
474             =cut
475              
476             sub clone {
477 89212     89212 1 159687 my $self = shift;
478              
479             $self->new({
480             (
481             (length ref $self)
482             ? ( %$self, __derived_from => $self )
483             : ()
484             ),
485             (
486             (@_ == 1 and ref $_[0] eq 'HASH')
487 89212 50 66     947818 ? %{ $_[0] }
  51318 100       453322  
488             : @_
489             ),
490             });
491             }
492              
493             =pod
494              
495             =head2 add_columns
496              
497             =over
498              
499             =item Arguments: @columns
500              
501             =item Return Value: L<$result_source|/new>
502              
503             =back
504              
505             $source->add_columns(qw/col1 col2 col3/);
506              
507             $source->add_columns('col1' => \%col1_info, 'col2' => \%col2_info, ...);
508              
509             $source->add_columns(
510             'col1' => { data_type => 'integer', is_nullable => 1, ... },
511             'col2' => { data_type => 'text', is_auto_increment => 1, ... },
512             );
513              
514             Adds columns to the result source. If supplied colname => hashref
515             pairs, uses the hashref as the L for that column. Repeated
516             calls of this method will add more columns, not replace them.
517              
518             The column names given will be created as accessor methods on your
519             L objects. You can change the name of the accessor
520             by supplying an L in the column_info hash.
521              
522             If a column name beginning with a plus sign ('+col1') is provided, the
523             attributes provided will be merged with any existing attributes for the
524             column, with the new attributes taking precedence in the case that an
525             attribute already exists. Using this without a hashref
526             (C<< $source->add_columns(qw/+col1 +col2/) >>) is legal, but useless --
527             it does the same thing it would do without the plus.
528              
529             The contents of the column_info are not set in stone. The following
530             keys are currently recognised/used by DBIx::Class:
531              
532             =over 4
533              
534             =item accessor
535              
536             { accessor => '_name' }
537              
538             # example use, replace standard accessor with one of your own:
539             sub name {
540             my ($self, $value) = @_;
541              
542             die "Name cannot contain digits!" if($value =~ /\d/);
543             $self->_name($value);
544              
545             return $self->_name();
546             }
547              
548             Use this to set the name of the accessor method for this column. If unset,
549             the name of the column will be used.
550              
551             =item data_type
552              
553             { data_type => 'integer' }
554              
555             This contains the column type. It is automatically filled if you use the
556             L producer, or the
557             L module.
558              
559             Currently there is no standard set of values for the data_type. Use
560             whatever your database supports.
561              
562             =item size
563              
564             { size => 20 }
565              
566             The length of your column, if it is a column type that can have a size
567             restriction. This is currently only used to create tables from your
568             schema, see L.
569              
570             { size => [ 9, 6 ] }
571              
572             For decimal or float values you can specify an ArrayRef in order to
573             control precision, assuming your database's
574             L supports it.
575              
576             =item is_nullable
577              
578             { is_nullable => 1 }
579              
580             Set this to a true value for a column that is allowed to contain NULL
581             values, default is false. This is currently only used to create tables
582             from your schema, see L.
583              
584             =item is_auto_increment
585              
586             { is_auto_increment => 1 }
587              
588             Set this to a true value for a column whose value is somehow
589             automatically set, defaults to false. This is used to determine which
590             columns to empty when cloning objects using
591             L. It is also used by
592             L.
593              
594             =item is_numeric
595              
596             { is_numeric => 1 }
597              
598             Set this to a true or false value (not C) to explicitly specify
599             if this column contains numeric data. This controls how set_column
600             decides whether to consider a column dirty after an update: if
601             C is true a numeric comparison C<< != >> will take place
602             instead of the usual C
603              
604             If not specified the storage class will attempt to figure this out on
605             first access to the column, based on the column C. The
606             result will be cached in this attribute.
607              
608             =item is_foreign_key
609              
610             { is_foreign_key => 1 }
611              
612             Set this to a true value for a column that contains a key from a
613             foreign table, defaults to false. This is currently only used to
614             create tables from your schema, see L.
615              
616             =item default_value
617              
618             { default_value => \'now()' }
619              
620             Set this to the default value which will be inserted into a column by
621             the database. Can contain either a value or a function (use a
622             reference to a scalar e.g. C<\'now()'> if you want a function). This
623             is currently only used to create tables from your schema, see
624             L.
625              
626             See the note on L for more information about possible
627             issues related to db-side default values.
628              
629             =item sequence
630              
631             { sequence => 'my_table_seq' }
632              
633             Set this on a primary key column to the name of the sequence used to
634             generate a new key value. If not specified, L
635             will attempt to retrieve the name of the sequence from the database
636             automatically.
637              
638             =item retrieve_on_insert
639              
640             { retrieve_on_insert => 1 }
641              
642             For every column where this is set to true, DBIC will retrieve the RDBMS-side
643             value upon a new row insertion (normally only the autoincrement PK is
644             retrieved on insert). C is used automatically if
645             supported by the underlying storage, otherwise an extra SELECT statement is
646             executed to retrieve the missing data.
647              
648             =item auto_nextval
649              
650             { auto_nextval => 1 }
651              
652             Set this to a true value for a column whose value is retrieved automatically
653             from a sequence or function (if supported by your Storage driver.) For a
654             sequence, if you do not use a trigger to get the nextval, you have to set the
655             L value as well.
656              
657             Also set this for MSSQL columns with the 'uniqueidentifier'
658             L whose values you want to
659             automatically generate using C, unless they are a primary key in which
660             case this will be done anyway.
661              
662             =item extra
663              
664             This is used by L and L
665             to add extra non-generic data to the column. For example: C<< extra
666             => { unsigned => 1} >> is used by the MySQL producer to set an integer
667             column to unsigned. For more details, see
668             L.
669              
670             =back
671              
672             =head2 add_column
673              
674             =over
675              
676             =item Arguments: $colname, \%columninfo?
677              
678             =item Return Value: 1/0 (true/false)
679              
680             =back
681              
682             $source->add_column('col' => \%info);
683              
684             Add a single column and optional column info. Uses the same column
685             info keys as L.
686              
687             =cut
688              
689             sub add_columns {
690             my ($self, @cols) = @_;
691              
692             local $self->{__in_rsrc_setter_callstack} = 1
693             unless $self->{__in_rsrc_setter_callstack};
694              
695             $self->_ordered_columns(\@cols) unless $self->_ordered_columns;
696              
697             my ( @added, $colinfos );
698             my $columns = $self->_columns;
699              
700             while (my $col = shift @cols) {
701             my $column_info =
702             (
703             $col =~ s/^\+//
704             and
705             ( $colinfos ||= $self->columns_info )->{$col}
706             )
707             ||
708             {}
709             ;
710              
711             # If next entry is { ... } use that for the column info, if not
712             # use an empty hashref
713             if (ref $cols[0]) {
714             my $new_info = shift(@cols);
715             %$column_info = (%$column_info, %$new_info);
716             }
717             push(@added, $col) unless exists $columns->{$col};
718             $columns->{$col} = $column_info;
719             }
720              
721             push @{ $self->_ordered_columns }, @added;
722             $self->_columns($columns);
723             return $self;
724             }
725              
726             sub add_column :DBIC_method_is_indirect_sugar {
727 3     3 1 36 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
728 3         57 shift->add_columns(@_)
729 312     312   3561 }
  312         783  
  312         3801  
730              
731             =head2 has_column
732              
733             =over
734              
735             =item Arguments: $colname
736              
737             =item Return Value: 1/0 (true/false)
738              
739             =back
740              
741             if ($source->has_column($colname)) { ... }
742              
743             Returns true if the source has a column of this name, false otherwise.
744              
745             =cut
746              
747             sub has_column {
748             my ($self, $column) = @_;
749             return exists $self->_columns->{$column};
750             }
751              
752             =head2 column_info
753              
754             =over
755              
756             =item Arguments: $colname
757              
758             =item Return Value: Hashref of info
759              
760             =back
761              
762             my $info = $source->column_info($col);
763              
764             Returns the column metadata hashref for a column, as originally passed
765             to L. See L above for information on the
766             contents of the hashref.
767              
768             =cut
769              
770             sub column_info :DBIC_method_is_indirect_sugar {
771 7     7 1 96 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
772              
773             #my ($self, $column) = @_;
774 7         156 $_[0]->columns_info([ $_[1] ])->{$_[1]};
775 312     312   90765 }
  312         782  
  312         3905  
776              
777             =head2 columns
778              
779             =over
780              
781             =item Arguments: none
782              
783             =item Return Value: Ordered list of column names
784              
785             =back
786              
787             my @column_names = $source->columns;
788              
789             Returns all column names in the order they were declared to L.
790              
791             =cut
792              
793             sub columns {
794             my $self = shift;
795             $self->throw_exception(
796             "columns() is a read-only accessor, did you mean add_columns()?"
797             ) if @_;
798             return @{$self->{_ordered_columns}||[]};
799             }
800              
801             =head2 columns_info
802              
803             =over
804              
805             =item Arguments: \@colnames ?
806              
807             =item Return Value: Hashref of column name/info pairs
808              
809             =back
810              
811             my $columns_info = $source->columns_info;
812              
813             Like L but returns information for the requested columns. If
814             the optional column-list arrayref is omitted it returns info on all columns
815             currently defined on the ResultSource via L.
816              
817             =cut
818              
819             sub columns_info {
820             my ($self, $columns) = @_;
821              
822             my $colinfo = $self->_columns;
823              
824             if (
825             ! $self->{_columns_info_loaded}
826             and
827             $self->column_info_from_storage
828             and
829             grep { ! $_->{data_type} } values %$colinfo
830             and
831             my $stor = dbic_internal_try { $self->schema->storage }
832             ) {
833             $self->{_columns_info_loaded}++;
834              
835             # try for the case of storage without table
836             dbic_internal_try {
837             my $info = $stor->columns_info_for( $self->from );
838             my $lc_info = { map
839             { (lc $_) => $info->{$_} }
840             ( keys %$info )
841             };
842              
843             foreach my $col ( keys %$colinfo ) {
844             $colinfo->{$col} = {
845             %{ $colinfo->{$col} },
846             %{ $info->{$col} || $lc_info->{lc $col} || {} }
847             };
848             }
849             };
850             }
851              
852             my %ret;
853              
854             if ($columns) {
855             for (@$columns) {
856             if (my $inf = $colinfo->{$_}) {
857             $ret{$_} = $inf;
858             }
859             else {
860             $self->throw_exception( sprintf (
861             "No such column '%s' on source '%s'",
862             $_,
863             $self->source_name || $self->name || 'Unknown source...?',
864             ));
865             }
866             }
867             }
868             else {
869             # the shallow copy is crucial - there are exists() checks within
870             # the wider codebase
871             %ret = %$colinfo;
872             }
873              
874             return \%ret;
875             }
876              
877             =head2 remove_columns
878              
879             =over
880              
881             =item Arguments: @colnames
882              
883             =item Return Value: not defined
884              
885             =back
886              
887             $source->remove_columns(qw/col1 col2 col3/);
888              
889             Removes the given list of columns by name, from the result source.
890              
891             B: Removing a column that is also used in the sources primary
892             key, or in one of the sources unique constraints, B result in a
893             broken result source.
894              
895             =head2 remove_column
896              
897             =over
898              
899             =item Arguments: $colname
900              
901             =item Return Value: not defined
902              
903             =back
904              
905             $source->remove_column('col');
906              
907             Remove a single column by name from the result source, similar to
908             L.
909              
910             B: Removing a column that is also used in the sources primary
911             key, or in one of the sources unique constraints, B result in a
912             broken result source.
913              
914             =cut
915              
916             sub remove_columns {
917             my ($self, @to_remove) = @_;
918              
919             local $self->{__in_rsrc_setter_callstack} = 1
920             unless $self->{__in_rsrc_setter_callstack};
921              
922             my $columns = $self->_columns
923             or return;
924              
925             my %to_remove;
926             for (@to_remove) {
927             delete $columns->{$_};
928             ++$to_remove{$_};
929             }
930              
931             $self->_ordered_columns([ grep { not $to_remove{$_} } @{$self->_ordered_columns} ]);
932             }
933              
934             sub remove_column :DBIC_method_is_indirect_sugar {
935 0     0 1 0 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
936 0         0 shift->remove_columns(@_)
937 312     312   209710 }
  312         1963  
  312         5431  
938              
939             =head2 set_primary_key
940              
941             =over 4
942              
943             =item Arguments: @cols
944              
945             =item Return Value: not defined
946              
947             =back
948              
949             Defines one or more columns as primary key for this source. Must be
950             called after L.
951              
952             Additionally, defines a L
953             named C.
954              
955             Note: you normally do want to define a primary key on your sources
956             B.
957             See
958             L
959             for more info.
960              
961             =cut
962              
963             sub set_primary_key {
964             my ($self, @cols) = @_;
965              
966             local $self->{__in_rsrc_setter_callstack} = 1
967             unless $self->{__in_rsrc_setter_callstack};
968              
969             my $colinfo = $self->columns_info(\@cols);
970             for my $col (@cols) {
971             carp_unique(sprintf (
972             "Primary key of source '%s' includes the column '%s' which has its "
973             . "'is_nullable' attribute set to true. This is a mistake and will cause "
974             . 'various Result-object operations to fail',
975             $self->source_name || $self->name || 'Unknown source...?',
976             $col,
977             )) if $colinfo->{$col}{is_nullable};
978             }
979              
980             $self->_primaries(\@cols);
981              
982             $self->add_unique_constraint(primary => \@cols);
983             }
984              
985             =head2 primary_columns
986              
987             =over 4
988              
989             =item Arguments: none
990              
991             =item Return Value: Ordered list of primary column names
992              
993             =back
994              
995             Read-only accessor which returns the list of primary keys, supplied by
996             L.
997              
998             =cut
999              
1000             sub primary_columns {
1001             return @{shift->_primaries||[]};
1002             }
1003              
1004             # a helper method that will automatically die with a descriptive message if
1005             # no pk is defined on the source in question. For internal use to save
1006             # on if @pks... boilerplate
1007             sub _pri_cols_or_die {
1008 18249     18249   77340 my $self = shift;
1009 18249 100 0     344827 my @pcols = $self->primary_columns
1010             or $self->throw_exception (sprintf(
1011             "Operation requires a primary key to be declared on '%s' via set_primary_key",
1012             # source_name is set only after schema-registration
1013             $self->source_name || $self->result_class || $self->name || 'Unknown source...?',
1014             ));
1015 18247         58651 return @pcols;
1016             }
1017              
1018             # same as above but mandating single-column PK (used by relationship condition
1019             # inference)
1020             sub _single_pri_col_or_die {
1021 15023     15023   207509 my $self = shift;
1022 15023         48369 my ($pri, @too_many) = $self->_pri_cols_or_die;
1023              
1024 15023 50 0     41824 $self->throw_exception( sprintf(
1025             "Operation requires a single-column primary key declared on '%s'",
1026             $self->source_name || $self->result_class || $self->name || 'Unknown source...?',
1027             )) if @too_many;
1028 15023         45648 return $pri;
1029             }
1030              
1031              
1032             =head2 sequence
1033              
1034             Manually define the correct sequence for your table, to avoid the overhead
1035             associated with looking up the sequence automatically. The supplied sequence
1036             will be applied to the L of each L
1037              
1038             =over 4
1039              
1040             =item Arguments: $sequence_name
1041              
1042             =item Return Value: not defined
1043              
1044             =back
1045              
1046             =cut
1047              
1048             sub sequence {
1049             my ($self,$seq) = @_;
1050              
1051             local $self->{__in_rsrc_setter_callstack} = 1
1052             unless $self->{__in_rsrc_setter_callstack};
1053              
1054             my @pks = $self->primary_columns
1055             or return;
1056              
1057             $_->{sequence} = $seq
1058             for values %{ $self->columns_info (\@pks) };
1059             }
1060              
1061              
1062             =head2 add_unique_constraint
1063              
1064             =over 4
1065              
1066             =item Arguments: $name?, \@colnames
1067              
1068             =item Return Value: not defined
1069              
1070             =back
1071              
1072             Declare a unique constraint on this source. Call once for each unique
1073             constraint.
1074              
1075             # For UNIQUE (column1, column2)
1076             __PACKAGE__->add_unique_constraint(
1077             constraint_name => [ qw/column1 column2/ ],
1078             );
1079              
1080             Alternatively, you can specify only the columns:
1081              
1082             __PACKAGE__->add_unique_constraint([ qw/column1 column2/ ]);
1083              
1084             This will result in a unique constraint named
1085             C, where C is replaced with the table
1086             name.
1087              
1088             Unique constraints are used, for example, when you pass the constraint
1089             name as the C attribute to L. Then
1090             only columns in the constraint are searched.
1091              
1092             Throws an error if any of the given column names do not yet exist on
1093             the result source.
1094              
1095             =cut
1096              
1097             sub add_unique_constraint {
1098             my $self = shift;
1099              
1100             local $self->{__in_rsrc_setter_callstack} = 1
1101             unless $self->{__in_rsrc_setter_callstack};
1102              
1103             if (@_ > 2) {
1104             $self->throw_exception(
1105             'add_unique_constraint() does not accept multiple constraints, use '
1106             . 'add_unique_constraints() instead'
1107             );
1108             }
1109              
1110             my $cols = pop @_;
1111             if (ref $cols ne 'ARRAY') {
1112             $self->throw_exception (
1113             'Expecting an arrayref of constraint columns, got ' . ($cols||'NOTHING')
1114             );
1115             }
1116              
1117             my $name = shift @_;
1118              
1119             $name ||= $self->name_unique_constraint($cols);
1120              
1121             foreach my $col (@$cols) {
1122             $self->throw_exception("No such column $col on table " . $self->name)
1123             unless $self->has_column($col);
1124             }
1125              
1126             my %unique_constraints = $self->unique_constraints;
1127             $unique_constraints{$name} = $cols;
1128             $self->_unique_constraints(\%unique_constraints);
1129             }
1130              
1131             =head2 add_unique_constraints
1132              
1133             =over 4
1134              
1135             =item Arguments: @constraints
1136              
1137             =item Return Value: not defined
1138              
1139             =back
1140              
1141             Declare multiple unique constraints on this source.
1142              
1143             __PACKAGE__->add_unique_constraints(
1144             constraint_name1 => [ qw/column1 column2/ ],
1145             constraint_name2 => [ qw/column2 column3/ ],
1146             );
1147              
1148             Alternatively, you can specify only the columns:
1149              
1150             __PACKAGE__->add_unique_constraints(
1151             [ qw/column1 column2/ ],
1152             [ qw/column3 column4/ ]
1153             );
1154              
1155             This will result in unique constraints named C and
1156             C, where C is replaced with the table name.
1157              
1158             Throws an error if any of the given column names do not yet exist on
1159             the result source.
1160              
1161             See also L.
1162              
1163             =cut
1164              
1165             sub add_unique_constraints :DBIC_method_is_indirect_sugar {
1166 516     516 1 18664 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
1167              
1168 516         1179 my $self = shift;
1169 516         1634 my @constraints = @_;
1170              
1171 516 100 66     2795 if ( !(@constraints % 2) && grep { ref $_ ne 'ARRAY' } @constraints ) {
  1548         4882  
1172             # with constraint name
1173 258         1696 while (my ($name, $constraint) = splice @constraints, 0, 2) {
1174 516         9395 $self->add_unique_constraint($name => $constraint);
1175             }
1176             }
1177             else {
1178             # no constraint name
1179 258         876 foreach my $constraint (@constraints) {
1180 516         9000 $self->add_unique_constraint($constraint);
1181             }
1182             }
1183 312     312   251449 }
  312         812  
  312         2456  
1184              
1185             =head2 name_unique_constraint
1186              
1187             =over 4
1188              
1189             =item Arguments: \@colnames
1190              
1191             =item Return Value: Constraint name
1192              
1193             =back
1194              
1195             $source->table('mytable');
1196             $source->name_unique_constraint(['col1', 'col2']);
1197             # returns
1198             'mytable_col1_col2'
1199              
1200             Return a name for a unique constraint containing the specified
1201             columns. The name is created by joining the table name and each column
1202             name, using an underscore character.
1203              
1204             For example, a constraint on a table named C containing the columns
1205             C and C would result in a constraint name of C<cd_artist_title>. </td> </tr> <tr> <td class="h" > <a name="1206">1206</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1207">1207</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is used by L</add_unique_constraint> if you do not specify the </td> </tr> <tr> <td class="h" > <a name="1208">1208</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> optional constraint name. </td> </tr> <tr> <td class="h" > <a name="1209">1209</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1210">1210</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1211">1211</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1212">1212</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub name_unique_constraint { </td> </tr> <tr> <td class="h" > <a name="1213">1213</a> </td> <td class="c3" > 2717 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1213-1"> 2717 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1213-1"> 1 </a> </td> <td > 7994 </td> <td class="s"> my ($self, $cols) = @_; </td> </tr> <tr> <td class="h" > <a name="1214">1214</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1215">1215</a> </td> <td class="c3" > 2717 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 54407 </td> <td class="s"> my $name = $self->name; </td> </tr> <tr> <td class="h" > <a name="1216">1216</a> </td> <td class="c3" > 2717 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1216-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 9919 </td> <td class="s"> $name = $$name if (ref $name eq 'SCALAR'); </td> </tr> <tr> <td class="h" > <a name="1217">1217</a> </td> <td class="c3" > 2717 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7125 </td> <td class="s"> $name =~ s/ ^ [^\.]+ \. //x; # strip possible schema qualifier </td> </tr> <tr> <td class="h" > <a name="1218">1218</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1219">1219</a> </td> <td class="c3" > 2717 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 14924 </td> <td class="s"> return join '_', $name, @$cols; </td> </tr> <tr> <td class="h" > <a name="1220">1220</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1221">1221</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1222">1222</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 unique_constraints </td> </tr> <tr> <td class="h" > <a name="1223">1223</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1224">1224</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1225">1225</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1226">1226</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1227">1227</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1228">1228</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: Hash of unique constraint data </td> </tr> <tr> <td class="h" > <a name="1229">1229</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1230">1230</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1231">1231</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1232">1232</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->unique_constraints(); </td> </tr> <tr> <td class="h" > <a name="1233">1233</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1234">1234</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Read-only accessor which returns a hash of unique constraints on this </td> </tr> <tr> <td class="h" > <a name="1235">1235</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> source. </td> </tr> <tr> <td class="h" > <a name="1236">1236</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1237">1237</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The hash is keyed by constraint name, and contains an arrayref of </td> </tr> <tr> <td class="h" > <a name="1238">1238</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> column names as values. </td> </tr> <tr> <td class="h" > <a name="1239">1239</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1240">1240</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1241">1241</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1242">1242</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub unique_constraints { </td> </tr> <tr> <td class="h" > <a name="1243">1243</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return %{shift->_unique_constraints||{}}; </td> </tr> <tr> <td class="h" > <a name="1244">1244</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1245">1245</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1246">1246</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 unique_constraint_names </td> </tr> <tr> <td class="h" > <a name="1247">1247</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1248">1248</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1249">1249</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1250">1250</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1251">1251</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1252">1252</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: Unique constraint names </td> </tr> <tr> <td class="h" > <a name="1253">1253</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1254">1254</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1255">1255</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1256">1256</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->unique_constraint_names(); </td> </tr> <tr> <td class="h" > <a name="1257">1257</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1258">1258</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the list of unique constraint names defined on this source. </td> </tr> <tr> <td class="h" > <a name="1259">1259</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1260">1260</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1261">1261</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1262">1262</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub unique_constraint_names { </td> </tr> <tr> <td class="h" > <a name="1263">1263</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($self) = @_; </td> </tr> <tr> <td class="h" > <a name="1264">1264</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1265">1265</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my %unique_constraints = $self->unique_constraints; </td> </tr> <tr> <td class="h" > <a name="1266">1266</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1267">1267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return keys %unique_constraints; </td> </tr> <tr> <td class="h" > <a name="1268">1268</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1269">1269</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1270">1270</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 unique_constraint_columns </td> </tr> <tr> <td class="h" > <a name="1271">1271</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1272">1272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1273">1273</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1274">1274</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $constraintname </td> </tr> <tr> <td class="h" > <a name="1275">1275</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1276">1276</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: List of constraint columns </td> </tr> <tr> <td class="h" > <a name="1277">1277</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1278">1278</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1279">1279</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1280">1280</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->unique_constraint_columns('myconstraint'); </td> </tr> <tr> <td class="h" > <a name="1281">1281</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1282">1282</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the list of columns that make up the specified unique constraint. </td> </tr> <tr> <td class="h" > <a name="1283">1283</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1284">1284</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1285">1285</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1286">1286</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub unique_constraint_columns { </td> </tr> <tr> <td class="h" > <a name="1287">1287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($self, $constraint_name) = @_; </td> </tr> <tr> <td class="h" > <a name="1288">1288</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1289">1289</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my %unique_constraints = $self->unique_constraints; </td> </tr> <tr> <td class="h" > <a name="1290">1290</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1291">1291</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="1292">1292</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Unknown unique constraint $constraint_name on '" . $self->name . "'" </td> </tr> <tr> <td class="h" > <a name="1293">1293</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) unless exists $unique_constraints{$constraint_name}; </td> </tr> <tr> <td class="h" > <a name="1294">1294</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1295">1295</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return @{ $unique_constraints{$constraint_name} }; </td> </tr> <tr> <td class="h" > <a name="1296">1296</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1297">1297</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1298">1298</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 sqlt_deploy_callback </td> </tr> <tr> <td class="h" > <a name="1299">1299</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1300">1300</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over </td> </tr> <tr> <td class="h" > <a name="1301">1301</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1302">1302</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $callback_name | \&callback_code </td> </tr> <tr> <td class="h" > <a name="1303">1303</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1304">1304</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: $callback_name | \&callback_code </td> </tr> <tr> <td class="h" > <a name="1305">1305</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1306">1306</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1307">1307</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1308">1308</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->result_source->sqlt_deploy_callback('mycallbackmethod'); </td> </tr> <tr> <td class="h" > <a name="1309">1309</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1310">1310</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="1311">1311</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1312">1312</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->result_source->sqlt_deploy_callback(sub { </td> </tr> <tr> <td class="h" > <a name="1313">1313</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($source_instance, $sqlt_table) = @_; </td> </tr> <tr> <td class="h" > <a name="1314">1314</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="1315">1315</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } ); </td> </tr> <tr> <td class="h" > <a name="1316">1316</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1317">1317</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> An accessor to set a callback to be called during deployment of </td> </tr> <tr> <td class="h" > <a name="1318">1318</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the schema via L<DBIx::Class::Schema/create_ddl_dir> or </td> </tr> <tr> <td class="h" > <a name="1319">1319</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class::Schema/deploy>. </td> </tr> <tr> <td class="h" > <a name="1320">1320</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1321">1321</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The callback can be set as either a code reference or the name of a </td> </tr> <tr> <td class="h" > <a name="1322">1322</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> method in the current result class. </td> </tr> <tr> <td class="h" > <a name="1323">1323</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1324">1324</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Defaults to L</default_sqlt_deploy_hook>. </td> </tr> <tr> <td class="h" > <a name="1325">1325</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1326">1326</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Your callback will be passed the $source object representing the </td> </tr> <tr> <td class="h" > <a name="1327">1327</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ResultSource instance being deployed, and the </td> </tr> <tr> <td class="h" > <a name="1328">1328</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<SQL::Translator::Schema::Table> object being created from it. The </td> </tr> <tr> <td class="h" > <a name="1329">1329</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> callback can be used to manipulate the table object or add your own </td> </tr> <tr> <td class="h" > <a name="1330">1330</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> customised indexes. If you need to manipulate a non-table object, use </td> </tr> <tr> <td class="h" > <a name="1331">1331</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the L<DBIx::Class::Schema/sqlt_deploy_hook>. </td> </tr> <tr> <td class="h" > <a name="1332">1332</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1333">1333</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> See L<DBIx::Class::Manual::Cookbook/Adding Indexes And Functions To </td> </tr> <tr> <td class="h" > <a name="1334">1334</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Your SQL> for examples. </td> </tr> <tr> <td class="h" > <a name="1335">1335</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1336">1336</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This sqlt deployment callback can only be used to manipulate </td> </tr> <tr> <td class="h" > <a name="1337">1337</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SQL::Translator objects as they get turned into SQL. To execute </td> </tr> <tr> <td class="h" > <a name="1338">1338</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> post-deploy statements which SQL::Translator does not currently </td> </tr> <tr> <td class="h" > <a name="1339">1339</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> handle, override L<DBIx::Class::Schema/deploy> in your Schema class </td> </tr> <tr> <td class="h" > <a name="1340">1340</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and call L<dbh_do|DBIx::Class::Storage::DBI/dbh_do>. </td> </tr> <tr> <td class="h" > <a name="1341">1341</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1342">1342</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 default_sqlt_deploy_hook </td> </tr> <tr> <td class="h" > <a name="1343">1343</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1344">1344</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is the default deploy hook implementation which checks if your </td> </tr> <tr> <td class="h" > <a name="1345">1345</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> current Result class has a C<sqlt_deploy_hook> method, and if present </td> </tr> <tr> <td class="h" > <a name="1346">1346</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> invokes it B<on the Result class directly>. This is to preserve the </td> </tr> <tr> <td class="h" > <a name="1347">1347</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> semantics of C<sqlt_deploy_hook> which was originally designed to expect </td> </tr> <tr> <td class="h" > <a name="1348">1348</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the Result class name and the </td> </tr> <tr> <td class="h" > <a name="1349">1349</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<$sqlt_table instance|SQL::Translator::Schema::Table> of the table being </td> </tr> <tr> <td class="h" > <a name="1350">1350</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> deployed. </td> </tr> <tr> <td class="h" > <a name="1351">1351</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1352">1352</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1353">1353</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1354">1354</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub default_sqlt_deploy_hook { </td> </tr> <tr> <td class="h" > <a name="1355">1355</a> </td> <td class="c0" > <a href="#1357"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1355-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1355-1"> 1 </a> </td> <td > 0 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="1356">1356</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1357">1357</a> </td> <td class="c0" > <a href="#1359"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $class = $self->result_class; </td> </tr> <tr> <td class="h" > <a name="1358">1358</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1359">1359</a> </td> <td class="c0" > <a href="#1360"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1359-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1359-1"> 0 </a> </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if ($class and $class->can('sqlt_deploy_hook')) { </td> </tr> <tr> <td class="h" > <a name="1360">1360</a> </td> <td class="c0" > <a href="#1365"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $class->sqlt_deploy_hook(@_); </td> </tr> <tr> <td class="h" > <a name="1361">1361</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1362">1362</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1363">1363</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1364">1364</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _invoke_sqlt_deploy_hook { </td> </tr> <tr> <td class="h" > <a name="1365">1365</a> </td> <td class="c0" > <a href="#1366"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1365-1"> 0 </a> </td> <td >   </td> <td > 0 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="1366">1366</a> </td> <td class="c0" > <a href="#1367"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1366-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if ( my $hook = $self->sqlt_deploy_callback) { </td> </tr> <tr> <td class="h" > <a name="1367">1367</a> </td> <td class="c0" > <a href="#1562"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->$hook(@_); </td> </tr> <tr> <td class="h" > <a name="1368">1368</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1369">1369</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1370">1370</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1371">1371</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 result_class </td> </tr> <tr> <td class="h" > <a name="1372">1372</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1373">1373</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1374">1374</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1375">1375</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $classname </td> </tr> <tr> <td class="h" > <a name="1376">1376</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1377">1377</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: $classname </td> </tr> <tr> <td class="h" > <a name="1378">1378</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1379">1379</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1380">1380</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1381">1381</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use My::Schema::ResultClass::Inflator; </td> </tr> <tr> <td class="h" > <a name="1382">1382</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="1383">1383</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1384">1384</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use My::Schema::Artist; </td> </tr> <tr> <td class="h" > <a name="1385">1385</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="1386">1386</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->result_class('My::Schema::ResultClass::Inflator'); </td> </tr> <tr> <td class="h" > <a name="1387">1387</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1388">1388</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Set the default result class for this source. You can use this to create </td> </tr> <tr> <td class="h" > <a name="1389">1389</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and use your own result inflator. See L<DBIx::Class::ResultSet/result_class> </td> </tr> <tr> <td class="h" > <a name="1390">1390</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> for more details. </td> </tr> <tr> <td class="h" > <a name="1391">1391</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1392">1392</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Please note that setting this to something like </td> </tr> <tr> <td class="h" > <a name="1393">1393</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class::ResultClass::HashRefInflator> will make every result unblessed </td> </tr> <tr> <td class="h" > <a name="1394">1394</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and make life more difficult. Inflators like those are better suited to </td> </tr> <tr> <td class="h" > <a name="1395">1395</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> temporary usage via L<DBIx::Class::ResultSet/result_class>. </td> </tr> <tr> <td class="h" > <a name="1396">1396</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1397">1397</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 resultset </td> </tr> <tr> <td class="h" > <a name="1398">1398</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1399">1399</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1400">1400</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1401">1401</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1402">1402</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1403">1403</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<$resultset|DBIx::Class::ResultSet> </td> </tr> <tr> <td class="h" > <a name="1404">1404</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1405">1405</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1406">1406</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1407">1407</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns a resultset for the given source. This will initially be created </td> </tr> <tr> <td class="h" > <a name="1408">1408</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> on demand by calling </td> </tr> <tr> <td class="h" > <a name="1409">1409</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1410">1410</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->resultset_class->new($self, $self->resultset_attributes) </td> </tr> <tr> <td class="h" > <a name="1411">1411</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1412">1412</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> but is cached from then on unless resultset_class changes. </td> </tr> <tr> <td class="h" > <a name="1413">1413</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1414">1414</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 resultset_class </td> </tr> <tr> <td class="h" > <a name="1415">1415</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1416">1416</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1417">1417</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1418">1418</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $classname </td> </tr> <tr> <td class="h" > <a name="1419">1419</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1420">1420</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: $classname </td> </tr> <tr> <td class="h" > <a name="1421">1421</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1422">1422</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1423">1423</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1424">1424</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> package My::Schema::ResultSet::Artist; </td> </tr> <tr> <td class="h" > <a name="1425">1425</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use base 'DBIx::Class::ResultSet'; </td> </tr> <tr> <td class="h" > <a name="1426">1426</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="1427">1427</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1428">1428</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # In the result class </td> </tr> <tr> <td class="h" > <a name="1429">1429</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->resultset_class('My::Schema::ResultSet::Artist'); </td> </tr> <tr> <td class="h" > <a name="1430">1430</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1431">1431</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Or in code </td> </tr> <tr> <td class="h" > <a name="1432">1432</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->resultset_class('My::Schema::ResultSet::Artist'); </td> </tr> <tr> <td class="h" > <a name="1433">1433</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1434">1434</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Set the class of the resultset. This is useful if you want to create your </td> </tr> <tr> <td class="h" > <a name="1435">1435</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> own resultset methods. Create your own class derived from </td> </tr> <tr> <td class="h" > <a name="1436">1436</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class::ResultSet>, and set it here. If called with no arguments, </td> </tr> <tr> <td class="h" > <a name="1437">1437</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> this method returns the name of the existing resultset class, if one </td> </tr> <tr> <td class="h" > <a name="1438">1438</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists. </td> </tr> <tr> <td class="h" > <a name="1439">1439</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1440">1440</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 resultset_attributes </td> </tr> <tr> <td class="h" > <a name="1441">1441</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1442">1442</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1443">1443</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1444">1444</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: L<\%attrs|DBIx::Class::ResultSet/ATTRIBUTES> </td> </tr> <tr> <td class="h" > <a name="1445">1445</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1446">1446</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<\%attrs|DBIx::Class::ResultSet/ATTRIBUTES> </td> </tr> <tr> <td class="h" > <a name="1447">1447</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1448">1448</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1449">1449</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1450">1450</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # In the result class </td> </tr> <tr> <td class="h" > <a name="1451">1451</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->resultset_attributes({ order_by => [ 'id' ] }); </td> </tr> <tr> <td class="h" > <a name="1452">1452</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1453">1453</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Or in code </td> </tr> <tr> <td class="h" > <a name="1454">1454</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->resultset_attributes({ order_by => [ 'id' ] }); </td> </tr> <tr> <td class="h" > <a name="1455">1455</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1456">1456</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Store a collection of resultset attributes, that will be set on every </td> </tr> <tr> <td class="h" > <a name="1457">1457</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class::ResultSet> produced from this result source. </td> </tr> <tr> <td class="h" > <a name="1458">1458</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1459">1459</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B<CAVEAT>: C<resultset_attributes> comes with its own set of issues and </td> </tr> <tr> <td class="h" > <a name="1460">1460</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> bugs! Notably the contents of the attributes are B<entirely static>, which </td> </tr> <tr> <td class="h" > <a name="1461">1461</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> greatly hinders composability (things like L<current_source_alias </td> </tr> <tr> <td class="h" > <a name="1462">1462</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> |DBIx::Class::ResultSet/current_source_alias> can not possibly be respected). </td> </tr> <tr> <td class="h" > <a name="1463">1463</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> While C<resultset_attributes> isn't deprecated per se, you are strongly urged </td> </tr> <tr> <td class="h" > <a name="1464">1464</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> to seek alternatives. </td> </tr> <tr> <td class="h" > <a name="1465">1465</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1466">1466</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Since relationships use attributes to link tables together, the "default" </td> </tr> <tr> <td class="h" > <a name="1467">1467</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> attributes you set may cause unpredictable and undesired behavior. Furthermore, </td> </tr> <tr> <td class="h" > <a name="1468">1468</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the defaults B<cannot be turned off>, so you are stuck with them. </td> </tr> <tr> <td class="h" > <a name="1469">1469</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1470">1470</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> In most cases, what you should actually be using are project-specific methods: </td> </tr> <tr> <td class="h" > <a name="1471">1471</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1472">1472</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> package My::Schema::ResultSet::Artist; </td> </tr> <tr> <td class="h" > <a name="1473">1473</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use base 'DBIx::Class::ResultSet'; </td> </tr> <tr> <td class="h" > <a name="1474">1474</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="1475">1475</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1476">1476</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # BAD IDEA! </td> </tr> <tr> <td class="h" > <a name="1477">1477</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #__PACKAGE__->resultset_attributes({ prefetch => 'tracks' }); </td> </tr> <tr> <td class="h" > <a name="1478">1478</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1479">1479</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # GOOD IDEA! </td> </tr> <tr> <td class="h" > <a name="1480">1480</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub with_tracks { shift->search({}, { prefetch => 'tracks' }) } </td> </tr> <tr> <td class="h" > <a name="1481">1481</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1482">1482</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # in your code </td> </tr> <tr> <td class="h" > <a name="1483">1483</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $schema->resultset('Artist')->with_tracks->... </td> </tr> <tr> <td class="h" > <a name="1484">1484</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1485">1485</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This gives you the flexibility of not using it when you don't need it. </td> </tr> <tr> <td class="h" > <a name="1486">1486</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1487">1487</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> For more complex situations, another solution would be to use a virtual view </td> </tr> <tr> <td class="h" > <a name="1488">1488</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> via L<DBIx::Class::ResultSource::View>. </td> </tr> <tr> <td class="h" > <a name="1489">1489</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1490">1490</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1491">1491</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1492">1492</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub resultset { </td> </tr> <tr> <td class="h" > <a name="1493">1493</a> </td> <td class="c3" > 14222 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1493-1"> 14222 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1493-1"> 1 </a> </td> <td > 69311 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="1494">1494</a> </td> <td class="c3" > 14222 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1494-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 44429 </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="1495">1495</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'resultset does not take any arguments. If you want another resultset, '. </td> </tr> <tr> <td class="h" > <a name="1496">1496</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'call it on the schema instead.' </td> </tr> <tr> <td class="h" > <a name="1497">1497</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) if scalar @_; </td> </tr> <tr> <td class="h" > <a name="1498">1498</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1499">1499</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->resultset_class->new( </td> </tr> <tr> <td class="h" > <a name="1500">1500</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self, </td> </tr> <tr> <td class="h" > <a name="1501">1501</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1502">1502</a> </td> <td class="c3" > 14222 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1502-1"> 14222 </a> </td> <td >   </td> <td > 28673 </td> <td class="s"> ( dbic_internal_try { %{$self->schema->default_resultset_attributes} } ), </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 14222 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 43471 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1503">1503</a> </td> <td class="c3" > 14222 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 286084 </td> <td class="s"> %{$self->{resultset_attributes}}, </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 14222 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 95916 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1504">1504</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="1505">1505</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="1506">1506</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1507">1507</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1508">1508</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 name </td> </tr> <tr> <td class="h" > <a name="1509">1509</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1510">1510</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1511">1511</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1512">1512</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1513">1513</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1514">1514</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Result value: $name </td> </tr> <tr> <td class="h" > <a name="1515">1515</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1516">1516</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1517">1517</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1518">1518</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the name of the result source, which will typically be the table </td> </tr> <tr> <td class="h" > <a name="1519">1519</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name. This may be a scalar reference if the result source has a non-standard </td> </tr> <tr> <td class="h" > <a name="1520">1520</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name. </td> </tr> <tr> <td class="h" > <a name="1521">1521</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1522">1522</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 source_name </td> </tr> <tr> <td class="h" > <a name="1523">1523</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1524">1524</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1525">1525</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1526">1526</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $source_name </td> </tr> <tr> <td class="h" > <a name="1527">1527</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1528">1528</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Result value: $source_name </td> </tr> <tr> <td class="h" > <a name="1529">1529</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1530">1530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1531">1531</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1532">1532</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Set an alternate name for the result source when it is loaded into a schema. </td> </tr> <tr> <td class="h" > <a name="1533">1533</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is useful if you want to refer to a result source by a name other than </td> </tr> <tr> <td class="h" > <a name="1534">1534</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> its class name. </td> </tr> <tr> <td class="h" > <a name="1535">1535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1536">1536</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> package ArchivedBooks; </td> </tr> <tr> <td class="h" > <a name="1537">1537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use base qw/DBIx::Class/; </td> </tr> <tr> <td class="h" > <a name="1538">1538</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->table('books_archive'); </td> </tr> <tr> <td class="h" > <a name="1539">1539</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->source_name('Books'); </td> </tr> <tr> <td class="h" > <a name="1540">1540</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1541">1541</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # from your schema... </td> </tr> <tr> <td class="h" > <a name="1542">1542</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $schema->resultset('Books')->find(1); </td> </tr> <tr> <td class="h" > <a name="1543">1543</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1544">1544</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 from </td> </tr> <tr> <td class="h" > <a name="1545">1545</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1546">1546</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1547">1547</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1548">1548</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1549">1549</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1550">1550</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: FROM clause </td> </tr> <tr> <td class="h" > <a name="1551">1551</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1552">1552</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1553">1553</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1554">1554</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $from_clause = $source->from(); </td> </tr> <tr> <td class="h" > <a name="1555">1555</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1556">1556</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns an expression of the source to be supplied to storage to specify </td> </tr> <tr> <td class="h" > <a name="1557">1557</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> retrieval from this source. In the case of a database, the required FROM </td> </tr> <tr> <td class="h" > <a name="1558">1558</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> clause contents. </td> </tr> <tr> <td class="h" > <a name="1559">1559</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1560">1560</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1561">1561</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1562">1562</a> </td> <td class="c0" > <a href="#1629"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1562-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1562-1"> 1 </a> </td> <td > 0 </td> <td class="s"> sub from { die 'Virtual method!' } </td> </tr> <tr> <td class="h" > <a name="1563">1563</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1564">1564</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 source_info </td> </tr> <tr> <td class="h" > <a name="1565">1565</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1566">1566</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Stores a hashref of per-source metadata. No specific key names </td> </tr> <tr> <td class="h" > <a name="1567">1567</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> have yet been standardized, the examples below are purely hypothetical </td> </tr> <tr> <td class="h" > <a name="1568">1568</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and don't actually accomplish anything on their own: </td> </tr> <tr> <td class="h" > <a name="1569">1569</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1570">1570</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->source_info({ </td> </tr> <tr> <td class="h" > <a name="1571">1571</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "_tablespace" => 'fast_disk_array_3', </td> </tr> <tr> <td class="h" > <a name="1572">1572</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "_engine" => 'InnoDB', </td> </tr> <tr> <td class="h" > <a name="1573">1573</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="1574">1574</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1575">1575</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 schema </td> </tr> <tr> <td class="h" > <a name="1576">1576</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1577">1577</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1578">1578</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1579">1579</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: L<$schema?|DBIx::Class::Schema> </td> </tr> <tr> <td class="h" > <a name="1580">1580</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1581">1581</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<$schema|DBIx::Class::Schema> </td> </tr> <tr> <td class="h" > <a name="1582">1582</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1583">1583</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1584">1584</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1585">1585</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $schema = $source->schema(); </td> </tr> <tr> <td class="h" > <a name="1586">1586</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1587">1587</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sets and/or returns the L<DBIx::Class::Schema> object to which this </td> </tr> <tr> <td class="h" > <a name="1588">1588</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> result source instance has been attached to. </td> </tr> <tr> <td class="h" > <a name="1589">1589</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1590">1590</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1591">1591</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1592">1592</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub schema { </td> </tr> <tr> <td class="h" > <a name="1593">1593</a> </td> <td class="c3" > 118706 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1593-1"> 100 </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1593-1"> 118706 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1593-1"> 1 </a> </td> <td > 356841 </td> <td class="s"> if (@_ > 1) { </td> </tr> <tr> <td class="h" > <a name="1594">1594</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # invoke the mark-diverging logic </td> </tr> <tr> <td class="h" > <a name="1595">1595</a> </td> <td class="c3" > 51524 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 135487 </td> <td class="s"> $_[0]->set_rsrc_instance_specific_attribute( schema => $_[1] ); </td> </tr> <tr> <td class="h" > <a name="1596">1596</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1597">1597</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="1598">1598</a> </td> <td class="c3" > 67182 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1598-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 165988 </td> <td class="s"> $_[0]->get_rsrc_instance_specific_attribute( 'schema' ) || do { </td> </tr> <tr> <td class="h" > <a name="1599">1599</a> </td> <td class="c3" > 92 </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1599-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 292 </td> <td class="s"> my $name = $_[0]->{source_name} || '_unnamed_'; </td> </tr> <tr> <td class="h" > <a name="1600">1600</a> </td> <td class="c3" > 92 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 232 </td> <td class="s"> my $err = 'Unable to perform storage-dependent operations with a detached result source ' </td> </tr> <tr> <td class="h" > <a name="1601">1601</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "(source '$name' is not associated with a schema)."; </td> </tr> <tr> <td class="h" > <a name="1602">1602</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1603">1603</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $err .= ' You need to use $schema->thaw() or manually set' </td> </tr> <tr> <td class="h" > <a name="1604">1604</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . ' $DBIx::Class::ResultSourceHandle::thaw_schema while thawing.' </td> </tr> <tr> <td class="h" > <a name="1605">1605</a> </td> <td class="c3" > 92 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1605-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 215 </td> <td class="s"> if $_[0]->{_detached_thaw}; </td> </tr> <tr> <td class="h" > <a name="1606">1606</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1607">1607</a> </td> <td class="c3" > 92 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 315 </td> <td class="s"> DBIx::Class::Exception->throw($err); </td> </tr> <tr> <td class="h" > <a name="1608">1608</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="1609">1609</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1610">1610</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1611">1611</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1612">1612</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 storage </td> </tr> <tr> <td class="h" > <a name="1613">1613</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1614">1614</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1615">1615</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1616">1616</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1617">1617</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1618">1618</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<$storage|DBIx::Class::Storage> </td> </tr> <tr> <td class="h" > <a name="1619">1619</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1620">1620</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1621">1621</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1622">1622</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->storage->debug(1); </td> </tr> <tr> <td class="h" > <a name="1623">1623</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1624">1624</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the L<storage handle|DBIx::Class::Storage> for the current schema. </td> </tr> <tr> <td class="h" > <a name="1625">1625</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1626">1626</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1627">1627</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1628">1628</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub storage :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="1629">1629</a> </td> <td class="c0" > <a href="#1630"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1629-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1629-1"> 1 </a> </td> <td > 0 </td> <td class="s"> DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; </td> </tr> <tr> <td class="h" > <a name="1630">1630</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $_[0]->schema->storage </td> </tr> <tr> <td class="h" > <a name="1631">1631</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1631-1"> 312 </a> </td> <td >   </td> <td > 252277 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3467 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 121151 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1632">1632</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1633">1633</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 add_relationship </td> </tr> <tr> <td class="h" > <a name="1634">1634</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1635">1635</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1636">1636</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1637">1637</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $rel_name, $related_source_name, \%cond, \%attrs? </td> </tr> <tr> <td class="h" > <a name="1638">1638</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1639">1639</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: 1/true if it succeeded </td> </tr> <tr> <td class="h" > <a name="1640">1640</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1641">1641</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1642">1642</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1643">1643</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $source->add_relationship('rel_name', 'related_source', $cond, $attrs); </td> </tr> <tr> <td class="h" > <a name="1644">1644</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1645">1645</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class::Relationship> describes a series of methods which </td> </tr> <tr> <td class="h" > <a name="1646">1646</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> create pre-defined useful types of relationships. Look there first </td> </tr> <tr> <td class="h" > <a name="1647">1647</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> before using this method directly. </td> </tr> <tr> <td class="h" > <a name="1648">1648</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1649">1649</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The relationship name can be arbitrary, but must be unique for each </td> </tr> <tr> <td class="h" > <a name="1650">1650</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> relationship attached to this result source. 'related_source' should </td> </tr> <tr> <td class="h" > <a name="1651">1651</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> be the name with which the related result source was registered with </td> </tr> <tr> <td class="h" > <a name="1652">1652</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the current schema. For example: </td> </tr> <tr> <td class="h" > <a name="1653">1653</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1654">1654</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $schema->source('Book')->add_relationship('reviews', 'Review', { </td> </tr> <tr> <td class="h" > <a name="1655">1655</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'foreign.book_id' => 'self.id', </td> </tr> <tr> <td class="h" > <a name="1656">1656</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="1657">1657</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1658">1658</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The condition C<$cond> needs to be an L<SQL::Abstract>-style </td> </tr> <tr> <td class="h" > <a name="1659">1659</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> representation of the join between the tables. For example, if you're </td> </tr> <tr> <td class="h" > <a name="1660">1660</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> creating a relation from Author to Book, </td> </tr> <tr> <td class="h" > <a name="1661">1661</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1662">1662</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { 'foreign.author_id' => 'self.id' } </td> </tr> <tr> <td class="h" > <a name="1663">1663</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1664">1664</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> will result in the JOIN clause </td> </tr> <tr> <td class="h" > <a name="1665">1665</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1666">1666</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> author me JOIN book foreign ON foreign.author_id = me.id </td> </tr> <tr> <td class="h" > <a name="1667">1667</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1668">1668</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> You can specify as many foreign => self mappings as necessary. </td> </tr> <tr> <td class="h" > <a name="1669">1669</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1670">1670</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Valid attributes are as follows: </td> </tr> <tr> <td class="h" > <a name="1671">1671</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1672">1672</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1673">1673</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1674">1674</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item join_type </td> </tr> <tr> <td class="h" > <a name="1675">1675</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1676">1676</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Explicitly specifies the type of join to use in the relationship. Any </td> </tr> <tr> <td class="h" > <a name="1677">1677</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SQL join type is valid, e.g. C<LEFT> or C<RIGHT>. It will be placed in </td> </tr> <tr> <td class="h" > <a name="1678">1678</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the SQL command immediately before C<JOIN>. </td> </tr> <tr> <td class="h" > <a name="1679">1679</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1680">1680</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item proxy </td> </tr> <tr> <td class="h" > <a name="1681">1681</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1682">1682</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> An arrayref containing a list of accessors in the foreign class to proxy in </td> </tr> <tr> <td class="h" > <a name="1683">1683</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the main class. If, for example, you do the following: </td> </tr> <tr> <td class="h" > <a name="1684">1684</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1685">1685</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> CD->might_have(liner_notes => 'LinerNotes', undef, { </td> </tr> <tr> <td class="h" > <a name="1686">1686</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> proxy => [ qw/notes/ ], </td> </tr> <tr> <td class="h" > <a name="1687">1687</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="1688">1688</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1689">1689</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Then, assuming LinerNotes has an accessor named notes, you can do: </td> </tr> <tr> <td class="h" > <a name="1690">1690</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1691">1691</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $cd = CD->find(1); </td> </tr> <tr> <td class="h" > <a name="1692">1692</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # set notes -- LinerNotes object is created if it doesn't exist </td> </tr> <tr> <td class="h" > <a name="1693">1693</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $cd->notes('Notes go here'); </td> </tr> <tr> <td class="h" > <a name="1694">1694</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1695">1695</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item accessor </td> </tr> <tr> <td class="h" > <a name="1696">1696</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1697">1697</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Specifies the type of accessor that should be created for the </td> </tr> <tr> <td class="h" > <a name="1698">1698</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> relationship. Valid values are C<single> (for when there is only a single </td> </tr> <tr> <td class="h" > <a name="1699">1699</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> related object), C<multi> (when there can be many), and C<filter> (for </td> </tr> <tr> <td class="h" > <a name="1700">1700</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> when there is a single related object, but you also want the relationship </td> </tr> <tr> <td class="h" > <a name="1701">1701</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> accessor to double as a column accessor). For C<multi> accessors, an </td> </tr> <tr> <td class="h" > <a name="1702">1702</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> add_to_* method is also created, which calls C<create_related> for the </td> </tr> <tr> <td class="h" > <a name="1703">1703</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> relationship. </td> </tr> <tr> <td class="h" > <a name="1704">1704</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1705">1705</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1706">1706</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1707">1707</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Throws an exception if the condition is improperly supplied, or cannot </td> </tr> <tr> <td class="h" > <a name="1708">1708</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> be resolved. </td> </tr> <tr> <td class="h" > <a name="1709">1709</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1710">1710</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1711">1711</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1712">1712</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub add_relationship { </td> </tr> <tr> <td class="h" > <a name="1713">1713</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($self, $rel, $f_source_name, $cond, $attrs) = @_; </td> </tr> <tr> <td class="h" > <a name="1714">1714</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1715">1715</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> local $self->{__in_rsrc_setter_callstack} = 1 </td> </tr> <tr> <td class="h" > <a name="1716">1716</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless $self->{__in_rsrc_setter_callstack}; </td> </tr> <tr> <td class="h" > <a name="1717">1717</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1718">1718</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception("Can't create relationship without join condition") </td> </tr> <tr> <td class="h" > <a name="1719">1719</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless $cond; </td> </tr> <tr> <td class="h" > <a name="1720">1720</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $attrs ||= {}; </td> </tr> <tr> <td class="h" > <a name="1721">1721</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1722">1722</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Check foreign and self are right in cond </td> </tr> <tr> <td class="h" > <a name="1723">1723</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if ( (ref $cond ||'') eq 'HASH') { </td> </tr> <tr> <td class="h" > <a name="1724">1724</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $_ =~ /^foreign\./ or $self->throw_exception("Malformed relationship condition key '$_': must be prefixed with 'foreign.'") </td> </tr> <tr> <td class="h" > <a name="1725">1725</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> for keys %$cond; </td> </tr> <tr> <td class="h" > <a name="1726">1726</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1727">1727</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $_ =~ /^self\./ or $self->throw_exception("Malformed relationship condition value '$_': must be prefixed with 'self.'") </td> </tr> <tr> <td class="h" > <a name="1728">1728</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> for values %$cond; </td> </tr> <tr> <td class="h" > <a name="1729">1729</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1730">1730</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1731">1731</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my %rels = %{ $self->_relationships }; </td> </tr> <tr> <td class="h" > <a name="1732">1732</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $rels{$rel} = { class => $f_source_name, </td> </tr> <tr> <td class="h" > <a name="1733">1733</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> source => $f_source_name, </td> </tr> <tr> <td class="h" > <a name="1734">1734</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cond => $cond, </td> </tr> <tr> <td class="h" > <a name="1735">1735</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> attrs => $attrs }; </td> </tr> <tr> <td class="h" > <a name="1736">1736</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->_relationships(\%rels); </td> </tr> <tr> <td class="h" > <a name="1737">1737</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1738">1738</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return $self; </td> </tr> <tr> <td class="h" > <a name="1739">1739</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1740">1740</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1741">1741</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 relationships </td> </tr> <tr> <td class="h" > <a name="1742">1742</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1743">1743</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1744">1744</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1745">1745</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="1746">1746</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1747">1747</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<@rel_names|DBIx::Class::Relationship> </td> </tr> <tr> <td class="h" > <a name="1748">1748</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1749">1749</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1750">1750</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1751">1751</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @rel_names = $source->relationships(); </td> </tr> <tr> <td class="h" > <a name="1752">1752</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1753">1753</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns all relationship names for this source. </td> </tr> <tr> <td class="h" > <a name="1754">1754</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1755">1755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1756">1756</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1757">1757</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub relationships { </td> </tr> <tr> <td class="h" > <a name="1758">1758</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> keys %{$_[0]->_relationships}; </td> </tr> <tr> <td class="h" > <a name="1759">1759</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1760">1760</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1761">1761</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 relationship_info </td> </tr> <tr> <td class="h" > <a name="1762">1762</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1763">1763</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1764">1764</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1765">1765</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: L<$rel_name|DBIx::Class::Relationship> </td> </tr> <tr> <td class="h" > <a name="1766">1766</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1767">1767</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<\%rel_data|DBIx::Class::Relationship::Base/add_relationship> </td> </tr> <tr> <td class="h" > <a name="1768">1768</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1769">1769</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1770">1770</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1771">1771</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns a hash of relationship information for the specified relationship </td> </tr> <tr> <td class="h" > <a name="1772">1772</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name. The keys/values are as specified for L<DBIx::Class::Relationship::Base/add_relationship>. </td> </tr> <tr> <td class="h" > <a name="1773">1773</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1774">1774</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1775">1775</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1776">1776</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub relationship_info { </td> </tr> <tr> <td class="h" > <a name="1777">1777</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #my ($self, $rel) = @_; </td> </tr> <tr> <td class="h" > <a name="1778">1778</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return shift->_relationships->{+shift}; </td> </tr> <tr> <td class="h" > <a name="1779">1779</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1780">1780</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1781">1781</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 has_relationship </td> </tr> <tr> <td class="h" > <a name="1782">1782</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1783">1783</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1784">1784</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1785">1785</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: L<$rel_name|DBIx::Class::Relationship> </td> </tr> <tr> <td class="h" > <a name="1786">1786</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1787">1787</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: 1/0 (true/false) </td> </tr> <tr> <td class="h" > <a name="1788">1788</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1789">1789</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1790">1790</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1791">1791</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns true if the source has a relationship of this name, false otherwise. </td> </tr> <tr> <td class="h" > <a name="1792">1792</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1793">1793</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1794">1794</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1795">1795</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub has_relationship { </td> </tr> <tr> <td class="h" > <a name="1796">1796</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #my ($self, $rel) = @_; </td> </tr> <tr> <td class="h" > <a name="1797">1797</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return exists shift->_relationships->{+shift}; </td> </tr> <tr> <td class="h" > <a name="1798">1798</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1799">1799</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1800">1800</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 reverse_relationship_info </td> </tr> <tr> <td class="h" > <a name="1801">1801</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1802">1802</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="1803">1803</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1804">1804</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: L<$rel_name|DBIx::Class::Relationship> </td> </tr> <tr> <td class="h" > <a name="1805">1805</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1806">1806</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<\%rel_data|DBIx::Class::Relationship::Base/add_relationship> </td> </tr> <tr> <td class="h" > <a name="1807">1807</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1808">1808</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1809">1809</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1810">1810</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Looks through all the relationships on the source this relationship </td> </tr> <tr> <td class="h" > <a name="1811">1811</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> points to, looking for one whose condition is the reverse of the </td> </tr> <tr> <td class="h" > <a name="1812">1812</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> condition on this relationship. </td> </tr> <tr> <td class="h" > <a name="1813">1813</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1814">1814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A common use of this is to find the name of the C<belongs_to> relation </td> </tr> <tr> <td class="h" > <a name="1815">1815</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> opposing a C<has_many> relation. For definition of these look in </td> </tr> <tr> <td class="h" > <a name="1816">1816</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class::Relationship>. </td> </tr> <tr> <td class="h" > <a name="1817">1817</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1818">1818</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The returned hashref is keyed by the name of the opposing </td> </tr> <tr> <td class="h" > <a name="1819">1819</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> relationship, and contains its data in the same manner as </td> </tr> <tr> <td class="h" > <a name="1820">1820</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L</relationship_info>. </td> </tr> <tr> <td class="h" > <a name="1821">1821</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1822">1822</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1823">1823</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1824">1824</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub reverse_relationship_info { </td> </tr> <tr> <td class="h" > <a name="1825">1825</a> </td> <td class="c3" > 990 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1825-1"> 990 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1825-1"> 1 </a> </td> <td > 3637 </td> <td class="s"> my ($self, $rel) = @_; </td> </tr> <tr> <td class="h" > <a name="1826">1826</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1827">1827</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # This may be a partial schema or something else equally esoteric </td> </tr> <tr> <td class="h" > <a name="1828">1828</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # in which case this will throw </td> </tr> <tr> <td class="h" > <a name="1829">1829</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1830">1830</a> </td> <td class="c3" > 990 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3338 </td> <td class="s"> my $other_rsrc = $self->related_source($rel); </td> </tr> <tr> <td class="h" > <a name="1831">1831</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1832">1832</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Some custom rels may not resolve without a $schema </td> </tr> <tr> <td class="h" > <a name="1833">1833</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="1834">1834</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $our_resolved_relcond = dbic_internal_try { </td> </tr> <tr> <td class="h" > <a name="1835">1835</a> </td> <td class="c3" > 990 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1835-1"> 990 </a> </td> <td >   </td> <td > 4629 </td> <td class="s"> $self->resolve_relationship_condition( </td> </tr> <tr> <td class="h" > <a name="1836">1836</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> rel_name => $rel, </td> </tr> <tr> <td class="h" > <a name="1837">1837</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1838">1838</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # an API where these are optional would be too cumbersome, </td> </tr> <tr> <td class="h" > <a name="1839">1839</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # instead always pass in some dummy values </td> </tr> <tr> <td class="h" > <a name="1840">1840</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> DUMMY_ALIASPAIR, </td> </tr> <tr> <td class="h" > <a name="1841">1841</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="1842">1842</a> </td> <td class="c3" > 990 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8901 </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="1843">1843</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1844">1844</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # only straight-equality is compared </td> </tr> <tr> <td class="h" > <a name="1845">1845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return {} </td> </tr> <tr> <td class="h" > <a name="1846">1846</a> </td> <td class="c3" > 990 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1846-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5616 </td> <td class="s"> unless $our_resolved_relcond->{identity_map_matches_condition}; </td> </tr> <tr> <td class="h" > <a name="1847">1847</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1848">1848</a> </td> <td class="c3" > 989 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 25208 </td> <td class="s"> my( $our_registered_source_name, $our_result_class) = </td> </tr> <tr> <td class="h" > <a name="1849">1849</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $self->source_name, $self->result_class ); </td> </tr> <tr> <td class="h" > <a name="1850">1850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1851">1851</a> </td> <td class="c3" > 989 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2943 </td> <td class="s"> my $ret = {}; </td> </tr> <tr> <td class="h" > <a name="1852">1852</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1853">1853</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Get all the relationships for that source that related to this source </td> </tr> <tr> <td class="h" > <a name="1854">1854</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # whose foreign column set are our self columns on $rel and whose self </td> </tr> <tr> <td class="h" > <a name="1855">1855</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # columns are our foreign columns on $rel </td> </tr> <tr> <td class="h" > <a name="1856">1856</a> </td> <td class="c3" > 989 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 19730 </td> <td class="s"> foreach my $other_rel ($other_rsrc->relationships) { </td> </tr> <tr> <td class="h" > <a name="1857">1857</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1858">1858</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # this will happen when we have a self-referential class </td> </tr> <tr> <td class="h" > <a name="1859">1859</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> next if ( </td> </tr> <tr> <td class="h" > <a name="1860">1860</a> </td> <td class="c3" > 8894 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1860-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1860-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 41363 </td> <td class="s"> $other_rel eq $rel </td> </tr> <tr> <td class="h" > <a name="1861">1861</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1862">1862</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self == $other_rsrc </td> </tr> <tr> <td class="h" > <a name="1863">1863</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="1864">1864</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1865">1865</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # only consider stuff that points back to us </td> </tr> <tr> <td class="h" > <a name="1866">1866</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # "us" here is tricky - if we are in a schema registration, we want </td> </tr> <tr> <td class="h" > <a name="1867">1867</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # to use the source_names, otherwise we will use the actual classes </td> </tr> <tr> <td class="h" > <a name="1868">1868</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1869">1869</a> </td> <td class="c3" > 8887 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 13712 </td> <td class="s"> my $roundtripped_rsrc; </td> </tr> <tr> <td class="h" > <a name="1870">1870</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> next unless ( </td> </tr> <tr> <td class="h" > <a name="1871">1871</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1872">1872</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the schema may be partially loaded </td> </tr> <tr> <td class="h" > <a name="1873">1873</a> </td> <td class="c3" > 8887 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1873-1"> 8887 </a> </td> <td >   </td> <td > 24854 </td> <td class="s"> $roundtripped_rsrc = dbic_internal_try { $other_rsrc->related_source($other_rel) } </td> </tr> <tr> <td class="h" > <a name="1874">1874</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1875">1875</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1876">1876</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1877">1877</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="1878">1878</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1879">1879</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="1880">1880</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $our_registered_source_name </td> </tr> <tr> <td class="h" > <a name="1881">1881</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1882">1882</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="1883">1883</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $our_registered_source_name </td> </tr> <tr> <td class="h" > <a name="1884">1884</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> eq </td> </tr> <tr> <td class="h" > <a name="1885">1885</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $roundtripped_rsrc->source_name||'' </td> </tr> <tr> <td class="h" > <a name="1886">1886</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="1887">1887</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="1888">1888</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1889">1889</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="1890">1890</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1891">1891</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="1892">1892</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $our_result_class </td> </tr> <tr> <td class="h" > <a name="1893">1893</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> eq </td> </tr> <tr> <td class="h" > <a name="1894">1894</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $roundtripped_rsrc->result_class </td> </tr> <tr> <td class="h" > <a name="1895">1895</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="1896">1896</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="1897">1897</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1898">1898</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1899">1899</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1900">1900</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $their_resolved_relcond = dbic_internal_try { </td> </tr> <tr> <td class="h" > <a name="1901">1901</a> </td> <td class="c3" > 3155 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1901-1"> 3155 </a> </td> <td >   </td> <td > 12431 </td> <td class="s"> $other_rsrc->resolve_relationship_condition( </td> </tr> <tr> <td class="h" > <a name="1902">1902</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> rel_name => $other_rel, </td> </tr> <tr> <td class="h" > <a name="1903">1903</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1904">1904</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # an API where these are optional would be too cumbersome, </td> </tr> <tr> <td class="h" > <a name="1905">1905</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # instead always pass in some dummy values </td> </tr> <tr> <td class="h" > <a name="1906">1906</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> DUMMY_ALIASPAIR, </td> </tr> <tr> <td class="h" > <a name="1907">1907</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="1908">1908</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1909">1909</a> </td> <td class="c3" > 8887 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1909-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1909-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 46085 </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-3"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1910">1910</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1911">1911</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1912">1912</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{$other_rel} = $other_rsrc->relationship_info($other_rel) if ( </td> </tr> <tr> <td class="h" > <a name="1913">1913</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1914">1914</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $their_resolved_relcond->{identity_map_matches_condition} </td> </tr> <tr> <td class="h" > <a name="1915">1915</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1916">1916</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1917">1917</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1918">1918</a> </td> <td class="c3" > 2597 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7977 </td> <td class="s"> keys %{ $our_resolved_relcond->{identity_map} } </td> </tr> <tr> <td class="h" > <a name="1919">1919</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> == </td> </tr> <tr> <td class="h" > <a name="1920">1920</a> </td> <td class="c3" > 2597 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 17090 </td> <td class="s"> keys %{ $their_resolved_relcond->{identity_map} } </td> </tr> <tr> <td class="h" > <a name="1921">1921</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1922">1922</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1923">1923</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1924">1924</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> serialize( $our_resolved_relcond->{identity_map} ) </td> </tr> <tr> <td class="h" > <a name="1925">1925</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> eq </td> </tr> <tr> <td class="h" > <a name="1926">1926</a> </td> <td class="c3" > 3155 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1926-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1926-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 22428 </td> <td class="s"> serialize( { reverse %{ $their_resolved_relcond->{identity_map} } } ) </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2597 </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td > 146032 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1927">1927</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1928">1928</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="1929">1929</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1930">1930</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1931">1931</a> </td> <td class="c3" > 989 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12259 </td> <td class="s"> return $ret; </td> </tr> <tr> <td class="h" > <a name="1932">1932</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1933">1933</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1934">1934</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # optionally takes either an arrayref of column names, or a hashref of already </td> </tr> <tr> <td class="h" > <a name="1935">1935</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # retrieved colinfos </td> </tr> <tr> <td class="h" > <a name="1936">1936</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # returns an arrayref of column names of the shortest unique constraint </td> </tr> <tr> <td class="h" > <a name="1937">1937</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # (matching some of the input if any), giving preference to the PK </td> </tr> <tr> <td class="h" > <a name="1938">1938</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _identifying_column_set { </td> </tr> <tr> <td class="h" > <a name="1939">1939</a> </td> <td class="c3" > 712 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1939-1"> 712 </a> </td> <td >   </td> <td > 2189 </td> <td class="s"> my ($self, $cols) = @_; </td> </tr> <tr> <td class="h" > <a name="1940">1940</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1941">1941</a> </td> <td class="c3" > 712 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 16190 </td> <td class="s"> my %unique = $self->unique_constraints; </td> </tr> <tr> <td class="h" > <a name="1942">1942</a> </td> <td class="c3" > 712 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1942-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1942-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 5799 </td> <td class="s"> my $colinfos = ref $cols eq 'HASH' ? $cols : $self->columns_info($cols||()); </td> </tr> <tr> <td class="h" > <a name="1943">1943</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1944">1944</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # always prefer the PK first, and then shortest constraints first </td> </tr> <tr> <td class="h" > <a name="1945">1945</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USET: </td> </tr> <tr> <td class="h" > <a name="1946">1946</a> </td> <td class="c3" > 712 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3798 </td> <td class="s"> for my $set (delete $unique{primary}, sort { @$a <=> @$b } (values %unique) ) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 403 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1409 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1947">1947</a> </td> <td class="c3" > 901 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1947-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1947-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 4335 </td> <td class="s"> next unless $set && @$set; </td> </tr> <tr> <td class="h" > <a name="1948">1948</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1949">1949</a> </td> <td class="c3" > 901 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2492 </td> <td class="s"> for (@$set) { </td> </tr> <tr> <td class="h" > <a name="1950">1950</a> </td> <td class="c3" > 1116 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1950-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1950-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 5811 </td> <td class="s"> next USET unless ($colinfos->{$_} && !$colinfos->{$_}{is_nullable} ); </td> </tr> <tr> <td class="h" > <a name="1951">1951</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1952">1952</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1953">1953</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # copy so we can mangle it at will </td> </tr> <tr> <td class="h" > <a name="1954">1954</a> </td> <td class="c3" > 671 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5701 </td> <td class="s"> return [ @$set ]; </td> </tr> <tr> <td class="h" > <a name="1955">1955</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1956">1956</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1957">1957</a> </td> <td class="c3" > 41 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 251 </td> <td class="s"> return undef; </td> </tr> <tr> <td class="h" > <a name="1958">1958</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1959">1959</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1960">1960</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _minimal_valueset_satisfying_constraint { </td> </tr> <tr> <td class="h" > <a name="1961">1961</a> </td> <td class="c3" > 3231 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#1961-1"> 3231 </a> </td> <td >   </td> <td > 7908 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="1962">1962</a> </td> <td class="c3" > 3231 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1962-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 18156 </td> <td class="s"> my $args = { ref $_[0] eq 'HASH' ? %{ $_[0] } : @_ }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > <a href="#2070"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1963">1963</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1964">1964</a> </td> <td class="c3" > 3231 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1964-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 18419 </td> <td class="s"> $args->{columns_info} ||= $self->columns_info; </td> </tr> <tr> <td class="h" > <a name="1965">1965</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1966">1966</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $vals = extract_equality_conditions( </td> </tr> <tr> <td class="h" > <a name="1967">1967</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{values}, </td> </tr> <tr> <td class="h" > <a name="1968">1968</a> </td> <td class="c3" > 3231 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1968-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 17047 </td> <td class="s"> ($args->{carp_on_nulls} ? 'consider_nulls' : undef ), </td> </tr> <tr> <td class="h" > <a name="1969">1969</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="1970">1970</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1971">1971</a> </td> <td class="c3" > 3231 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6234 </td> <td class="s"> my $cols; </td> </tr> <tr> <td class="h" > <a name="1972">1972</a> </td> <td class="c3" > 3231 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 77494 </td> <td class="s"> for my $col ($self->unique_constraint_columns($args->{constraint_name}) ) { </td> </tr> <tr> <td class="h" > <a name="1973">1973</a> </td> <td class="c3" > 4236 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1973-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1973-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 22976 </td> <td class="s"> if( ! exists $vals->{$col} or ( $vals->{$col}||'' ) eq UNRESOLVABLE_CONDITION ) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1974">1974</a> </td> <td class="c3" > 2822 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9350 </td> <td class="s"> $cols->{missing}{$col} = undef; </td> </tr> <tr> <td class="h" > <a name="1975">1975</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1976">1976</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif( ! defined $vals->{$col} ) { </td> </tr> <tr> <td class="h" > <a name="1977">1977</a> </td> <td class="c3" > 2 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1977-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 13 </td> <td class="s"> $cols->{$args->{carp_on_nulls} ? 'undefined' : 'missing'}{$col} = undef; </td> </tr> <tr> <td class="h" > <a name="1978">1978</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1979">1979</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="1980">1980</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we need to inject back the '=' as extract_equality_conditions() </td> </tr> <tr> <td class="h" > <a name="1981">1981</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # will strip it from literals and values alike, resulting in an invalid </td> </tr> <tr> <td class="h" > <a name="1982">1982</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # condition in the end </td> </tr> <tr> <td class="h" > <a name="1983">1983</a> </td> <td class="c3" > 1412 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8155 </td> <td class="s"> $cols->{present}{$col} = { '=' => $vals->{$col} }; </td> </tr> <tr> <td class="h" > <a name="1984">1984</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1985">1985</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1986">1986</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $cols->{fc}{$col} = 1 if ( </td> </tr> <tr> <td class="h" > <a name="1987">1987</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( ! $cols->{missing} or ! exists $cols->{missing}{$col} ) </td> </tr> <tr> <td class="h" > <a name="1988">1988</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="1989">1989</a> </td> <td class="c3" > 4236 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1989-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#1989-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 21323 </td> <td class="s"> keys %{ $args->{columns_info}{$col}{_filter_info} || {} } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 1414 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td > 12567 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1990">1990</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="1991">1991</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1992">1992</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1993">1993</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( sprintf ( "Unable to satisfy requested constraint '%s', missing values for column(s): %s", </td> </tr> <tr> <td class="h" > <a name="1994">1994</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{constraint_name}, </td> </tr> <tr> <td class="h" > <a name="1995">1995</a> </td> <td class="c3" > 2822 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 23627 </td> <td class="s"> join (', ', map { "'$_'" } sort keys %{$cols->{missing}} ), </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 1962 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8992 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1996">1996</a> </td> <td class="c3" > 3231 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#1996-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 18583 </td> <td class="s"> ) ) if $cols->{missing}; </td> </tr> <tr> <td class="h" > <a name="1997">1997</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1998">1998</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( sprintf ( </td> </tr> <tr> <td class="h" > <a name="1999">1999</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Unable to satisfy requested constraint '%s', FilterColumn values not usable for column(s): %s", </td> </tr> <tr> <td class="h" > <a name="2000">2000</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{constraint_name}, </td> </tr> <tr> <td class="h" > <a name="2001">2001</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 31 </td> <td class="s"> join (', ', map { "'$_'" } sort keys %{$cols->{fc}}), </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 11 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2002">2002</a> </td> <td class="c3" > 1269 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2002-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4528 </td> <td class="s"> )) if $cols->{fc}; </td> </tr> <tr> <td class="h" > <a name="2003">2003</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2004">2004</a> </td> <td class="c3" > 1267 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2004-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2004-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 5030 </td> <td class="s"> if ( </td> </tr> <tr> <td class="h" > <a name="2005">2005</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $cols->{undefined} </td> </tr> <tr> <td class="h" > <a name="2006">2006</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2007">2007</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> !$ENV{DBIC_NULLABLE_KEY_NOWARN} </td> </tr> <tr> <td class="h" > <a name="2008">2008</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2009">2009</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> carp_unique ( sprintf ( </td> </tr> <tr> <td class="h" > <a name="2010">2010</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "NULL/undef values supplied for requested unique constraint '%s' (NULL " </td> </tr> <tr> <td class="h" > <a name="2011">2011</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'values in column(s): %s). This is almost certainly not what you wanted, ' </td> </tr> <tr> <td class="h" > <a name="2012">2012</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'though you can set DBIC_NULLABLE_KEY_NOWARN to disable this warning.', </td> </tr> <tr> <td class="h" > <a name="2013">2013</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{constraint_name}, </td> </tr> <tr> <td class="h" > <a name="2014">2014</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6 </td> <td class="s"> join (', ', map { "'$_'" } sort keys %{$cols->{undefined}}), </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 20 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2015">2015</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> )); </td> </tr> <tr> <td class="h" > <a name="2016">2016</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2017">2017</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2018">2018</a> </td> <td class="c3" > 1267 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2018-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4893 </td> <td class="s"> return { map { %{ $cols->{$_}||{} } } qw(present undefined) }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2534 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4264 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2534 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 21665 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2019">2019</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2020">2020</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2021">2021</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Returns the {from} structure used to express JOIN conditions </td> </tr> <tr> <td class="h" > <a name="2022">2022</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _resolve_join { </td> </tr> <tr> <td class="h" > <a name="2023">2023</a> </td> <td class="c3" > 2442 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2023-1"> 2442 </a> </td> <td >   </td> <td > 7838 </td> <td class="s"> my ($self, $join, $alias, $seen, $jpath, $parent_force_left) = @_; </td> </tr> <tr> <td class="h" > <a name="2024">2024</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2025">2025</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we need a supplied one, because we do in-place modifications, no returns </td> </tr> <tr> <td class="h" > <a name="2026">2026</a> </td> <td class="c3" > 2442 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2026-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 8899 </td> <td class="s"> $self->throw_exception ('You must supply a seen hashref as the 3rd argument to _resolve_join') </td> </tr> <tr> <td class="h" > <a name="2027">2027</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless ref $seen eq 'HASH'; </td> </tr> <tr> <td class="h" > <a name="2028">2028</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2029">2029</a> </td> <td class="c3" > 2442 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2029-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 6310 </td> <td class="s"> $self->throw_exception ('You must supply a joinpath arrayref as the 4th argument to _resolve_join') </td> </tr> <tr> <td class="h" > <a name="2030">2030</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless ref $jpath eq 'ARRAY'; </td> </tr> <tr> <td class="h" > <a name="2031">2031</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2032">2032</a> </td> <td class="c3" > 2442 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5845 </td> <td class="s"> $jpath = [@$jpath]; # copy </td> </tr> <tr> <td class="h" > <a name="2033">2033</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2034">2034</a> </td> <td class="c3" > 2442 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2034-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2034-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 15282 </td> <td class="s"> if (not defined $join or not length $join) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-3"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-4"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2035">2035</a> </td> <td class="c3" > 417 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1882 </td> <td class="s"> return (); </td> </tr> <tr> <td class="h" > <a name="2036">2036</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2037">2037</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (ref $join eq 'ARRAY') { </td> </tr> <tr> <td class="h" > <a name="2038">2038</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return </td> </tr> <tr> <td class="h" > <a name="2039">2039</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> map { </td> </tr> <tr> <td class="h" > <a name="2040">2040</a> </td> <td class="c3" > 534 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1730 </td> <td class="s"> $self->_resolve_join($_, $alias, $seen, $jpath, $parent_force_left); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 756 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4994 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2041">2041</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } @$join; </td> </tr> <tr> <td class="h" > <a name="2042">2042</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2043">2043</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (ref $join eq 'HASH') { </td> </tr> <tr> <td class="h" > <a name="2044">2044</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2045">2045</a> </td> <td class="c3" > 280 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 600 </td> <td class="s"> my @ret; </td> </tr> <tr> <td class="h" > <a name="2046">2046</a> </td> <td class="c3" > 280 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1028 </td> <td class="s"> for my $rel (keys %$join) { </td> </tr> <tr> <td class="h" > <a name="2047">2047</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2048">2048</a> </td> <td class="c3" > 277 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2048-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 6929 </td> <td class="s"> my $rel_info = $self->relationship_info($rel) </td> </tr> <tr> <td class="h" > <a name="2049">2049</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or $self->throw_exception("No such relationship '$rel' on " . $self->source_name); </td> </tr> <tr> <td class="h" > <a name="2050">2050</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2051">2051</a> </td> <td class="c3" > 277 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 734 </td> <td class="s"> my $force_left = $parent_force_left; </td> </tr> <tr> <td class="h" > <a name="2052">2052</a> </td> <td class="c3" > 277 </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2052-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 2335 </td> <td class="s"> $force_left ||= lc($rel_info->{attrs}{join_type}||'') eq 'left'; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2053">2053</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2054">2054</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the actual seen value will be incremented by the recursion </td> </tr> <tr> <td class="h" > <a name="2055">2055</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $as = $self->schema->storage->relname_to_table_alias( </td> </tr> <tr> <td class="h" > <a name="2056">2056</a> </td> <td class="c3" > 277 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2056-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 974 </td> <td class="s"> $rel, ($seen->{$rel} && $seen->{$rel} + 1) </td> </tr> <tr> <td class="h" > <a name="2057">2057</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2058">2058</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2059">2059</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> push @ret, ( </td> </tr> <tr> <td class="h" > <a name="2060">2060</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->_resolve_join($rel, $alias, $seen, [@$jpath], $force_left), </td> </tr> <tr> <td class="h" > <a name="2061">2061</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->related_source($rel)->_resolve_join( </td> </tr> <tr> <td class="h" > <a name="2062">2062</a> </td> <td class="c3" > 277 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1885 </td> <td class="s"> $join->{$rel}, $as, $seen, [@$jpath, { $rel => $as }], $force_left </td> </tr> <tr> <td class="h" > <a name="2063">2063</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2064">2064</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2065">2065</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2066">2066</a> </td> <td class="c3" > 280 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2289 </td> <td class="s"> return @ret; </td> </tr> <tr> <td class="h" > <a name="2067">2067</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2068">2068</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2069">2069</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (ref $join) { </td> </tr> <tr> <td class="h" > <a name="2070">2070</a> </td> <td class="c0" > <a href="#2109"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->throw_exception("No idea how to resolve join reftype ".ref $join); </td> </tr> <tr> <td class="h" > <a name="2071">2071</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2072">2072</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2073">2073</a> </td> <td class="c3" > 1211 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3842 </td> <td class="s"> my $count = ++$seen->{$join}; </td> </tr> <tr> <td class="h" > <a name="2074">2074</a> </td> <td class="c3" > 1211 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2074-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 3990 </td> <td class="s"> my $as = $self->schema->storage->relname_to_table_alias( </td> </tr> <tr> <td class="h" > <a name="2075">2075</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $join, ($count > 1 && $count) </td> </tr> <tr> <td class="h" > <a name="2076">2076</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2077">2077</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2078">2078</a> </td> <td class="c3" > 1211 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2078-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 23509 </td> <td class="s"> my $rel_info = $self->relationship_info($join) </td> </tr> <tr> <td class="h" > <a name="2079">2079</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or $self->throw_exception("No such relationship $join on " . $self->source_name); </td> </tr> <tr> <td class="h" > <a name="2080">2080</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2081">2081</a> </td> <td class="c3" > 1211 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4911 </td> <td class="s"> my $rel_src = $self->related_source($join); </td> </tr> <tr> <td class="h" > <a name="2082">2082</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return [ { $as => $rel_src->from, </td> </tr> <tr> <td class="h" > <a name="2083">2083</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> -rsrc => $rel_src, </td> </tr> <tr> <td class="h" > <a name="2084">2084</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> -join_type => $parent_force_left </td> </tr> <tr> <td class="h" > <a name="2085">2085</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? 'left' </td> </tr> <tr> <td class="h" > <a name="2086">2086</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : $rel_info->{attrs}{join_type} </td> </tr> <tr> <td class="h" > <a name="2087">2087</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> , </td> </tr> <tr> <td class="h" > <a name="2088">2088</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> -join_path => [@$jpath, { $join => $as } ], </td> </tr> <tr> <td class="h" > <a name="2089">2089</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> -is_single => ( </td> </tr> <tr> <td class="h" > <a name="2090">2090</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! $rel_info->{attrs}{accessor} </td> </tr> <tr> <td class="h" > <a name="2091">2091</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2092">2092</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $rel_info->{attrs}{accessor} eq 'single' </td> </tr> <tr> <td class="h" > <a name="2093">2093</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2094">2094</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $rel_info->{attrs}{accessor} eq 'filter' </td> </tr> <tr> <td class="h" > <a name="2095">2095</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ), </td> </tr> <tr> <td class="h" > <a name="2096">2096</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> -alias => $as, </td> </tr> <tr> <td class="h" > <a name="2097">2097</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> -relation_chain_depth => ( $seen->{-relation_chain_depth} || 0 ) + 1, </td> </tr> <tr> <td class="h" > <a name="2098">2098</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2099">2099</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->resolve_relationship_condition( </td> </tr> <tr> <td class="h" > <a name="2100">2100</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> rel_name => $join, </td> </tr> <tr> <td class="h" > <a name="2101">2101</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> self_alias => $alias, </td> </tr> <tr> <td class="h" > <a name="2102">2102</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreign_alias => $as, </td> </tr> <tr> <td class="h" > <a name="2103">2103</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> )->{condition}, </td> </tr> <tr> <td class="h" > <a name="2104">2104</a> </td> <td class="c3" > 1211 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2104-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2104-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 8855 </td> <td class="s"> ]; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2105">2105</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2106">2106</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2107">2107</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2108">2108</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub pk_depends_on { </td> </tr> <tr> <td class="h" > <a name="2109">2109</a> </td> <td class="c0" > <a href="#2110"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2109-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2109-1"> 0 </a> </td> <td > 0 </td> <td class="s"> carp 'pk_depends_on is a private method, stop calling it'; </td> </tr> <tr> <td class="h" > <a name="2110">2110</a> </td> <td class="c0" > <a href="#2111"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="2111">2111</a> </td> <td class="c0" > <a href="#2150"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->_pk_depends_on (@_); </td> </tr> <tr> <td class="h" > <a name="2112">2112</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2113">2113</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2114">2114</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Determines whether a relation is dependent on an object from this source </td> </tr> <tr> <td class="h" > <a name="2115">2115</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # having already been inserted. Takes the name of the relationship and a </td> </tr> <tr> <td class="h" > <a name="2116">2116</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # hashref of columns of the related object. </td> </tr> <tr> <td class="h" > <a name="2117">2117</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _pk_depends_on { </td> </tr> <tr> <td class="h" > <a name="2118">2118</a> </td> <td class="c3" > 743 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2118-1"> 743 </a> </td> <td >   </td> <td > 2189 </td> <td class="s"> my ($self, $rel_name, $rel_data) = @_; </td> </tr> <tr> <td class="h" > <a name="2119">2119</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2120">2120</a> </td> <td class="c3" > 743 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 14321 </td> <td class="s"> my $relinfo = $self->relationship_info($rel_name); </td> </tr> <tr> <td class="h" > <a name="2121">2121</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2122">2122</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # don't assume things if the relationship direction is specified </td> </tr> <tr> <td class="h" > <a name="2123">2123</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return $relinfo->{attrs}{is_foreign_key_constraint} </td> </tr> <tr> <td class="h" > <a name="2124">2124</a> </td> <td class="c3" > 743 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2124-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5838 </td> <td class="s"> if exists ($relinfo->{attrs}{is_foreign_key_constraint}); </td> </tr> <tr> <td class="h" > <a name="2125">2125</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2126">2126</a> </td> <td class="c3" > 241 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 546 </td> <td class="s"> my $cond = $relinfo->{cond}; </td> </tr> <tr> <td class="h" > <a name="2127">2127</a> </td> <td class="c3" > 241 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2127-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 926 </td> <td class="s"> return 0 unless ref($cond) eq 'HASH'; </td> </tr> <tr> <td class="h" > <a name="2128">2128</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2129">2129</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # map { foreign.foo => 'self.bar' } to { bar => 'foo' } </td> </tr> <tr> <td class="h" > <a name="2130">2130</a> </td> <td class="c3" > 202 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 964 </td> <td class="s"> my $keyhash = { map { my $x = $_; $x =~ s/.*\.//; $x; } reverse %$cond }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 404 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 755 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 404 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1530 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 404 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1227 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2131">2131</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2132">2132</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # assume anything that references our PK probably is dependent on us </td> </tr> <tr> <td class="h" > <a name="2133">2133</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # rather than vice versa, unless the far side is (a) defined or (b) </td> </tr> <tr> <td class="h" > <a name="2134">2134</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # auto-increment </td> </tr> <tr> <td class="h" > <a name="2135">2135</a> </td> <td class="c3" > 202 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 747 </td> <td class="s"> my $rel_source = $self->related_source($rel_name); </td> </tr> <tr> <td class="h" > <a name="2136">2136</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2137">2137</a> </td> <td class="c3" > 202 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 753 </td> <td class="s"> my $colinfos; </td> </tr> <tr> <td class="h" > <a name="2138">2138</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2139">2139</a> </td> <td class="c3" > 202 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4195 </td> <td class="s"> foreach my $p ($self->primary_columns) { </td> </tr> <tr> <td class="h" > <a name="2140">2140</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return 0 if ( </td> </tr> <tr> <td class="h" > <a name="2141">2141</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $keyhash->{$p} </td> </tr> <tr> <td class="h" > <a name="2142">2142</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2143">2143</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! defined( $rel_data->{$keyhash->{$p}} ) </td> </tr> <tr> <td class="h" > <a name="2144">2144</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2145">2145</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! ( $colinfos ||= $rel_source->columns_info ) </td> </tr> <tr> <td class="h" > <a name="2146">2146</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ->{$keyhash->{$p}}{is_auto_increment} </td> </tr> <tr> <td class="h" > <a name="2147">2147</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2148">2148</a> </td> <td class="c3" > 202 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2148-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2148-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 4746 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 33 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-3"> 33 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2149">2149</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2150">2150</a> </td> <td class="c0" > <a href="#2154"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> return 1; </td> </tr> <tr> <td class="h" > <a name="2151">2151</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2152">2152</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2153">2153</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub __strip_relcond :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="2154">2154</a> </td> <td class="c0" > <a href="#2161"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2154-1"> 0 </a> </td> <td >   </td> <td > 0 </td> <td class="s"> DBIx::Class::Exception->throw( </td> </tr> <tr> <td class="h" > <a name="2155">2155</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> '__strip_relcond() has been removed with no replacement, ' </td> </tr> <tr> <td class="h" > <a name="2156">2156</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'ask for advice on IRC if this affected you' </td> </tr> <tr> <td class="h" > <a name="2157">2157</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2158">2158</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2158-1"> 312 </a> </td> <td >   </td> <td > 624000 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1980 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2582 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2159">2159</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2160">2160</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub compare_relationship_keys :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="2161">2161</a> </td> <td class="c0" > <a href="#2162"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2161-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2161-1"> 0 </a> </td> <td > 0 </td> <td class="s"> DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; </td> </tr> <tr> <td class="h" > <a name="2162">2162</a> </td> <td class="c0" > <a href="#2163"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp_unique( 'compare_relationship_keys() is deprecated, ask on IRC for a better alternative' ); </td> </tr> <tr> <td class="h" > <a name="2163">2163</a> </td> <td class="c0" > <a href="#2167"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> bag_eq( $_[1], $_[2] ); </td> </tr> <tr> <td class="h" > <a name="2164">2164</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2164-1"> 312 </a> </td> <td >   </td> <td > 74012 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2768 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3950 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2165">2165</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2166">2166</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _compare_relationship_keys :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="2167">2167</a> </td> <td class="c0" > <a href="#2168"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2167-1"> 0 </a> </td> <td >   </td> <td > 0 </td> <td class="s"> DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; </td> </tr> <tr> <td class="h" > <a name="2168">2168</a> </td> <td class="c0" > <a href="#2169"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp_unique( '_compare_relationship_keys() is deprecated, ask on IRC for a better alternative' ); </td> </tr> <tr> <td class="h" > <a name="2169">2169</a> </td> <td class="c0" > <a href="#2173"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> bag_eq( $_[1], $_[2] ); </td> </tr> <tr> <td class="h" > <a name="2170">2170</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2170-1"> 312 </a> </td> <td >   </td> <td > 69453 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2292 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3830 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2171">2171</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2172">2172</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _resolve_relationship_condition :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="2173">2173</a> </td> <td class="c0" > <a href="#2176"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2173-1"> 0 </a> </td> <td >   </td> <td > 0 </td> <td class="s"> DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; </td> </tr> <tr> <td class="h" > <a name="2174">2174</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2175">2175</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # carp() - has been on CPAN for less than 2 years </td> </tr> <tr> <td class="h" > <a name="2176">2176</a> </td> <td class="c0" > <a href="#2178"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp '_resolve_relationship_condition() is deprecated - see resolve_relationship_condition() instead'; </td> </tr> <tr> <td class="h" > <a name="2177">2177</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2178">2178</a> </td> <td class="c0" > <a href="#2182"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> shift->resolve_relationship_condition(@_); </td> </tr> <tr> <td class="h" > <a name="2179">2179</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2179-1"> 312 </a> </td> <td >   </td> <td > 66159 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4387 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1317 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2180">2180</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2181">2181</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub resolve_condition :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="2182">2182</a> </td> <td class="c0" > <a href="#2185"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2182-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2182-1"> 0 </a> </td> <td > 0 </td> <td class="s"> DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; </td> </tr> <tr> <td class="h" > <a name="2183">2183</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2184">2184</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # carp() - has been discouraged forever </td> </tr> <tr> <td class="h" > <a name="2185">2185</a> </td> <td class="c0" > <a href="#2187"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp 'resolve_condition() is deprecated - see resolve_relationship_condition() instead'; </td> </tr> <tr> <td class="h" > <a name="2186">2186</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2187">2187</a> </td> <td class="c0" > <a href="#2191"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> shift->_resolve_condition (@_); </td> </tr> <tr> <td class="h" > <a name="2188">2188</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2188-1"> 312 </a> </td> <td >   </td> <td > 63578 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1598 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3127 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2189">2189</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2190">2190</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub _resolve_condition :DBIC_method_is_indirect_sugar { </td> </tr> <tr> <td class="h" > <a name="2191">2191</a> </td> <td class="c0" > <a href="#2194"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2191-1"> 0 </a> </td> <td >   </td> <td > 0 </td> <td class="s"> DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; </td> </tr> <tr> <td class="h" > <a name="2192">2192</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2193">2193</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # carp_unique() - the interface replacing it only became reality in Sep 2016 </td> </tr> <tr> <td class="h" > <a name="2194">2194</a> </td> <td class="c0" > <a href="#2199"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp_unique '_resolve_condition() is deprecated - see resolve_relationship_condition() instead'; </td> </tr> <tr> <td class="h" > <a name="2195">2195</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2196">2196</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ####################### </td> </tr> <tr> <td class="h" > <a name="2197">2197</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ### API Design? What's that...? (a backwards compatible shim, kill me now) </td> </tr> <tr> <td class="h" > <a name="2198">2198</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2199">2199</a> </td> <td class="c0" > <a href="#2202"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my ($self, $cond, @res_args, $rel_name); </td> </tr> <tr> <td class="h" > <a name="2200">2200</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2201">2201</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we *SIMPLY DON'T KNOW YET* which arg is which, yay </td> </tr> <tr> <td class="h" > <a name="2202">2202</a> </td> <td class="c0" > <a href="#2205"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> ($self, $cond, $res_args[0], $res_args[1], $rel_name) = @_; </td> </tr> <tr> <td class="h" > <a name="2203">2203</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2204">2204</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # assume that an undef is an object-like unset (set_from_related(undef)) </td> </tr> <tr> <td class="h" > <a name="2205">2205</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2205-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my @is_objlike = map { ! defined $_ or length ref $_ } (@res_args); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > <a href="#2208"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2206">2206</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2207">2207</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # turn objlike into proper objects for saner code further down </td> </tr> <tr> <td class="h" > <a name="2208">2208</a> </td> <td class="c0" > <a href="#2209"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> for (0,1) { </td> </tr> <tr> <td class="h" > <a name="2209">2209</a> </td> <td class="c0" > <a href="#2211"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2209-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> next unless $is_objlike[$_]; </td> </tr> <tr> <td class="h" > <a name="2210">2210</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2211">2211</a> </td> <td class="c0" > <a href="#2214"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2211-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if ( defined blessed $res_args[$_] ) { </td> </tr> <tr> <td class="h" > <a name="2212">2212</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2213">2213</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # but wait - there is more!!! WHAT THE FUCK?!?!?!?! </td> </tr> <tr> <td class="h" > <a name="2214">2214</a> </td> <td class="c0" > <a href="#2215"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2214-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2214-1"> 0 </a> </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if ($res_args[$_]->isa('DBIx::Class::ResultSet')) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2215">2215</a> </td> <td class="c0" > <a href="#2216"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp('Passing a resultset for relationship resolution makes no sense - invoking __gremlins__'); </td> </tr> <tr> <td class="h" > <a name="2216">2216</a> </td> <td class="c0" > <a href="#2217"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $is_objlike[$_] = 0; </td> </tr> <tr> <td class="h" > <a name="2217">2217</a> </td> <td class="c0" > <a href="#2221"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $res_args[$_] = '__gremlins__'; </td> </tr> <tr> <td class="h" > <a name="2218">2218</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2219">2219</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # more compat </td> </tr> <tr> <td class="h" > <a name="2220">2220</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif( $_ == 0 and $res_args[0]->isa( $__expected_result_class_isa ) ) { </td> </tr> <tr> <td class="h" > <a name="2221">2221</a> </td> <td class="c0" > <a href="#2225"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $res_args[0] = { $res_args[0]->get_columns }; </td> </tr> <tr> <td class="h" > <a name="2222">2222</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2223">2223</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2224">2224</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2225">2225</a> </td> <td class="c0" > <a href="#2229"> 0 </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2225-1"> 0 </a> </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $res_args[$_] ||= {}; </td> </tr> <tr> <td class="h" > <a name="2226">2226</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2227">2227</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # hate everywhere - have to pass in as a plain hash </td> </tr> <tr> <td class="h" > <a name="2228">2228</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # pretending to be an object at least for now </td> </tr> <tr> <td class="h" > <a name="2229">2229</a> </td> <td class="c0" > <a href="#2234"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2229-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->throw_exception("Unsupported object-like structure encountered: $res_args[$_]") </td> </tr> <tr> <td class="h" > <a name="2230">2230</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless ref $res_args[$_] eq 'HASH'; </td> </tr> <tr> <td class="h" > <a name="2231">2231</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2232">2232</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2233">2233</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2234">2234</a> </td> <td class="c0" > <a href="#2248"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2234-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $args = { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-3"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2235">2235</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # where-is-waldo block guesses relname, then further down we override it if available </td> </tr> <tr> <td class="h" > <a name="2236">2236</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2237">2237</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $is_objlike[1] ? ( rel_name => $res_args[0], self_alias => $res_args[0], foreign_alias => 'me', self_result_object => $res_args[1] ) </td> </tr> <tr> <td class="h" > <a name="2238">2238</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : $is_objlike[0] ? ( rel_name => $res_args[1], self_alias => 'me', foreign_alias => $res_args[1], foreign_values => $res_args[0] ) </td> </tr> <tr> <td class="h" > <a name="2239">2239</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : ( rel_name => $res_args[0], self_alias => $res_args[1], foreign_alias => $res_args[0] ) </td> </tr> <tr> <td class="h" > <a name="2240">2240</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ), </td> </tr> <tr> <td class="h" > <a name="2241">2241</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2242">2242</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $rel_name ? ( rel_name => $rel_name ) : () ), </td> </tr> <tr> <td class="h" > <a name="2243">2243</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="2244">2244</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2245">2245</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Allowing passing relconds different than the relationshup itself is cute, </td> </tr> <tr> <td class="h" > <a name="2246">2246</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # but likely dangerous. Remove that from the API of resolve_relationship_condition, </td> </tr> <tr> <td class="h" > <a name="2247">2247</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # and instead make it "hard on purpose" </td> </tr> <tr> <td class="h" > <a name="2248">2248</a> </td> <td class="c0" > <a href="#2253"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2248-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> local $self->relationship_info( $args->{rel_name} )->{cond} = $cond if defined $cond; </td> </tr> <tr> <td class="h" > <a name="2249">2249</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2250">2250</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ####################### </td> </tr> <tr> <td class="h" > <a name="2251">2251</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2252">2252</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # now it's fucking easy isn't it?! </td> </tr> <tr> <td class="h" > <a name="2253">2253</a> </td> <td class="c0" > <a href="#2258"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $rc = $self->resolve_relationship_condition( $args ); </td> </tr> <tr> <td class="h" > <a name="2254">2254</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2255">2255</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @res = ( </td> </tr> <tr> <td class="h" > <a name="2256">2256</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $rc->{join_free_condition} || $rc->{condition} ), </td> </tr> <tr> <td class="h" > <a name="2257">2257</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! $rc->{join_free_condition}, </td> </tr> <tr> <td class="h" > <a name="2258">2258</a> </td> <td class="c0" > <a href="#2262"> 0 </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2258-1"> 0 </a> </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2259">2259</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2260">2260</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # resolve_relationship_condition always returns qualified cols even in the </td> </tr> <tr> <td class="h" > <a name="2261">2261</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # case of join_free_condition, but nothing downstream expects this </td> </tr> <tr> <td class="h" > <a name="2262">2262</a> </td> <td class="c0" > <a href="#2264"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2262-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2262-1"> 0 </a> </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if ($rc->{join_free_condition} and ref $res[0] eq 'HASH') { </td> </tr> <tr> <td class="h" > <a name="2263">2263</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $res[0] = { map </td> </tr> <tr> <td class="h" > <a name="2264">2264</a> </td> <td class="c0" > <a href="#2265"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> { ($_ =~ /\.(.+)/) => $res[0]{$_} } </td> </tr> <tr> <td class="h" > <a name="2265">2265</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> keys %{$res[0]} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > <a href="#2270"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2266">2266</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="2267">2267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2268">2268</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2269">2269</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # and more legacy </td> </tr> <tr> <td class="h" > <a name="2270">2270</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2270-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> return wantarray ? @res : $res[0]; </td> </tr> <tr> <td class="h" > <a name="2271">2271</a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2271-1"> 312 </a> </td> <td >   </td> <td > 169942 </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2625 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 312 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3053 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2272">2272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2273">2273</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Keep this indefinitely. There is evidence of both CPAN and </td> </tr> <tr> <td class="h" > <a name="2274">2274</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # darkpan using it, and there isn't much harm in an extra var </td> </tr> <tr> <td class="h" > <a name="2275">2275</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # anyway. </td> </tr> <tr> <td class="h" > <a name="2276">2276</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> our $UNRESOLVABLE_CONDITION = UNRESOLVABLE_CONDITION; </td> </tr> <tr> <td class="h" > <a name="2277">2277</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # YES I KNOW THIS IS EVIL </td> </tr> <tr> <td class="h" > <a name="2278">2278</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # it is there to save darkpan from themselves, since internally </td> </tr> <tr> <td class="h" > <a name="2279">2279</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we are moving to a constant </td> </tr> <tr> <td class="h" > <a name="2280">2280</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Internals::SvREADONLY($UNRESOLVABLE_CONDITION => 1); </td> </tr> <tr> <td class="h" > <a name="2281">2281</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2282">2282</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 resolve_relationship_condition </td> </tr> <tr> <td class="h" > <a name="2283">2283</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2284">2284</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> NOTE: You generally B<SHOULD NOT> need to use this functionality... until you </td> </tr> <tr> <td class="h" > <a name="2285">2285</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> do. The API description is terse on purpose. If the text below doesn't make </td> </tr> <tr> <td class="h" > <a name="2286">2286</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sense right away (based on the context which prompted you to look here) it is </td> </tr> <tr> <td class="h" > <a name="2287">2287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> almost certain you are reaching for the wrong tool. Please consider asking for </td> </tr> <tr> <td class="h" > <a name="2288">2288</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> advice in any of the support channels before proceeding. </td> </tr> <tr> <td class="h" > <a name="2289">2289</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2290">2290</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="2291">2291</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2292">2292</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: C<\%args> as shown below (C<B<*>> denotes mandatory args): </td> </tr> <tr> <td class="h" > <a name="2293">2293</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2294">2294</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> * rel_name => $string </td> </tr> <tr> <td class="h" > <a name="2295">2295</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2296">2296</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> * foreign_alias => $string </td> </tr> <tr> <td class="h" > <a name="2297">2297</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2298">2298</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> * self_alias => $string </td> </tr> <tr> <td class="h" > <a name="2299">2299</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2300">2300</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreign_values => \%column_value_pairs </td> </tr> <tr> <td class="h" > <a name="2301">2301</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2302">2302</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> self_result_object => $ResultObject </td> </tr> <tr> <td class="h" > <a name="2303">2303</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2304">2304</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> require_join_free_condition => $bool ( results in exception on failure to construct a JF-cond ) </td> </tr> <tr> <td class="h" > <a name="2305">2305</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2306">2306</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> require_join_free_values => $bool ( results in exception on failure to return an equality-only JF-cond ) </td> </tr> <tr> <td class="h" > <a name="2307">2307</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2308">2308</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: C<\%resolution_result> as shown below (C<B<*>> denotes always-resent parts of the result): </td> </tr> <tr> <td class="h" > <a name="2309">2309</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2310">2310</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> * condition => $sqla_condition ( always present, valid, *likely* fully qualified, SQL::Abstract-compatible structure ) </td> </tr> <tr> <td class="h" > <a name="2311">2311</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2312">2312</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> identity_map => \%foreign_to_self_equailty_map ( list of declared-equal foreign/self *unqualified* column names ) </td> </tr> <tr> <td class="h" > <a name="2313">2313</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2314">2314</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> identity_map_matches_condition => $bool ( indicates whether the entire condition is expressed within the identity_map ) </td> </tr> <tr> <td class="h" > <a name="2315">2315</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2316">2316</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> join_free_condition => \%sqla_condition_fully_resolvable_via_foreign_table </td> </tr> <tr> <td class="h" > <a name="2317">2317</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( always a hash, all keys guaranteed to be valid *fully qualified* columns ) </td> </tr> <tr> <td class="h" > <a name="2318">2318</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2319">2319</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> join_free_values => \%unqalified_version_of_join_free_condition </td> </tr> <tr> <td class="h" > <a name="2320">2320</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( IFF the returned join_free_condition contains only exact values (no expressions), this would be </td> </tr> <tr> <td class="h" > <a name="2321">2321</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> a hashref identical to join_free_condition, except with all column names *unqualified* ) </td> </tr> <tr> <td class="h" > <a name="2322">2322</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2323">2323</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="2324">2324</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2325">2325</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is the low-level method used to convert a declared relationship into </td> </tr> <tr> <td class="h" > <a name="2326">2326</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> various parameters consumed by higher level functions. It is provided as a </td> </tr> <tr> <td class="h" > <a name="2327">2327</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> stable official API, as the logic it encapsulates grew incredibly complex with </td> </tr> <tr> <td class="h" > <a name="2328">2328</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> time. While calling this method directly B<is generally discouraged>, you </td> </tr> <tr> <td class="h" > <a name="2329">2329</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> absolutely B<should be using it> in codepaths containing the moral equivalent </td> </tr> <tr> <td class="h" > <a name="2330">2330</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> of: </td> </tr> <tr> <td class="h" > <a name="2331">2331</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2332">2332</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="2333">2333</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if( ref $some_rsrc->relationship_info($somerel)->{cond} eq 'HASH' ) { </td> </tr> <tr> <td class="h" > <a name="2334">2334</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="2335">2335</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2336">2336</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ... </td> </tr> <tr> <td class="h" > <a name="2337">2337</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2338">2338</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="2339">2339</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2340">2340</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # TODO - expand the documentation above, too terse </td> </tr> <tr> <td class="h" > <a name="2341">2341</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2342">2342</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub resolve_relationship_condition { </td> </tr> <tr> <td class="h" > <a name="2343">2343</a> </td> <td class="c3" > 10098 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2343-1"> 10098 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2343-1"> 1 </a> </td> <td > 24012 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="2344">2344</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2345">2345</a> </td> <td class="c3" > 10098 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2345-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 46779 </td> <td class="s"> my $args = { ref $_[0] eq 'HASH' ? %{ $_[0] } : @_ }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2403 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 13518 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2346">2346</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2347">2347</a> </td> <td class="c3" > 10098 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 27472 </td> <td class="s"> for ( qw( rel_name self_alias foreign_alias ) ) { </td> </tr> <tr> <td class="h" > <a name="2348">2348</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception("Mandatory argument '$_' to resolve_relationship_condition() is not a plain string") </td> </tr> <tr> <td class="h" > <a name="2349">2349</a> </td> <td class="c3" > 30294 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2349-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2349-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 130566 </td> <td class="s"> if !defined $args->{$_} or length ref $args->{$_}; </td> </tr> <tr> <td class="h" > <a name="2350">2350</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2351">2351</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2352">2352</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception("Arguments 'self_alias' and 'foreign_alias' may not be identical") </td> </tr> <tr> <td class="h" > <a name="2353">2353</a> </td> <td class="c3" > 10098 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2353-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 29474 </td> <td class="s"> if $args->{self_alias} eq $args->{foreign_alias}; </td> </tr> <tr> <td class="h" > <a name="2354">2354</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2355">2355</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # TEMP </td> </tr> <tr> <td class="h" > <a name="2356">2356</a> </td> <td class="c3" > 10098 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2356-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 27935 </td> <td class="s"> my $exception_rel_id = "relationship '$args->{rel_name}' on source '@{[ $self->source_name || $self->result_class ]}'"; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 10098 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 238499 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2357">2357</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2358">2358</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $rel_info = $self->relationship_info($args->{rel_name}) </td> </tr> <tr> <td class="h" > <a name="2359">2359</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # TEMP </td> </tr> <tr> <td class="h" > <a name="2360">2360</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # or $self->throw_exception( "No such $exception_rel_id" ); </td> </tr> <tr> <td class="h" > <a name="2361">2361</a> </td> <td class="c3" > 10098 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2361-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 192333 </td> <td class="s"> or carp_unique("Requesting resolution on non-existent relationship '$args->{rel_name}' on source '@{[ $self->source_name ]}': fix your code *soon*, as it will break with the next major version"); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > <a href="#2454"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2362">2362</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2363">2363</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # TEMP </td> </tr> <tr> <td class="h" > <a name="2364">2364</a> </td> <td class="c3" > 77 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1244 </td> <td class="s"> $exception_rel_id = "relationship '$rel_info->{_original_name}' on source '@{[ $self->source_name ]}'" </td> </tr> <tr> <td class="h" > <a name="2365">2365</a> </td> <td class="c3" > 10098 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2365-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2365-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 79043 </td> <td class="s"> if $rel_info and exists $rel_info->{_original_name}; </td> </tr> <tr> <td class="h" > <a name="2366">2366</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2367">2367</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception("No practical way to resolve $exception_rel_id between two data structures") </td> </tr> <tr> <td class="h" > <a name="2368">2368</a> </td> <td class="c3" > 10098 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2368-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2368-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 38050 </td> <td class="s"> if exists $args->{self_result_object} and exists $args->{foreign_values}; </td> </tr> <tr> <td class="h" > <a name="2369">2369</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2370">2370</a> </td> <td class="c3" > 10098 </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2370-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 48700 </td> <td class="s"> $args->{require_join_free_condition} ||= !!$args->{require_join_free_values}; </td> </tr> <tr> <td class="h" > <a name="2371">2371</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2372">2372</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( "Argument 'self_result_object' must be an object inheriting from '$__expected_result_class_isa'" ) </td> </tr> <tr> <td class="h" > <a name="2373">2373</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if ( </td> </tr> <tr> <td class="h" > <a name="2374">2374</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $args->{self_result_object} </td> </tr> <tr> <td class="h" > <a name="2375">2375</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2376">2376</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2377">2377</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! defined blessed $args->{self_result_object} </td> </tr> <tr> <td class="h" > <a name="2378">2378</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2379">2379</a> </td> <td class="c3" > 10098 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2379-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2379-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 62054 </td> <td class="s"> ! $args->{self_result_object}->isa( $__expected_result_class_isa ) </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2380">2380</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2381">2381</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2382">2382</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2383">2383</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2384">2384</a> </td> <td class="c3" > 10098 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 34100 </td> <td class="s"> my $rel_rsrc = $self->related_source($args->{rel_name}); </td> </tr> <tr> <td class="h" > <a name="2385">2385</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2386">2386</a> </td> <td class="c3" > 10089 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2386-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2386-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 57204 </td> <td class="s"> if ( </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-3"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2387">2387</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $args->{foreign_values} </td> </tr> <tr> <td class="h" > <a name="2388">2388</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2389">2389</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2390">2390</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ref $args->{foreign_values} eq 'HASH' </td> </tr> <tr> <td class="h" > <a name="2391">2391</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2392">2392</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="2393">2393</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Argument 'foreign_values' must be a hash reference" </td> </tr> <tr> <td class="h" > <a name="2394">2394</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2395">2395</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2396">2396</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2397">2397</a> </td> <td class="c3" > 688 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3265 </td> <td class="s"> keys %{$args->{foreign_values}} </td> </tr> <tr> <td class="h" > <a name="2398">2398</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2399">2399</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2400">2400</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($col_idx, $rel_idx) = map </td> </tr> <tr> <td class="h" > <a name="2401">2401</a> </td> <td class="c3" > 679 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1678 </td> <td class="s"> { { map { $_ => 1 } $rel_rsrc->$_ } } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 1358 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 27668 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 10727 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 24484 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2402">2402</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> qw( columns relationships ) </td> </tr> <tr> <td class="h" > <a name="2403">2403</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2404">2404</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2405">2405</a> </td> <td class="c3" > 679 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1540 </td> <td class="s"> my $equivalencies; </td> </tr> <tr> <td class="h" > <a name="2406">2406</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2407">2407</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # re-build {foreign_values} excluding refs as follows </td> </tr> <tr> <td class="h" > <a name="2408">2408</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ( hot codepath: intentionally convoluted ) </td> </tr> <tr> <td class="h" > <a name="2409">2409</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="2410">2410</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{foreign_values} = { map { </td> </tr> <tr> <td class="h" > <a name="2411">2411</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2412">2412</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $_ !~ /^-/ </td> </tr> <tr> <td class="h" > <a name="2413">2413</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2414">2414</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="2415">2415</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "The key '$_' supplied as part of 'foreign_values' during " </td> </tr> <tr> <td class="h" > <a name="2416">2416</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'relationship resolution must be a column name, not a function' </td> </tr> <tr> <td class="h" > <a name="2417">2417</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2418">2418</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2419">2419</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2420">2420</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2421">2421</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # skip if relationship ( means a multicreate stub was passed in ) </td> </tr> <tr> <td class="h" > <a name="2422">2422</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # skip if literal ( can't infer anything about it ) </td> </tr> <tr> <td class="h" > <a name="2423">2423</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # or plain throw if nonequiv yet not literal </td> </tr> <tr> <td class="h" > <a name="2424">2424</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2425">2425</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> length ref $args->{foreign_values}{$_} </td> </tr> <tr> <td class="h" > <a name="2426">2426</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2427">2427</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2428">2428</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $rel_idx->{$_} </td> </tr> <tr> <td class="h" > <a name="2429">2429</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2430">2430</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> is_literal_value($args->{foreign_values}{$_}) </td> </tr> <tr> <td class="h" > <a name="2431">2431</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2432">2432</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2433">2433</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2434">2434</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! exists( </td> </tr> <tr> <td class="h" > <a name="2435">2435</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $equivalencies ||= extract_equality_conditions( $args->{foreign_values}, 'consider nulls' ) ) </td> </tr> <tr> <td class="h" > <a name="2436">2436</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ->{$_} </td> </tr> <tr> <td class="h" > <a name="2437">2437</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2438">2438</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2439">2439</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ($equivalencies->{$_}||'') eq UNRESOLVABLE_CONDITION </td> </tr> <tr> <td class="h" > <a name="2440">2440</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2441">2441</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2442">2442</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="2443">2443</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Resolution of relationship '$args->{rel_name}' failed: " </td> </tr> <tr> <td class="h" > <a name="2444">2444</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "supplied value for foreign column '$_' is not a direct " </td> </tr> <tr> <td class="h" > <a name="2445">2445</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'equivalence expression' </td> </tr> <tr> <td class="h" > <a name="2446">2446</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2447">2447</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2448">2448</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2449">2449</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) ? () </td> </tr> <tr> <td class="h" > <a name="2450">2450</a> </td> <td class="c3" > 2329 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2450-1"> 50 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2450-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 16728 </td> <td class="s"> : $col_idx->{$_} ? ( $_ => $args->{foreign_values}{$_} ) </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-3"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2451">2451</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="2452">2452</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "The key '$_' supplied as part of 'foreign_values' during " </td> </tr> <tr> <td class="h" > <a name="2453">2453</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'relationship resolution is not a column on related source ' </td> </tr> <tr> <td class="h" > <a name="2454">2454</a> </td> <td class="c0" > <a href="#2606"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> . "'@{[ $rel_rsrc->source_name ]}'" </td> </tr> <tr> <td class="h" > <a name="2455">2455</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2456">2456</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2457">2457</a> </td> <td class="c3" > 679 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1186 </td> <td class="s"> } keys %{$args->{foreign_values}} }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 679 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2016 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2458">2458</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2459">2459</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2460">2460</a> </td> <td class="c3" > 10085 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 21671 </td> <td class="s"> my $ret; </td> </tr> <tr> <td class="h" > <a name="2461">2461</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2462">2462</a> </td> <td class="c3" > 10085 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2462-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 44033 </td> <td class="s"> if (ref $rel_info->{cond} eq 'CODE') { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-3"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2463">2463</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2464">2464</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $cref_args = { </td> </tr> <tr> <td class="h" > <a name="2465">2465</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> rel_name => $args->{rel_name}, </td> </tr> <tr> <td class="h" > <a name="2466">2466</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> self_resultsource => $self, </td> </tr> <tr> <td class="h" > <a name="2467">2467</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> self_alias => $args->{self_alias}, </td> </tr> <tr> <td class="h" > <a name="2468">2468</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreign_alias => $args->{foreign_alias}, </td> </tr> <tr> <td class="h" > <a name="2469">2469</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( map </td> </tr> <tr> <td class="h" > <a name="2470">2470</a> </td> <td class="c3" > 1261 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2470-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4466 </td> <td class="s"> { (exists $args->{$_}) ? ( $_ => $args->{$_} ) : () } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2522 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9632 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2471">2471</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> qw( self_result_object foreign_values ) </td> </tr> <tr> <td class="h" > <a name="2472">2472</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ), </td> </tr> <tr> <td class="h" > <a name="2473">2473</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="2474">2474</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2475">2475</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # legacy - never remove these!!! </td> </tr> <tr> <td class="h" > <a name="2476">2476</a> </td> <td class="c3" > 1261 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3554 </td> <td class="s"> $cref_args->{foreign_relname} = $cref_args->{rel_name}; </td> </tr> <tr> <td class="h" > <a name="2477">2477</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2478">2478</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $cref_args->{self_rowobj} = $cref_args->{self_result_object} </td> </tr> <tr> <td class="h" > <a name="2479">2479</a> </td> <td class="c3" > 1261 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2479-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 3906 </td> <td class="s"> if exists $cref_args->{self_result_object}; </td> </tr> <tr> <td class="h" > <a name="2480">2480</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2481">2481</a> </td> <td class="c3" > 1261 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6242 </td> <td class="s"> ($ret->{condition}, $ret->{join_free_condition}, my @extra) = $rel_info->{cond}->($cref_args); </td> </tr> <tr> <td class="h" > <a name="2482">2482</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2483">2483</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # sanity check </td> </tr> <tr> <td class="h" > <a name="2484">2484</a> </td> <td class="c3" > 1261 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2484-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 27372 </td> <td class="s"> $self->throw_exception("A custom condition coderef can return at most 2 conditions, but $exception_rel_id returned extra values: @extra") </td> </tr> <tr> <td class="h" > <a name="2485">2485</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if @extra; </td> </tr> <tr> <td class="h" > <a name="2486">2486</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2487">2487</a> </td> <td class="c3" > 1260 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2487-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5751 </td> <td class="s"> if( $ret->{join_free_condition} ) { </td> </tr> <tr> <td class="h" > <a name="2488">2488</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2489">2489</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception ( </td> </tr> <tr> <td class="h" > <a name="2490">2490</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "The join-free condition returned for $exception_rel_id must be a hash reference" </td> </tr> <tr> <td class="h" > <a name="2491">2491</a> </td> <td class="c3" > 89 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2491-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 357 </td> <td class="s"> ) unless ref $ret->{join_free_condition} eq 'HASH'; </td> </tr> <tr> <td class="h" > <a name="2492">2492</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2493">2493</a> </td> <td class="c3" > 89 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 218 </td> <td class="s"> my ($joinfree_alias, $joinfree_source); </td> </tr> <tr> <td class="h" > <a name="2494">2494</a> </td> <td class="c3" > 89 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2494-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 396 </td> <td class="s"> if (defined $args->{self_result_object}) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2495">2495</a> </td> <td class="c3" > 21 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 40 </td> <td class="s"> $joinfree_alias = $args->{foreign_alias}; </td> </tr> <tr> <td class="h" > <a name="2496">2496</a> </td> <td class="c3" > 21 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 37 </td> <td class="s"> $joinfree_source = $rel_rsrc; </td> </tr> <tr> <td class="h" > <a name="2497">2497</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2498">2498</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (defined $args->{foreign_values}) { </td> </tr> <tr> <td class="h" > <a name="2499">2499</a> </td> <td class="c3" > 68 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 167 </td> <td class="s"> $joinfree_alias = $args->{self_alias}; </td> </tr> <tr> <td class="h" > <a name="2500">2500</a> </td> <td class="c3" > 68 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 157 </td> <td class="s"> $joinfree_source = $self; </td> </tr> <tr> <td class="h" > <a name="2501">2501</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2502">2502</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2503">2503</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # FIXME sanity check until things stabilize, remove at some point </td> </tr> <tr> <td class="h" > <a name="2504">2504</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception ( </td> </tr> <tr> <td class="h" > <a name="2505">2505</a> </td> <td class="c3" > 89 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2505-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 228 </td> <td class="s"> "A join-free condition returned for $exception_rel_id without a result object to chain from" </td> </tr> <tr> <td class="h" > <a name="2506">2506</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) unless $joinfree_alias; </td> </tr> <tr> <td class="h" > <a name="2507">2507</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2508">2508</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $fq_col_list = { map </td> </tr> <tr> <td class="h" > <a name="2509">2509</a> </td> <td class="c3" > 89 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1838 </td> <td class="s"> { ( "$joinfree_alias.$_" => 1 ) } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 490 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1819 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2510">2510</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $joinfree_source->columns </td> </tr> <tr> <td class="h" > <a name="2511">2511</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="2512">2512</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2513">2513</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $fq_col_list->{$_} or $self->throw_exception ( </td> </tr> <tr> <td class="h" > <a name="2514">2514</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "The join-free condition returned for $exception_rel_id may only " </td> </tr> <tr> <td class="h" > <a name="2515">2515</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'contain keys that are fully qualified column names of the corresponding source ' </td> </tr> <tr> <td class="h" > <a name="2516">2516</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "'$joinfree_alias' (instead it returned '$_')" </td> </tr> <tr> <td class="h" > <a name="2517">2517</a> </td> <td class="c3" > 89 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2517-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 277 </td> <td class="s"> ) for keys %{$ret->{join_free_condition}}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 89 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 578 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2518">2518</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2519">2519</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2520">2520</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> defined blessed($_) </td> </tr> <tr> <td class="h" > <a name="2521">2521</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2522">2522</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $_->isa( $__expected_result_class_isa ) </td> </tr> <tr> <td class="h" > <a name="2523">2523</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2524">2524</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception ( </td> </tr> <tr> <td class="h" > <a name="2525">2525</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "The join-free condition returned for $exception_rel_id may not " </td> </tr> <tr> <td class="h" > <a name="2526">2526</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'contain result objects as values - perhaps instead of invoking ' </td> </tr> <tr> <td class="h" > <a name="2527">2527</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . '->$something you meant to return ->get_column($something)' </td> </tr> <tr> <td class="h" > <a name="2528">2528</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2529">2529</a> </td> <td class="c3" > 89 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2529-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 220 </td> <td class="s"> ) for values %{$ret->{join_free_condition}}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 89 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 33 </a> </td> <td >   </td> <td >   </td> <td > 765 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2530">2530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2531">2531</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2532">2532</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2533">2533</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (ref $rel_info->{cond} eq 'HASH') { </td> </tr> <tr> <td class="h" > <a name="2534">2534</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2535">2535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the condition is static - use parallel arrays </td> </tr> <tr> <td class="h" > <a name="2536">2536</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # for a "pivot" depending on which side of the </td> </tr> <tr> <td class="h" > <a name="2537">2537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # rel did we get as an object </td> </tr> <tr> <td class="h" > <a name="2538">2538</a> </td> <td class="c3" > 8804 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 17829 </td> <td class="s"> my (@f_cols, @l_cols); </td> </tr> <tr> <td class="h" > <a name="2539">2539</a> </td> <td class="c3" > 8804 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 14798 </td> <td class="s"> for my $fc (keys %{ $rel_info->{cond} }) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 8804 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 34688 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2540">2540</a> </td> <td class="c3" > 8898 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 24624 </td> <td class="s"> my $lc = $rel_info->{cond}{$fc}; </td> </tr> <tr> <td class="h" > <a name="2541">2541</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2542">2542</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # FIXME STRICTMODE should probably check these are valid columns </td> </tr> <tr> <td class="h" > <a name="2543">2543</a> </td> <td class="c3" > 8898 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2543-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 50011 </td> <td class="s"> $fc =~ s/^foreign\.// || </td> </tr> <tr> <td class="h" > <a name="2544">2544</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception("Invalid rel cond key '$fc'"); </td> </tr> <tr> <td class="h" > <a name="2545">2545</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2546">2546</a> </td> <td class="c3" > 8898 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2546-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 41128 </td> <td class="s"> $lc =~ s/^self\.// || </td> </tr> <tr> <td class="h" > <a name="2547">2547</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception("Invalid rel cond val '$lc'"); </td> </tr> <tr> <td class="h" > <a name="2548">2548</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2549">2549</a> </td> <td class="c3" > 8898 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 23672 </td> <td class="s"> push @f_cols, $fc; </td> </tr> <tr> <td class="h" > <a name="2550">2550</a> </td> <td class="c3" > 8898 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 24128 </td> <td class="s"> push @l_cols, $lc; </td> </tr> <tr> <td class="h" > <a name="2551">2551</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2552">2552</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2553">2553</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # construct the crosstable condition and the identity map </td> </tr> <tr> <td class="h" > <a name="2554">2554</a> </td> <td class="c3" > 8804 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 31692 </td> <td class="s"> for (0..$#f_cols) { </td> </tr> <tr> <td class="h" > <a name="2555">2555</a> </td> <td class="c3" > 8898 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 60642 </td> <td class="s"> $ret->{condition}{"$args->{foreign_alias}.$f_cols[$_]"} = { -ident => "$args->{self_alias}.$l_cols[$_]" }; </td> </tr> <tr> <td class="h" > <a name="2556">2556</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2557">2557</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # explicit value stringification is deliberate - leave no room for </td> </tr> <tr> <td class="h" > <a name="2558">2558</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # interpretation when comparing sets of keys </td> </tr> <tr> <td class="h" > <a name="2559">2559</a> </td> <td class="c3" > 8898 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 41692 </td> <td class="s"> $ret->{identity_map}{$l_cols[$_]} = "$f_cols[$_]"; </td> </tr> <tr> <td class="h" > <a name="2560">2560</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="2561">2561</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2562">2562</a> </td> <td class="c3" > 8804 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2562-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 38578 </td> <td class="s"> if ($args->{foreign_values}) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2563">2563</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{join_free_condition}{"$args->{self_alias}.$l_cols[$_]"} </td> </tr> <tr> <td class="h" > <a name="2564">2564</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> = $ret->{join_free_values}{$l_cols[$_]} </td> </tr> <tr> <td class="h" > <a name="2565">2565</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> = $args->{foreign_values}{$f_cols[$_]} </td> </tr> <tr> <td class="h" > <a name="2566">2566</a> </td> <td class="c3" > 611 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4695 </td> <td class="s"> for 0..$#f_cols; </td> </tr> <tr> <td class="h" > <a name="2567">2567</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2568">2568</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (defined $args->{self_result_object}) { </td> </tr> <tr> <td class="h" > <a name="2569">2569</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2570">2570</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # FIXME - compat block due to inconsistency of get_columns() vs has_column_loaded() </td> </tr> <tr> <td class="h" > <a name="2571">2571</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # The former returns cached-in related single rels, while the latter is doing what </td> </tr> <tr> <td class="h" > <a name="2572">2572</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # it says on the tin. Thus the more logical "get all columns and barf if something </td> </tr> <tr> <td class="h" > <a name="2573">2573</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # is missing" is a non-starter, and we move through each column one by one :/ </td> </tr> <tr> <td class="h" > <a name="2574">2574</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2575">2575</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{self_result_object}->has_column_loaded( $l_cols[$_] ) </td> </tr> <tr> <td class="h" > <a name="2576">2576</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2577">2577</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? $ret->{join_free_condition}{"$args->{foreign_alias}.$f_cols[$_]"} </td> </tr> <tr> <td class="h" > <a name="2578">2578</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> = $ret->{join_free_values}{$f_cols[$_]} </td> </tr> <tr> <td class="h" > <a name="2579">2579</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> = $args->{self_result_object}->get_column( $l_cols[$_] ) </td> </tr> <tr> <td class="h" > <a name="2580">2580</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2581">2581</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : $args->{self_result_object}->in_storage </td> </tr> <tr> <td class="h" > <a name="2582">2582</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2583">2583</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? $self->throw_exception(sprintf </td> </tr> <tr> <td class="h" > <a name="2584">2584</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Unable to resolve relationship '%s' from object '%s': column '%s' not " </td> </tr> <tr> <td class="h" > <a name="2585">2585</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'loaded from storage (or not passed to new() prior to insert()). You ' </td> </tr> <tr> <td class="h" > <a name="2586">2586</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'probably need to call ->discard_changes to get the server-side defaults ' </td> </tr> <tr> <td class="h" > <a name="2587">2587</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . 'from the database', </td> </tr> <tr> <td class="h" > <a name="2588">2588</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{rel_name}, </td> </tr> <tr> <td class="h" > <a name="2589">2589</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{self_result_object}, </td> </tr> <tr> <td class="h" > <a name="2590">2590</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $l_cols[$_], </td> </tr> <tr> <td class="h" > <a name="2591">2591</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2592">2592</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2593">2593</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # non-resolvable yet not in storage - give it a pass </td> </tr> <tr> <td class="h" > <a name="2594">2594</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # FIXME - while this is what the code has done for ages, it doesn't seem right :( </td> </tr> <tr> <td class="h" > <a name="2595">2595</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : ( </td> </tr> <tr> <td class="h" > <a name="2596">2596</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> delete $ret->{join_free_condition}, </td> </tr> <tr> <td class="h" > <a name="2597">2597</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> delete $ret->{join_free_values}, </td> </tr> <tr> <td class="h" > <a name="2598">2598</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> last </td> </tr> <tr> <td class="h" > <a name="2599">2599</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2600">2600</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2601">2601</a> </td> <td class="c3" > 3467 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2601-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 20929 </td> <td class="s"> for 0 .. $#l_cols; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2602">2602</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2603">2603</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2604">2604</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif (ref $rel_info->{cond} eq 'ARRAY') { </td> </tr> <tr> <td class="h" > <a name="2605">2605</a> </td> <td class="c3" > 20 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2605-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 49 </td> <td class="s"> if (@{ $rel_info->{cond} } == 0) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 787 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2606">2606</a> </td> <td class="c0" > <a href="#2617"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $ret = { </td> </tr> <tr> <td class="h" > <a name="2607">2607</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> condition => UNRESOLVABLE_CONDITION, </td> </tr> <tr> <td class="h" > <a name="2608">2608</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="2609">2609</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2610">2610</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2611">2611</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @subconds = map { </td> </tr> <tr> <td class="h" > <a name="2612">2612</a> </td> <td class="c3" > 40 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 443 </td> <td class="s"> local $rel_info->{cond} = $_; </td> </tr> <tr> <td class="h" > <a name="2613">2613</a> </td> <td class="c3" > 40 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 309 </td> <td class="s"> $self->resolve_relationship_condition( $args ); </td> </tr> <tr> <td class="h" > <a name="2614">2614</a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 50 </td> <td class="s"> } @{ $rel_info->{cond} }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 64 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2615">2615</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2616">2616</a> </td> <td class="c3" > 20 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2616-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 51 </td> <td class="s"> if( @{ $rel_info->{cond} } == 1 ) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 84 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2617">2617</a> </td> <td class="c0" > <a href="#2632"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $ret = $subconds[0]; </td> </tr> <tr> <td class="h" > <a name="2618">2618</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2619">2619</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2620">2620</a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 58 </td> <td class="s"> for my $subcond ( @subconds ) { </td> </tr> <tr> <td class="h" > <a name="2621">2621</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception('Either all or none of the OR-condition members must resolve to a join-free condition') </td> </tr> <tr> <td class="h" > <a name="2622">2622</a> </td> <td class="c3" > 40 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2622-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2622-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 230 </td> <td class="s"> if ( $ret and ( $ret->{join_free_condition} xor $subcond->{join_free_condition} ) ); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2623">2623</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2624">2624</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we are discarding join_free_values from individual 'OR' branches here </td> </tr> <tr> <td class="h" > <a name="2625">2625</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # see @nonvalues checks below </td> </tr> <tr> <td class="h" > <a name="2626">2626</a> </td> <td class="c3" > 40 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2626-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 128 </td> <td class="s"> $subcond->{$_} and push @{$ret->{$_}}, $subcond->{$_} for (qw(condition join_free_condition)); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 66 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 286 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2627">2627</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2628">2628</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2629">2629</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2630">2630</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2631">2631</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2632">2632</a> </td> <td class="c0" > <a href="#2831"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->throw_exception ("Can't handle condition $rel_info->{cond} for $exception_rel_id yet :("); </td> </tr> <tr> <td class="h" > <a name="2633">2633</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2634">2634</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2635">2635</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2636">2636</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Explicit normalization pass </td> </tr> <tr> <td class="h" > <a name="2637">2637</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ( nobody really knows what a CODE can return ) </td> </tr> <tr> <td class="h" > <a name="2638">2638</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Explicitly leave U_C alone - it would be normalized </td> </tr> <tr> <td class="h" > <a name="2639">2639</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # to an { -and => [ U_C ] } </td> </tr> <tr> <td class="h" > <a name="2640">2640</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> defined $ret->{$_} </td> </tr> <tr> <td class="h" > <a name="2641">2641</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2642">2642</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{$_} ne UNRESOLVABLE_CONDITION </td> </tr> <tr> <td class="h" > <a name="2643">2643</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2644">2644</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{$_} = normalize_sqla_condition($ret->{$_}) </td> </tr> <tr> <td class="h" > <a name="2645">2645</a> </td> <td class="c3" > 10082 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2645-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 102151 </td> <td class="s"> for qw(condition join_free_condition); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2646">2646</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2647">2647</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2648">2648</a> </td> <td class="c3" > 10082 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2648-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2648-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 39138 </td> <td class="s"> if ( </td> </tr> <tr> <td class="h" > <a name="2649">2649</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{require_join_free_condition} </td> </tr> <tr> <td class="h" > <a name="2650">2650</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2651">2651</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! defined $ret->{join_free_condition} </td> </tr> <tr> <td class="h" > <a name="2652">2652</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2653">2653</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="2654">2654</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ucfirst sprintf "$exception_rel_id does not resolve to a %sjoin-free condition fragment", </td> </tr> <tr> <td class="h" > <a name="2655">2655</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $args->{foreign_values} </td> </tr> <tr> <td class="h" > <a name="2656">2656</a> </td> <td class="c3" > 4 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2656-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 40 </td> <td class="s"> ? "'foreign_values'-based reversed-" </td> </tr> <tr> <td class="h" > <a name="2657">2657</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : '' </td> </tr> <tr> <td class="h" > <a name="2658">2658</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2659">2659</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2660">2660</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2661">2661</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we got something back (not from a static cond) - sanity check and infer values if we can </td> </tr> <tr> <td class="h" > <a name="2662">2662</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ( in case of a static cond join_free_values is already pre-populated for us ) </td> </tr> <tr> <td class="h" > <a name="2663">2663</a> </td> <td class="c3" > 10078 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 18288 </td> <td class="s"> my @nonvalues; </td> </tr> <tr> <td class="h" > <a name="2664">2664</a> </td> <td class="c3" > 10078 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2664-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2664-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 35118 </td> <td class="s"> if( </td> </tr> <tr> <td class="h" > <a name="2665">2665</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{join_free_condition} </td> </tr> <tr> <td class="h" > <a name="2666">2666</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2667">2667</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! $ret->{join_free_values} </td> </tr> <tr> <td class="h" > <a name="2668">2668</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2669">2669</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2670">2670</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $jfc_eqs = extract_equality_conditions( </td> </tr> <tr> <td class="h" > <a name="2671">2671</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{join_free_condition}, </td> </tr> <tr> <td class="h" > <a name="2672">2672</a> </td> <td class="c3" > 102 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 476 </td> <td class="s"> 'consider_nulls' </td> </tr> <tr> <td class="h" > <a name="2673">2673</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2674">2674</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2675">2675</a> </td> <td class="c3" > 102 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 241 </td> <td class="s"> for( keys %{ $ret->{join_free_condition} } ) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 102 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 367 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2676">2676</a> </td> <td class="c3" > 115 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2676-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 407 </td> <td class="s"> if( $_ =~ /^-/ ) { </td> </tr> <tr> <td class="h" > <a name="2677">2677</a> </td> <td class="c3" > 12 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 51 </td> <td class="s"> push @nonvalues, { $_ => $ret->{join_free_condition}{$_} }; </td> </tr> <tr> <td class="h" > <a name="2678">2678</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2679">2679</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2680">2680</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # a join_free_condition is fully qualified by definition </td> </tr> <tr> <td class="h" > <a name="2681">2681</a> </td> <td class="c3" > 103 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2681-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 710 </td> <td class="s"> my ($col) = $_ =~ /\.(.+)/ or carp_unique( </td> </tr> <tr> <td class="h" > <a name="2682">2682</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Internal error - extract_equality_conditions() returned a ' </td> </tr> <tr> <td class="h" > <a name="2683">2683</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "non-fully-qualified key '$_'. *Please* file a bugreport " </td> </tr> <tr> <td class="h" > <a name="2684">2684</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "including your definition of $exception_rel_id" </td> </tr> <tr> <td class="h" > <a name="2685">2685</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2686">2686</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2687">2687</a> </td> <td class="c3" > 103 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2687-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2687-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 732 </td> <td class="s"> if (exists $jfc_eqs->{$_} and ($jfc_eqs->{$_}||'') ne UNRESOLVABLE_CONDITION) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2688">2688</a> </td> <td class="c3" > 92 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 463 </td> <td class="s"> $ret->{join_free_values}{$col} = $jfc_eqs->{$_}; </td> </tr> <tr> <td class="h" > <a name="2689">2689</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2690">2690</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2691">2691</a> </td> <td class="c3" > 11 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 35 </td> <td class="s"> push @nonvalues, { $_ => $ret->{join_free_condition}{$_} }; </td> </tr> <tr> <td class="h" > <a name="2692">2692</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2693">2693</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2694">2694</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2695">2695</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2696">2696</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # all or nothing </td> </tr> <tr> <td class="h" > <a name="2697">2697</a> </td> <td class="c3" > 102 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2697-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 430 </td> <td class="s"> delete $ret->{join_free_values} if @nonvalues; </td> </tr> <tr> <td class="h" > <a name="2698">2698</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2699">2699</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2700">2700</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2701">2701</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # throw only if the user explicitly asked </td> </tr> <tr> <td class="h" > <a name="2702">2702</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $args->{require_join_free_values} </td> </tr> <tr> <td class="h" > <a name="2703">2703</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2704">2704</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @nonvalues </td> </tr> <tr> <td class="h" > <a name="2705">2705</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2706">2706</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->throw_exception( </td> </tr> <tr> <td class="h" > <a name="2707">2707</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Unable to complete value inferrence - $exception_rel_id results in expression(s) instead of definitive values: " </td> </tr> <tr> <td class="h" > <a name="2708">2708</a> </td> <td class="c3" > 10078 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2708-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2708-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 29952 </td> <td class="s"> . do { </td> </tr> <tr> <td class="h" > <a name="2709">2709</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # FIXME - used for diag only, but still icky </td> </tr> <tr> <td class="h" > <a name="2710">2710</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $sqlm = </td> </tr> <tr> <td class="h" > <a name="2711">2711</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2711-1"> 2 </a> </td> <td >   </td> <td > 9 </td> <td class="s"> dbic_internal_try { $self->schema->storage->sql_maker } </td> </tr> <tr> <td class="h" > <a name="2712">2712</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || </td> </tr> <tr> <td class="h" > <a name="2713">2713</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2714">2714</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> require DBIx::Class::SQLMaker </td> </tr> <tr> <td class="h" > <a name="2715">2715</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2716">2716</a> </td> <td class="c3" > 2 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2716-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 17 </td> <td class="s"> DBIx::Class::SQLMaker->new </td> </tr> <tr> <td class="h" > <a name="2717">2717</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2718">2718</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2719">2719</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> local $sqlm->{quote_char}; </td> </tr> <tr> <td class="h" > <a name="2720">2720</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6 </td> <td class="s"> local $sqlm->{_dequalify_idents} = 1; </td> </tr> <tr> <td class="h" > <a name="2721">2721</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 15 </td> <td class="s"> ($sqlm->_recurse_where({ -and => \@nonvalues }))[0] </td> </tr> <tr> <td class="h" > <a name="2722">2722</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2723">2723</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2724">2724</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2725">2725</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2726">2726</a> </td> <td class="c3" > 10076 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 17353 </td> <td class="s"> my $identity_map_incomplete; </td> </tr> <tr> <td class="h" > <a name="2727">2727</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2728">2728</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # add the identities based on the main condition </td> </tr> <tr> <td class="h" > <a name="2729">2729</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # (may already be there, since easy to calculate on the fly in the HASH case) </td> </tr> <tr> <td class="h" > <a name="2730">2730</a> </td> <td class="c3" > 10076 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2730-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 26523 </td> <td class="s"> if ( ! $ret->{identity_map} ) { </td> </tr> <tr> <td class="h" > <a name="2731">2731</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2732">2732</a> </td> <td class="c3" > 1274 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5283 </td> <td class="s"> my $col_eqs = extract_equality_conditions($ret->{condition}); </td> </tr> <tr> <td class="h" > <a name="2733">2733</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2734">2734</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $identity_map_incomplete++ if ( </td> </tr> <tr> <td class="h" > <a name="2735">2735</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{condition} eq UNRESOLVABLE_CONDITION </td> </tr> <tr> <td class="h" > <a name="2736">2736</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2737">2737</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2738">2738</a> </td> <td class="c3" > 1274 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2738-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2738-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 5943 </td> <td class="s"> keys %{$ret->{condition}} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 1274 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6184 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2739">2739</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> != </td> </tr> <tr> <td class="h" > <a name="2740">2740</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> keys %$col_eqs </td> </tr> <tr> <td class="h" > <a name="2741">2741</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2742">2742</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2743">2743</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2744">2744</a> </td> <td class="c3" > 1274 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2470 </td> <td class="s"> my $colinfos; </td> </tr> <tr> <td class="h" > <a name="2745">2745</a> </td> <td class="c3" > 1274 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3773 </td> <td class="s"> for my $lhs (keys %$col_eqs) { </td> </tr> <tr> <td class="h" > <a name="2746">2746</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2747">2747</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # start with the assumption it won't work </td> </tr> <tr> <td class="h" > <a name="2748">2748</a> </td> <td class="c3" > 1281 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3437 </td> <td class="s"> $identity_map_incomplete++; </td> </tr> <tr> <td class="h" > <a name="2749">2749</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2750">2750</a> </td> <td class="c3" > 1281 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2750-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4077 </td> <td class="s"> next if $col_eqs->{$lhs} eq UNRESOLVABLE_CONDITION; </td> </tr> <tr> <td class="h" > <a name="2751">2751</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2752">2752</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # there is no way to know who is right and who is left in a cref </td> </tr> <tr> <td class="h" > <a name="2753">2753</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # therefore a full blown resolution call, and figure out the </td> </tr> <tr> <td class="h" > <a name="2754">2754</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # direction a bit further below </td> </tr> <tr> <td class="h" > <a name="2755">2755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $colinfos ||= fromspec_columns_info([ </td> </tr> <tr> <td class="h" > <a name="2756">2756</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { -alias => $args->{self_alias}, -rsrc => $self }, </td> </tr> <tr> <td class="h" > <a name="2757">2757</a> </td> <td class="c3" > 1281 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2757-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 11747 </td> <td class="s"> { -alias => $args->{foreign_alias}, -rsrc => $rel_rsrc }, </td> </tr> <tr> <td class="h" > <a name="2758">2758</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ]); </td> </tr> <tr> <td class="h" > <a name="2759">2759</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2760">2760</a> </td> <td class="c3" > 1281 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2760-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5327 </td> <td class="s"> next unless $colinfos->{$lhs}; # someone is engaging in witchcraft </td> </tr> <tr> <td class="h" > <a name="2761">2761</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2762">2762</a> </td> <td class="c3" > 1281 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2762-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2762-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 6403 </td> <td class="s"> if( my $rhs_ref = </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-3"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-3"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2763">2763</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2764">2764</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ref $col_eqs->{$lhs} eq 'HASH' </td> </tr> <tr> <td class="h" > <a name="2765">2765</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2766">2766</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> keys %{$col_eqs->{$lhs}} == 1 </td> </tr> <tr> <td class="h" > <a name="2767">2767</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2768">2768</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $col_eqs->{$lhs}{-ident} </td> </tr> <tr> <td class="h" > <a name="2769">2769</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2770">2770</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? [ $col_eqs->{$lhs}{-ident} ] # repack to match the RV of is_literal_value </td> </tr> <tr> <td class="h" > <a name="2771">2771</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : is_literal_value( $col_eqs->{$lhs} ) </td> </tr> <tr> <td class="h" > <a name="2772">2772</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2773">2773</a> </td> <td class="c3" > 1179 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2773-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2773-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 11634 </td> <td class="s"> if ( </td> </tr> <tr> <td class="h" > <a name="2774">2774</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $colinfos->{$rhs_ref->[0]} </td> </tr> <tr> <td class="h" > <a name="2775">2775</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2776">2776</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $colinfos->{$lhs}{-source_alias} ne $colinfos->{$rhs_ref->[0]}{-source_alias} </td> </tr> <tr> <td class="h" > <a name="2777">2777</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2778">2778</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $colinfos->{$lhs}{-source_alias} eq $args->{self_alias} ) </td> </tr> <tr> <td class="h" > <a name="2779">2779</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2780">2780</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # explicit value stringification is deliberate - leave no room for </td> </tr> <tr> <td class="h" > <a name="2781">2781</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # interpretation when comparing sets of keys </td> </tr> <tr> <td class="h" > <a name="2782">2782</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? ( $ret->{identity_map}{$colinfos->{$lhs}{-colname}} = "$colinfos->{$rhs_ref->[0]}{-colname}" ) </td> </tr> <tr> <td class="h" > <a name="2783">2783</a> </td> <td class="c3" > 966 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2783-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5805 </td> <td class="s"> : ( $ret->{identity_map}{$colinfos->{$rhs_ref->[0]}{-colname}} = "$colinfos->{$lhs}{-colname}" ) </td> </tr> <tr> <td class="h" > <a name="2784">2784</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2785">2785</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2786">2786</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # well, what do you know! </td> </tr> <tr> <td class="h" > <a name="2787">2787</a> </td> <td class="c3" > 966 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 11198 </td> <td class="s"> $identity_map_incomplete--; </td> </tr> <tr> <td class="h" > <a name="2788">2788</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2789">2789</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2790">2790</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif ( </td> </tr> <tr> <td class="h" > <a name="2791">2791</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $col_eqs->{$lhs} =~ /^ ( \Q$args->{self_alias}\E \. .+ ) /x </td> </tr> <tr> <td class="h" > <a name="2792">2792</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2793">2793</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ($colinfos->{$1}||{})->{-result_source} == $rel_rsrc </td> </tr> <tr> <td class="h" > <a name="2794">2794</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="2795">2795</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($lcol, $rcol) = map </td> </tr> <tr> <td class="h" > <a name="2796">2796</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 54 </td> <td class="s"> { $colinfos->{$_}{-colname} } </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 11 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2797">2797</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $lhs, $1 ) </td> </tr> <tr> <td class="h" > <a name="2798">2798</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2799">2799</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 18 </td> <td class="s"> carp_unique( </td> </tr> <tr> <td class="h" > <a name="2800">2800</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "The $exception_rel_id specifies equality of column '$lcol' and the " </td> </tr> <tr> <td class="h" > <a name="2801">2801</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "*VALUE* '$rcol' (you did not use the { -ident => ... } operator)" </td> </tr> <tr> <td class="h" > <a name="2802">2802</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2803">2803</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2804">2804</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2805">2805</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2806">2806</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2807">2807</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{identity_map_matches_condition} = ($identity_map_incomplete ? 0 : 1) </td> </tr> <tr> <td class="h" > <a name="2808">2808</a> </td> <td class="c3" > 10076 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2808-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 40504 </td> <td class="s"> if $ret->{identity_map}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2809">2809</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2810">2810</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2811">2811</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # cleanup before final return, easier to eyeball </td> </tr> <tr> <td class="h" > <a name="2812">2812</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! defined $ret->{$_} and delete $ret->{$_} </td> </tr> <tr> <td class="h" > <a name="2813">2813</a> </td> <td class="c3" > 10076 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2813-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 64296 </td> <td class="s"> for keys %$ret; </td> </tr> <tr> <td class="h" > <a name="2814">2814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2815">2815</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2816">2816</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # FIXME - temporary, to fool the idiotic check in SQLMaker::_join_condition </td> </tr> <tr> <td class="h" > <a name="2817">2817</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{condition} = { -and => [ $ret->{condition} ] } unless ( </td> </tr> <tr> <td class="h" > <a name="2818">2818</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{condition} eq UNRESOLVABLE_CONDITION </td> </tr> <tr> <td class="h" > <a name="2819">2819</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="2820">2820</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2821">2821</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ref $ret->{condition} eq 'HASH' </td> </tr> <tr> <td class="h" > <a name="2822">2822</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2823">2823</a> </td> <td class="c3" > 10076 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2823-1"> 100 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2823-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 56175 </td> <td class="s"> grep { $_ =~ /^-/ } keys %{$ret->{condition}} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 10628 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td > 70644 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 10076 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 38780 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2824">2824</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2825">2825</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2826">2826</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2827">2827</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2828">2828</a> </td> <td class="c3" > 10076 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 20271 </td> <td class="s"> if( DBIx::Class::_ENV_::ASSERT_NO_INCONSISTENT_RELATIONSHIP_RESOLUTION ) { </td> </tr> <tr> <td class="h" > <a name="2829">2829</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2830">2830</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $sqlm = </td> </tr> <tr> <td class="h" > <a name="2831">2831</a> </td> <td class="c0" > <a href="#2954"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2831-1"> 0 </a> </td> <td >   </td> <td > 0 </td> <td class="s"> dbic_internal_try { $self->schema->storage->sql_maker } </td> </tr> <tr> <td class="h" > <a name="2832">2832</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || </td> </tr> <tr> <td class="h" > <a name="2833">2833</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2834">2834</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> require DBIx::Class::SQLMaker </td> </tr> <tr> <td class="h" > <a name="2835">2835</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2836">2836</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> DBIx::Class::SQLMaker->new </td> </tr> <tr> <td class="h" > <a name="2837">2837</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2838">2838</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2839">2839</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2840">2840</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> local $sqlm->{_dequalify_idents} = 1; </td> </tr> <tr> <td class="h" > <a name="2841">2841</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2842">2842</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ( $cond_as_sql, $jf_cond_as_sql, $jf_vals_as_sql, $identmap_as_sql ) = map </td> </tr> <tr> <td class="h" > <a name="2843">2843</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { join ' : ', map { </td> </tr> <tr> <td class="h" > <a name="2844">2844</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ref $_ eq 'ARRAY' ? $_->[1] </td> </tr> <tr> <td class="h" > <a name="2845">2845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : defined $_ ? $_ </td> </tr> <tr> <td class="h" > <a name="2846">2846</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : '{UNDEF}' </td> </tr> <tr> <td class="h" > <a name="2847">2847</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } $sqlm->_recurse_where($_) } </td> </tr> <tr> <td class="h" > <a name="2848">2848</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2849">2849</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( map { $ret->{$_} } qw( condition join_free_condition join_free_values ) ), </td> </tr> <tr> <td class="h" > <a name="2850">2850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2851">2851</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { map { </td> </tr> <tr> <td class="h" > <a name="2852">2852</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # inverse because of how the idmap is declared </td> </tr> <tr> <td class="h" > <a name="2853">2853</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{identity_map}{$_} => { -ident => $_ } </td> </tr> <tr> <td class="h" > <a name="2854">2854</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } keys %{$ret->{identity_map}} }, </td> </tr> <tr> <td class="h" > <a name="2855">2855</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2856">2856</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="2857">2857</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2858">2858</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2859">2859</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> emit_loud_diag( </td> </tr> <tr> <td class="h" > <a name="2860">2860</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> confess => 1, </td> </tr> <tr> <td class="h" > <a name="2861">2861</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> msg => sprintf ( </td> </tr> <tr> <td class="h" > <a name="2862">2862</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Resolution of %s produced inconsistent metadata:\n\n" </td> </tr> <tr> <td class="h" > <a name="2863">2863</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "returned value of 'identity_map_matches_condition': %s\n" </td> </tr> <tr> <td class="h" > <a name="2864">2864</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "returned 'condition' rendered as de-qualified SQL: %s\n" </td> </tr> <tr> <td class="h" > <a name="2865">2865</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "returned 'identity_map' rendered as de-qualified SQL: %s\n\n" </td> </tr> <tr> <td class="h" > <a name="2866">2866</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "The condition declared on the misclassified relationship is: %s ", </td> </tr> <tr> <td class="h" > <a name="2867">2867</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $exception_rel_id, </td> </tr> <tr> <td class="h" > <a name="2868">2868</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $ret->{identity_map_matches_condition} || 0 ), </td> </tr> <tr> <td class="h" > <a name="2869">2869</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $cond_as_sql, </td> </tr> <tr> <td class="h" > <a name="2870">2870</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $identmap_as_sql, </td> </tr> <tr> <td class="h" > <a name="2871">2871</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> dump_value( $rel_info->{cond} ), </td> </tr> <tr> <td class="h" > <a name="2872">2872</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ), </td> </tr> <tr> <td class="h" > <a name="2873">2873</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) if ( </td> </tr> <tr> <td class="h" > <a name="2874">2874</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $ret->{identity_map_matches_condition} </td> </tr> <tr> <td class="h" > <a name="2875">2875</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xor </td> </tr> <tr> <td class="h" > <a name="2876">2876</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $cond_as_sql eq $identmap_as_sql ) </td> </tr> <tr> <td class="h" > <a name="2877">2877</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2878">2878</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2879">2879</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2880">2880</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> emit_loud_diag( </td> </tr> <tr> <td class="h" > <a name="2881">2881</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> confess => 1, </td> </tr> <tr> <td class="h" > <a name="2882">2882</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> msg => sprintf ( </td> </tr> <tr> <td class="h" > <a name="2883">2883</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "Resolution of %s produced inconsistent metadata:\n\n" </td> </tr> <tr> <td class="h" > <a name="2884">2884</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "returned 'join_free_condition' rendered as de-qualified SQL: %s\n" </td> </tr> <tr> <td class="h" > <a name="2885">2885</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "returned 'join_free_values' rendered as de-qualified SQL: %s\n\n" </td> </tr> <tr> <td class="h" > <a name="2886">2886</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . "The condition declared on the misclassified relationship is: %s ", </td> </tr> <tr> <td class="h" > <a name="2887">2887</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $exception_rel_id, </td> </tr> <tr> <td class="h" > <a name="2888">2888</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $jf_cond_as_sql, </td> </tr> <tr> <td class="h" > <a name="2889">2889</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $jf_vals_as_sql, </td> </tr> <tr> <td class="h" > <a name="2890">2890</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> dump_value( $rel_info->{cond} ), </td> </tr> <tr> <td class="h" > <a name="2891">2891</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ), </td> </tr> <tr> <td class="h" > <a name="2892">2892</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) if ( </td> </tr> <tr> <td class="h" > <a name="2893">2893</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $ret->{join_free_condition} </td> </tr> <tr> <td class="h" > <a name="2894">2894</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="2895">2895</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( </td> </tr> <tr> <td class="h" > <a name="2896">2896</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> exists $ret->{join_free_values} </td> </tr> <tr> <td class="h" > <a name="2897">2897</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xor </td> </tr> <tr> <td class="h" > <a name="2898">2898</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ( $jf_cond_as_sql eq $jf_vals_as_sql ) </td> </tr> <tr> <td class="h" > <a name="2899">2899</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) </td> </tr> <tr> <td class="h" > <a name="2900">2900</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="2901">2901</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2902">2902</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2903">2903</a> </td> <td class="c3" > 10076 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 73109 </td> <td class="s"> $ret; </td> </tr> <tr> <td class="h" > <a name="2904">2904</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2905">2905</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2906">2906</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 related_source </td> </tr> <tr> <td class="h" > <a name="2907">2907</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2908">2908</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="2909">2909</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2910">2910</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $rel_name </td> </tr> <tr> <td class="h" > <a name="2911">2911</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2912">2912</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: $source </td> </tr> <tr> <td class="h" > <a name="2913">2913</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2914">2914</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="2915">2915</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2916">2916</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the result source object for the given relationship. </td> </tr> <tr> <td class="h" > <a name="2917">2917</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2918">2918</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="2919">2919</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2920">2920</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub related_source { </td> </tr> <tr> <td class="h" > <a name="2921">2921</a> </td> <td class="c3" > 27236 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2921-1"> 27236 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2921-1"> 1 </a> </td> <td > 69539 </td> <td class="s"> my ($self, $rel) = @_; </td> </tr> <tr> <td class="h" > <a name="2922">2922</a> </td> <td class="c3" > 27236 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2922-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 523409 </td> <td class="s"> if( !$self->has_relationship( $rel ) ) { </td> </tr> <tr> <td class="h" > <a name="2923">2923</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 38 </td> <td class="s"> $self->throw_exception("No such relationship '$rel' on " . $self->source_name); </td> </tr> <tr> <td class="h" > <a name="2924">2924</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2925">2925</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2926">2926</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # if we are not registered with a schema - just use the prototype </td> </tr> <tr> <td class="h" > <a name="2927">2927</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # however if we do have a schema - ask for the source by name (and </td> </tr> <tr> <td class="h" > <a name="2928">2928</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # throw in the process if all fails) </td> </tr> <tr> <td class="h" > <a name="2929">2929</a> </td> <td class="c3" > 27235 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2929-1"> 100 </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2929-1"> 27235 </a> </td> <td >   </td> <td > 166758 </td> <td class="s"> if (my $schema = dbic_internal_try { $self->schema }) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 27235 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 69813 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2930">2930</a> </td> <td class="c3" > 27207 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 532795 </td> <td class="s"> $schema->source($self->relationship_info($rel)->{source}); </td> </tr> <tr> <td class="h" > <a name="2931">2931</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2932">2932</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="2933">2933</a> </td> <td class="c3" > 28 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 722 </td> <td class="s"> my $class = $self->relationship_info($rel)->{class}; </td> </tr> <tr> <td class="h" > <a name="2934">2934</a> </td> <td class="c3" > 28 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 144 </td> <td class="s"> $self->ensure_class_loaded($class); </td> </tr> <tr> <td class="h" > <a name="2935">2935</a> </td> <td class="c3" > 28 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 490 </td> <td class="s"> $class->result_source; </td> </tr> <tr> <td class="h" > <a name="2936">2936</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2937">2937</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2938">2938</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2939">2939</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 related_class </td> </tr> <tr> <td class="h" > <a name="2940">2940</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2941">2941</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="2942">2942</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2943">2943</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: $rel_name </td> </tr> <tr> <td class="h" > <a name="2944">2944</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2945">2945</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: $classname </td> </tr> <tr> <td class="h" > <a name="2946">2946</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2947">2947</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="2948">2948</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2949">2949</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the class name for objects in the given relationship. </td> </tr> <tr> <td class="h" > <a name="2950">2950</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2951">2951</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="2952">2952</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2953">2953</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub related_class { </td> </tr> <tr> <td class="h" > <a name="2954">2954</a> </td> <td class="c0" > <a href="#2955"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2954-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2954-1"> 1 </a> </td> <td > 0 </td> <td class="s"> my ($self, $rel) = @_; </td> </tr> <tr> <td class="h" > <a name="2955">2955</a> </td> <td class="c0" > <a href="#2956"> 0 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2955-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if( !$self->has_relationship( $rel ) ) { </td> </tr> <tr> <td class="h" > <a name="2956">2956</a> </td> <td class="c0" > <a href="#2958"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->throw_exception("No such relationship '$rel' on " . $self->source_name); </td> </tr> <tr> <td class="h" > <a name="2957">2957</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2958">2958</a> </td> <td class="c0" > <a href="#3041"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> return $self->schema->class($self->relationship_info($rel)->{source}); </td> </tr> <tr> <td class="h" > <a name="2959">2959</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2960">2960</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2961">2961</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 handle </td> </tr> <tr> <td class="h" > <a name="2962">2962</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2963">2963</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="2964">2964</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2965">2965</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: none </td> </tr> <tr> <td class="h" > <a name="2966">2966</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2967">2967</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: L<$source_handle|DBIx::Class::ResultSourceHandle> </td> </tr> <tr> <td class="h" > <a name="2968">2968</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2969">2969</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="2970">2970</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2971">2971</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Obtain a new L<result source handle instance|DBIx::Class::ResultSourceHandle> </td> </tr> <tr> <td class="h" > <a name="2972">2972</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> for this source. Used as a serializable pointer to this resultsource, as it is not </td> </tr> <tr> <td class="h" > <a name="2973">2973</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> easy (nor advisable) to serialize CODErefs which may very well be present in e.g. </td> </tr> <tr> <td class="h" > <a name="2974">2974</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> relationship definitions. </td> </tr> <tr> <td class="h" > <a name="2975">2975</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2976">2976</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="2977">2977</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2978">2978</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub handle { </td> </tr> <tr> <td class="h" > <a name="2979">2979</a> </td> <td class="c3" > 206 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2979-1"> 206 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2979-1"> 1 </a> </td> <td > 3630 </td> <td class="s"> require DBIx::Class::ResultSourceHandle; </td> </tr> <tr> <td class="h" > <a name="2980">2980</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return DBIx::Class::ResultSourceHandle->new({ </td> </tr> <tr> <td class="h" > <a name="2981">2981</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> source_moniker => $_[0]->source_name, </td> </tr> <tr> <td class="h" > <a name="2982">2982</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2983">2983</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # so that a detached thaw can be re-frozen </td> </tr> <tr> <td class="h" > <a name="2984">2984</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $_[0]->{_detached_thaw} </td> </tr> <tr> <td class="h" > <a name="2985">2985</a> </td> <td class="c3" > 206 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2985-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4597 </td> <td class="s"> ? ( _detached_source => $_[0] ) </td> </tr> <tr> <td class="h" > <a name="2986">2986</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : ( schema => $_[0]->schema ) </td> </tr> <tr> <td class="h" > <a name="2987">2987</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> , </td> </tr> <tr> <td class="h" > <a name="2988">2988</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="2989">2989</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2990">2990</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2991">2991</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $global_phase_destroy; </td> </tr> <tr> <td class="h" > <a name="2992">2992</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub DESTROY { </td> </tr> <tr> <td class="h" > <a name="2993">2993</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ### NO detected_reinvoked_destructor check </td> </tr> <tr> <td class="h" > <a name="2994">2994</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ### This code very much relies on being called multuple times </td> </tr> <tr> <td class="h" > <a name="2995">2995</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2996">2996</a> </td> <td class="c3" > 67862 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#2996-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#2996-1"> 33 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#2996-1"> 67862 </a> </td> <td >   </td> <td > 1641325 </td> <td class="s"> return if $global_phase_destroy ||= in_global_destruction; </td> </tr> <tr> <td class="h" > <a name="2997">2997</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2998">2998</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ###### </td> </tr> <tr> <td class="h" > <a name="2999">2999</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # !!! ACHTUNG !!!! </td> </tr> <tr> <td class="h" > <a name="3000">3000</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ###### </td> </tr> <tr> <td class="h" > <a name="3001">3001</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # </td> </tr> <tr> <td class="h" > <a name="3002">3002</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Under no circumstances shall $_[0] be stored anywhere else (like copied to </td> </tr> <tr> <td class="h" > <a name="3003">3003</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # a lexical variable, or shifted, or anything else). Doing so will mess up </td> </tr> <tr> <td class="h" > <a name="3004">3004</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the refcount of this particular result source, and will allow the $schema </td> </tr> <tr> <td class="h" > <a name="3005">3005</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # we are trying to save to reattach back to the source we are destroying. </td> </tr> <tr> <td class="h" > <a name="3006">3006</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # The relevant code checking refcounts is in ::Schema::DESTROY() </td> </tr> <tr> <td class="h" > <a name="3007">3007</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3008">3008</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # if we are not a schema instance holder - we don't matter </td> </tr> <tr> <td class="h" > <a name="3009">3009</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return if( </td> </tr> <tr> <td class="h" > <a name="3010">3010</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ! ref $_[0]->{schema} </td> </tr> <tr> <td class="h" > <a name="3011">3011</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or </td> </tr> <tr> <td class="h" > <a name="3012">3012</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> isweak $_[0]->{schema} </td> </tr> <tr> <td class="h" > <a name="3013">3013</a> </td> <td class="c3" > 67862 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#3013-1"> 100 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#3013-1"> 100 </a> </td> <td >   </td> <td >   </td> <td > 1286535 </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="3014">3014</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3015">3015</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # weaken our schema hold forcing the schema to find somewhere else to live </td> </tr> <tr> <td class="h" > <a name="3016">3016</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # during global destruction (if we have not yet bailed out) this will throw </td> </tr> <tr> <td class="h" > <a name="3017">3017</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # which will serve as a signal to not try doing anything else </td> </tr> <tr> <td class="h" > <a name="3018">3018</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # however beware - on older perls the exception seems randomly untrappable </td> </tr> <tr> <td class="h" > <a name="3019">3019</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # due to some weird race condition during thread joining :((( </td> </tr> <tr> <td class="h" > <a name="3020">3020</a> </td> <td class="c3" > 46 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#3020-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 232 </td> <td class="s"> local $SIG{__DIE__} if $SIG{__DIE__}; </td> </tr> <tr> <td class="h" > <a name="3021">3021</a> </td> <td class="c3" > 46 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 94 </td> <td class="s"> local $@ if DBIx::Class::_ENV_::UNSTABLE_DOLLARAT; </td> </tr> <tr> <td class="h" > <a name="3022">3022</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> eval { </td> </tr> <tr> <td class="h" > <a name="3023">3023</a> </td> <td class="c3" > 46 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 242 </td> <td class="s"> weaken $_[0]->{schema}; </td> </tr> <tr> <td class="h" > <a name="3024">3024</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3025">3025</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # if schema is still there reintroduce ourselves with strong refs back to us </td> </tr> <tr> <td class="h" > <a name="3026">3026</a> </td> <td class="c3" > 46 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#3026-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 406 </td> <td class="s"> if ($_[0]->{schema}) { </td> </tr> <tr> <td class="h" > <a name="3027">3027</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 746 </td> <td class="s"> my $srcregs = $_[0]->{schema}->source_registrations; </td> </tr> <tr> <td class="h" > <a name="3028">3028</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3029">3029</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> defined $srcregs->{$_} </td> </tr> <tr> <td class="h" > <a name="3030">3030</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="3031">3031</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $srcregs->{$_} == $_[0] </td> </tr> <tr> <td class="h" > <a name="3032">3032</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="3033">3033</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $srcregs->{$_} = $_[0] </td> </tr> <tr> <td class="h" > <a name="3034">3034</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and </td> </tr> <tr> <td class="h" > <a name="3035">3035</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> last </td> </tr> <tr> <td class="h" > <a name="3036">3036</a> </td> <td class="c3" > 33 </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#3036-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 3821 </td> <td class="s"> for keys %$srcregs; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-2"> 66 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--condition.html#-3"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3037">3037</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3038">3038</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3039">3039</a> </td> <td class="c3" > 46 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 254 </td> <td class="s"> 1; </td> </tr> <tr> <td class="h" > <a name="3040">3040</a> </td> <td class="c3" > 46 </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#3040-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 102 </td> <td class="s"> } or do { </td> </tr> <tr> <td class="h" > <a name="3041">3041</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $global_phase_destroy = 1; </td> </tr> <tr> <td class="h" > <a name="3042">3042</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }; </td> </tr> <tr> <td class="h" > <a name="3043">3043</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3044">3044</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Dummy NEXTSTATE ensuring the all temporaries on the stack are garbage </td> </tr> <tr> <td class="h" > <a name="3045">3045</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # collected before leaving this scope. Depending on the code above, this </td> </tr> <tr> <td class="h" > <a name="3046">3046</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # may very well be just a preventive measure guarding future modifications </td> </tr> <tr> <td class="h" > <a name="3047">3047</a> </td> <td class="c3" > 46 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 871 </td> <td class="s"> undef; </td> </tr> <tr> <td class="h" > <a name="3048">3048</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3049">3049</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3050">3050</a> </td> <td class="c3" > 204 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#3050-1"> 204 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#3050-1"> 0 </a> </td> <td > 9670 </td> <td class="s"> sub STORABLE_freeze { Storable::nfreeze($_[0]->handle) } </td> </tr> <tr> <td class="h" > <a name="3051">3051</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3052">3052</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub STORABLE_thaw { </td> </tr> <tr> <td class="h" > <a name="3053">3053</a> </td> <td class="c3" > 196 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#3053-1"> 196 </a> </td> <td class="c0" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#3053-1"> 0 </a> </td> <td > 4202 </td> <td class="s"> my ($self, $cloning, $ice) = @_; </td> </tr> <tr> <td class="h" > <a name="3054">3054</a> </td> <td class="c3" > 196 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 304 </td> <td class="s"> %$self = %{ (Storable::thaw($ice))->resolve }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 196 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 442 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3055">3055</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3056">3056</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3057">3057</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 throw_exception </td> </tr> <tr> <td class="h" > <a name="3058">3058</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3059">3059</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> See L<DBIx::Class::Schema/"throw_exception">. </td> </tr> <tr> <td class="h" > <a name="3060">3060</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3061">3061</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="3062">3062</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3063">3063</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub throw_exception { </td> </tr> <tr> <td class="h" > <a name="3064">3064</a> </td> <td class="c3" > 2074 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#3064-1"> 2074 </a> </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--subroutine.html#3064-1"> 1 </a> </td> <td > 5244 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="3065">3065</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3066">3066</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->{schema} </td> </tr> <tr> <td class="h" > <a name="3067">3067</a> </td> <td class="c3" > 2074 </td> <td class="c3" > <a href="blib-lib-DBIx-Class-ResultSource-pm--branch.html#3067-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 15306 </td> <td class="s"> ? $self->{schema}->throw_exception(@_) </td> </tr> <tr> <td class="h" > <a name="3068">3068</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : DBIx::Class::Exception->throw(@_) </td> </tr> <tr> <td class="h" > <a name="3069">3069</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ; </td> </tr> <tr> <td class="h" > <a name="3070">3070</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3071">3071</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3072">3072</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 column_info_from_storage </td> </tr> <tr> <td class="h" > <a name="3073">3073</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3074">3074</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over </td> </tr> <tr> <td class="h" > <a name="3075">3075</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3076">3076</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Arguments: 1/0 (default: 0) </td> </tr> <tr> <td class="h" > <a name="3077">3077</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3078">3078</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item Return Value: 1/0 </td> </tr> <tr> <td class="h" > <a name="3079">3079</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3080">3080</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="3081">3081</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3082">3082</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __PACKAGE__->column_info_from_storage(1); </td> </tr> <tr> <td class="h" > <a name="3083">3083</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3084">3084</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Enables the on-demand automatic loading of the above column </td> </tr> <tr> <td class="h" > <a name="3085">3085</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> metadata from storage as necessary. This is *deprecated*, and </td> </tr> <tr> <td class="h" > <a name="3086">3086</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> should not be used. It will be removed before 1.0. </td> </tr> <tr> <td class="h" > <a name="3087">3087</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3088">3088</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 FURTHER QUESTIONS? </td> </tr> <tr> <td class="h" > <a name="3089">3089</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3090">3090</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>. </td> </tr> <tr> <td class="h" > <a name="3091">3091</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3092">3092</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 COPYRIGHT AND LICENSE </td> </tr> <tr> <td class="h" > <a name="3093">3093</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3094">3094</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE> </td> </tr> <tr> <td class="h" > <a name="3095">3095</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can </td> </tr> <tr> <td class="h" > <a name="3096">3096</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> redistribute it and/or modify it under the same terms as the </td> </tr> <tr> <td class="h" > <a name="3097">3097</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>. </td> </tr> <tr> <td class="h" > <a name="3098">3098</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3099">3099</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="3100">3100</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3101">3101</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1; </td> </tr> </table> </body> </html>