Commit | Line | Data |
e6e94947 |
1 | use strict; |
2 | use warnings; |
3 | use Devel::Dwarn; |
4 | use With::Roles; |
5 | { |
6 | package MySchema; |
7 | use Object::Tap; |
8 | use base qw(DBIx::Class::Schema); |
9 | use DBIx::Class::ResultSource::Table; |
10 | __PACKAGE__->register_source( |
11 | Foo => DBIx::Class::ResultSource::Table->new({ name => 'foo' }) |
12 | ->$_tap(add_columns => qw(x y z)) |
13 | ); |
14 | __PACKAGE__->register_source( |
15 | Bar => DBIx::Class::ResultSource::Table->new({ name => 'bar' }) |
16 | ->$_tap(add_columns => qw(x y1 y2 z)) |
17 | ); |
18 | } |
19 | { |
20 | package MyScratchpad; |
21 | use DBIx::Class::SQLMaker::Role::SQLA2Passthrough qw(on); |
22 | MySchema->source('Foo')->add_relationship(bars => 'Bar' => on { |
23 | +{ 'foreign.x' => 'self.x', |
24 | 'self.y' => { -between => [ qw(foreign.y1 foreign.y2) ] } |
25 | }; |
26 | }); |
27 | } |
28 | |
29 | my $s = MySchema->connect('dbi:SQLite:dbname=:memory:'); |
30 | ::Dwarn([ $s->source('Foo')->columns ]); |
31 | |
32 | my $rs = $s->resultset('Foo')->search({ z => 1 }); |
33 | |
34 | ::Dwarn(${$rs->as_query}->[0]); |
35 | |
36 | $s->storage->ensure_connected; |
37 | |
38 | $s->storage |
39 | ->sql_maker |
40 | ->with::roles('DBIx::Class::SQLMaker::Role::SQLA2Passthrough') |
41 | ->plugin('+ExtraClauses') |
42 | ->plugin('+BangOverrides'); |
43 | |
44 | warn ref($s->storage->sql_maker); |
45 | |
46 | my $rs2 = $s->resultset('Foo')->search({ |
47 | -op => [ '=', { -ident => 'outer.y' }, { -ident => 'me.x' } ] |
48 | }, { |
49 | 'select' => [ 'me.x', { -ident => 'me.z' } ], |
50 | '!with' => [ outer => $rs->get_column('x')->as_query ], |
51 | }); |
52 | |
53 | ::Dwarn(${$rs2->as_query}->[0]); |
54 | |
55 | my $rs3 = $s->resultset('Foo') |
56 | ->search({}, { prefetch => 'bars' }); |
57 | |
58 | ::Dwarn(${$rs3->as_query}->[0]); |