1DBIx::Class::SQLMaker::URsoelre:C:oSnQtDLrBAiI2bxPu:at:seCsdltahPsresor:ul:gShDQ(oL3cM)uamkeenrt:a:tRioolne::SQLA2Passthrough(3)
2
3
4
6 DBIx::Class::SQLMaker::Role::SQLA2Passthrough - A test of future
7 possibilities
8
10 • select and group_by options are processed using the richer SQLA2
11 code
12
13 • expand_join_condition is provided to more easily express rich joins
14
15 See "examples/sqla2passthrough.pl" for a small amount of running code.
16
18 (on_connect_call => sub {
19 my ($storage) = @_;
20 $storage->sql_maker
21 ->with::roles('DBIx::Class::SQLMaker::Role::SQLA2Passthrough');
22 })
23
24 expand_join_condition
25 __PACKAGE__->has_many(minions => 'Blah::Person' => sub {
26 my ($args) = @_;
27 $args->{self_resultsource}
28 ->schema->storage->sql_maker
29 ->expand_join_condition(
30 $args
31 );
32 });
33
34 on
35 __PACKAGE__->has_many(minions => 'Blah::Person' => on {
36 { 'self.group_id' => 'foreign.group_id',
37 'self.rank' => { '>', 'foreign.rank' } }
38 });
39
40 Or with ParameterizedJoinHack,
41
42 __PACKAGE__->parameterized_has_many(
43 priority_tasks => 'MySchema::Result::Task',
44 [['min_priority'] => sub {
45 my $args = shift;
46 return +{
47 "$args->{foreign_alias}.owner_id" => {
48 -ident => "$args->{self_alias}.id",
49 },
50 "$args->{foreign_alias}.priority" => {
51 '>=' => $_{min_priority},
52 },
53 };
54 }],
55 );
56
57 becomes
58
59 __PACKAGE__->parameterized_has_many(
60 priority_tasks => 'MySchema::Result::Task',
61 [['min_priority'] => on {
62 { 'foreign.owner_id' => 'self.id',
63 'foreign.priority' => { '>=', { -value => $_{min_priority} } } }
64 }]
65 );
66
67 Note that foreign/self can appear in such a condition on either side,
68 BUT if you want DBIx::Class to be able to use a join-less version you
69 must ensure that the LHS is all foreign columns, i.e.
70
71 on {
72 +{
73 'foreign.x' => 'self.x',
74 'self.y' => { -between => [ 'foreign.y1', 'foreign.y2' ] }
75 }
76 }
77
78 is completely valid but DBIC will insist on doing a JOIN even if you
79 have a fully populated row object to call "search_related" on - to
80 avoid the spurious JOIN, you must specify it with explicit LHS foreign
81 cols as:
82
83 on {
84 +{
85 'foreign.x' => 'self.x',
86 'foreign.y1' => { '<=', 'self.y' },
87 'foreign.y2' => { '>=', 'self.y' },
88 }
89 }
90
91
92
93perl v5.34.0 DBIx2:0:2C2l-a0s1s-:2:1SQLMaker::Role::SQLA2Passthrough(3)