-
Notifications
You must be signed in to change notification settings - Fork 151
/
order_by_bindtransport.t
103 lines (95 loc) · 2.81 KB
/
order_by_bindtransport.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
use strict;
use warnings;
use Test::More;
use Test::Exception;
use Data::Dumper::Concise;
use lib qw(t/lib);
use DBICTest;
use DBIC::SqlMakerTest;
sub test_order {
TODO: {
my $rs = shift;
my $args = shift;
local $TODO = "Not implemented" if $args->{todo};
lives_ok {
is_same_sql_bind(
$rs->search(
{ foo => 'bar' },
{
order_by => $args->{order_by},
having =>
[ { read_count => { '>' => 5 } }, \[ 'read_count < ?', [ read_count => 8 ] ] ]
}
)->as_query,
"(
SELECT me.foo, me.bar, me.hello, me.goodbye, me.sensors, me.read_count
FROM fourkeys me
WHERE ( foo = ? )
HAVING read_count > ? OR read_count < ?
ORDER BY $args->{order_req}
)",
[
[ { sqlt_datatype => 'integer', dbic_colname => 'foo' }
=> 'bar' ],
[ { sqlt_datatype => 'int', dbic_colname => 'read_count' }
=> 5 ],
[ { sqlt_datatype => 'int', dbic_colname => 'read_count' }
=> 8 ],
$args->{bind}
? map { [ { dbic_colname => $_->[0] } => $_->[1] ] } @{ $args->{bind} }
: ()
],
) || diag Dumper $args->{order_by};
};
}
}
my @tests = (
{
order_by => \'foo DESC',
order_req => 'foo DESC',
bind => [],
},
{
order_by => { -asc => 'foo' },
order_req => 'foo ASC',
bind => [],
},
{
order_by => { -desc => \[ 'colA LIKE ?', [ colA => 'test' ] ] },
order_req => 'colA LIKE ? DESC',
bind => [ [ colA => 'test' ] ],
},
{
order_by => \[ 'colA LIKE ? DESC', [ colA => 'test' ] ],
order_req => 'colA LIKE ? DESC',
bind => [ [ colA => 'test' ] ],
},
{
order_by => [
{ -asc => \['colA'] },
{ -desc => \[ 'colB LIKE ?', [ colB => 'test' ] ] },
{ -asc => \[ 'colC LIKE ?', [ colC => 'tost' ] ] },
],
order_req => 'colA ASC, colB LIKE ? DESC, colC LIKE ? ASC',
bind => [ [ colB => 'test' ], [ colC => 'tost' ] ],
},
{
todo => 1,
order_by => [
{ -asc => 'colA' },
{ -desc => { colB => { 'LIKE' => 'test' } } },
{ -asc => { colC => { 'LIKE' => 'tost' } } }
],
order_req => 'colA ASC, colB LIKE ? DESC, colC LIKE ? ASC',
bind => [ [ colB => 'test' ], [ colC => 'tost' ] ],
},
{
todo => 1,
order_by => { -desc => { colA => { LIKE => 'test' } } },
order_req => 'colA LIKE ? DESC',
bind => [ [ colA => 'test' ] ],
},
);
my $rs = DBICTest->init_schema->resultset('FourKeys');
test_order($rs, $_) for @tests;
done_testing;