Changes/author for a1e1a51
[dbsrgits/DBIx-Class-Historic.git] / t / lib / DBIC / SqlMakerTest.pm
CommitLineData
b596c25c 1package DBIC::SqlMakerTest;
949172b0 2
3use strict;
4use warnings;
5
7bb3e161 6use base qw/Exporter/;
7
8use Carp;
9use SQL::Abstract::Test;
949172b0 10
949172b0 11our @EXPORT = qw/
7bb3e161 12 is_same_sql_bind
13 is_same_sql
14 is_same_bind
15/;
16our @EXPORT_OK = qw/
17 eq_sql
18 eq_bind
19 eq_sql_bind
949172b0 20/;
21
7bb3e161 22sub 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
541;
55
56__END__
57
58
59=head1 NAME
60
61DBIC::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
77Exports functions that can be used to compare generated SQL and bind values.
78
7bb3e161 79This is a thin wrapper around L<SQL::Abstract::Test>, which makes it easier
80to 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
104Compares given and expected pairs of C<($sql, \@bind)>, and calls
105L<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
115Compares given and expected SQL statement, and calls L<Test::Builder/ok> on the
116result, 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
126Compares given and expected bind value lists, and calls L<Test::Builder/ok> on
127the 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
133Compares 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
139Compares 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
148Compares the two SQL statements and the two lists of bind values. Returns true
149IFF they are equivalent and the bind values are the same.
150
949172b0 151
152=head1 SEE ALSO
153
154L<SQL::Abstract::Test>, L<Test::More>, L<Test::Builder>.
155
156=head1 AUTHOR
157
158Norbert Buchmuller, <norbi@nix.hu>
159
160=head1 COPYRIGHT AND LICENSE
161
162Copyright 2008 by Norbert Buchmuller.
163
164This library is free software; you can redistribute it and/or modify
7bb3e161 165it under the same terms as Perl itself.