Commit | Line | Data |
48389aca |
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', |
09cfd2c8 |
24 | 'foreign.y1' => { '<=', 'self.y' }, |
25 | 'foreign.y2' => { '>=', 'self.y' }, |
48389aca |
26 | }; |
27 | }); |
28 | } |
29 | |
30 | my $s = MySchema->connect('dbi:SQLite:dbname=:memory:'); |
31 | ::Dwarn([ $s->source('Foo')->columns ]); |
32 | |
33 | my $rs = $s->resultset('Foo')->search({ z => 1 }); |
34 | |
35 | ::Dwarn(${$rs->as_query}->[0]); |
36 | |
37 | $s->storage->ensure_connected; |
38 | |
39 | $s->storage |
40 | ->sql_maker |
41 | ->with::roles('DBIx::Class::SQLMaker::Role::SQLA2Passthrough') |
42 | ->plugin('+ExtraClauses') |
43 | ->plugin('+BangOverrides'); |
44 | |
45 | warn ref($s->storage->sql_maker); |
46 | |
47 | my $rs2 = $s->resultset('Foo')->search({ |
09cfd2c8 |
48 | -op => [ '=', { -ident => 'outer.x' }, { -ident => 'me.y' } ] |
48389aca |
49 | }, { |
50 | 'select' => [ 'me.x', { -ident => 'me.z' } ], |
51 | '!with' => [ outer => $rs->get_column('x')->as_query ], |
52 | }); |
53 | |
54 | ::Dwarn(${$rs2->as_query}->[0]); |
55 | |
56 | my $rs3 = $s->resultset('Foo') |
57 | ->search({}, { prefetch => 'bars' }); |
58 | |
59 | ::Dwarn(${$rs3->as_query}->[0]); |
09cfd2c8 |
60 | |
61 | $s->source('Foo')->result_class('DBIx::Class::Core'); |
62 | $s->source('Foo')->set_primary_key('x'); |
63 | |
64 | my $rs4 = $s->resultset('Foo')->new_result({ x => 1, y => 2 }) |
65 | ->search_related('bars'); |
66 | |
67 | ::Dwarn(${$rs4->as_query}->[0]); |