Commit | Line | Data |
b596c25c |
1 | package DBIC::SqlMakerTest; |
949172b0 |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
7bb3e161 |
6 | use base qw/Exporter/; |
7 | |
8 | use Carp; |
9 | use SQL::Abstract::Test; |
949172b0 |
10 | |
949172b0 |
11 | our @EXPORT = qw/ |
7bb3e161 |
12 | is_same_sql_bind |
13 | is_same_sql |
14 | is_same_bind |
15 | /; |
16 | our @EXPORT_OK = qw/ |
17 | eq_sql |
18 | eq_bind |
19 | eq_sql_bind |
949172b0 |
20 | /; |
21 | |
7bb3e161 |
22 | sub is_same_sql_bind { |
23 | # unroll possible as_query arrayrefrefs |
24 | my @args; |
949172b0 |
25 | |
7bb3e161 |
26 | for (1,2) { |
27 | my $chunk = shift @_; |
6ffb5be5 |
28 | |
7bb3e161 |
29 | if ( ref $chunk eq 'REF' and ref $$chunk eq 'ARRAY' ) { |
30 | my ($sql, @bind) = @$$chunk; |
31 | push @args, ($sql, \@bind); |
6ffb5be5 |
32 | } |
7bb3e161 |
33 | else { |
34 | push @args, $chunk, shift @_; |
6ffb5be5 |
35 | } |
6ffb5be5 |
36 | |
6ffb5be5 |
37 | } |
38 | |
7bb3e161 |
39 | push @args, shift @_; |
6ffb5be5 |
40 | |
7bb3e161 |
41 | croak "Unexpected argument(s) supplied to is_same_sql_bind: " . join ('; ', @_) |
42 | if @_; |
949172b0 |
43 | |
2056ff22 |
44 | @_ = @args; |
45 | goto &SQL::Abstract::Test::is_same_sql_bind; |
949172b0 |
46 | } |
47 | |
7bb3e161 |
48 | *is_same_sql = \&SQL::Abstract::Test::is_same_sql; |
49 | *is_same_bind = \&SQL::Abstract::Test::is_same_bind; |
50 | *eq_sql = \&SQL::Abstract::Test::eq_sql; |
51 | *eq_bind = \&SQL::Abstract::Test::eq_bind; |
52 | *eq_sql_bind = \&SQL::Abstract::Test::eq_sql_bind; |
949172b0 |
53 | |
54 | 1; |
55 | |
56 | __END__ |
57 | |
58 | |
59 | =head1 NAME |
60 | |
61 | DBIC::SqlMakerTest - Helper package for testing sql_maker component of DBIC |
62 | |
63 | =head1 SYNOPSIS |
64 | |
65 | use Test::More; |
66 | use DBIC::SqlMakerTest; |
67 | |
68 | my ($sql, @bind) = $schema->storage->sql_maker->select(%args); |
69 | is_same_sql_bind( |
70 | $sql, \@bind, |
71 | $expected_sql, \@expected_bind, |
72 | 'foo bar works' |
73 | ); |
74 | |
75 | =head1 DESCRIPTION |
76 | |
77 | Exports functions that can be used to compare generated SQL and bind values. |
78 | |
7bb3e161 |
79 | This is a thin wrapper around L<SQL::Abstract::Test>, which makes it easier |
80 | to compare as_query sql/bind arrayrefrefs directly. |
949172b0 |
81 | |
82 | =head1 FUNCTIONS |
83 | |
84 | =head2 is_same_sql_bind |
85 | |
86 | is_same_sql_bind( |
7bb3e161 |
87 | $given_sql, \@given_bind, |
88 | $expected_sql, \@expected_bind, |
89 | $test_msg |
90 | ); |
91 | |
92 | is_same_sql_bind( |
93 | $rs->as_query |
94 | $expected_sql, \@expected_bind, |
95 | $test_msg |
96 | ); |
97 | |
98 | is_same_sql_bind( |
99 | \[$given_sql, @given_bind], |
949172b0 |
100 | $expected_sql, \@expected_bind, |
101 | $test_msg |
102 | ); |
103 | |
104 | Compares given and expected pairs of C<($sql, \@bind)>, and calls |
105 | L<Test::Builder/ok> on the result, with C<$test_msg> as message. |
106 | |
6ffb5be5 |
107 | =head2 is_same_sql |
108 | |
109 | is_same_sql( |
110 | $given_sql, |
111 | $expected_sql, |
112 | $test_msg |
113 | ); |
114 | |
115 | Compares given and expected SQL statement, and calls L<Test::Builder/ok> on the |
116 | result, with C<$test_msg> as message. |
117 | |
118 | =head2 is_same_bind |
119 | |
120 | is_same_bind( |
121 | \@given_bind, |
122 | \@expected_bind, |
123 | $test_msg |
124 | ); |
125 | |
126 | Compares given and expected bind value lists, and calls L<Test::Builder/ok> on |
127 | the result, with C<$test_msg> as message. |
128 | |
949172b0 |
129 | =head2 eq_sql |
130 | |
131 | my $is_same = eq_sql($given_sql, $expected_sql); |
132 | |
133 | Compares the two SQL statements. Returns true IFF they are equivalent. |
134 | |
135 | =head2 eq_bind |
136 | |
137 | my $is_same = eq_sql(\@given_bind, \@expected_bind); |
138 | |
139 | Compares two lists of bind values. Returns true IFF their values are the same. |
140 | |
6ffb5be5 |
141 | =head2 eq_sql_bind |
142 | |
143 | my $is_same = eq_sql_bind( |
144 | $given_sql, \@given_bind, |
145 | $expected_sql, \@expected_bind |
146 | ); |
147 | |
148 | Compares the two SQL statements and the two lists of bind values. Returns true |
149 | IFF they are equivalent and the bind values are the same. |
150 | |
949172b0 |
151 | |
152 | =head1 SEE ALSO |
153 | |
154 | L<SQL::Abstract::Test>, L<Test::More>, L<Test::Builder>. |
155 | |
156 | =head1 AUTHOR |
157 | |
158 | Norbert Buchmuller, <norbi@nix.hu> |
159 | |
160 | =head1 COPYRIGHT AND LICENSE |
161 | |
162 | Copyright 2008 by Norbert Buchmuller. |
163 | |
164 | This library is free software; you can redistribute it and/or modify |
7bb3e161 |
165 | it under the same terms as Perl itself. |