From: Peter Rabbitson Date: Tue, 1 Sep 2009 09:10:11 +0000 (+0000) Subject: Fix misleading FAQ entry X-Git-Tag: v0.08111~40 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=f6a14bd4c44420c2e4b2f6d2467cd59e2f28e2d3;p=dbsrgits%2FDBIx-Class.git Fix misleading FAQ entry --- diff --git a/lib/DBIx/Class/Manual/FAQ.pod b/lib/DBIx/Class/Manual/FAQ.pod index 05e057a..98692c5 100644 --- a/lib/DBIx/Class/Manual/FAQ.pod +++ b/lib/DBIx/Class/Manual/FAQ.pod @@ -216,10 +216,10 @@ values to filter them by, for example: ->search({'created_time' => { '>=', '2006-06-01 00:00:00' } }) -Note that to use a function here you need to make the whole value into -a scalar reference: +Note that to use a function here you need to make it a scalar +reference: - ->search({'created_time' => \'>= yesterday()' }) + ->search({'created_time' => { '>=', \'yesterday()' } }) =item .. search in several tables simultaneously? @@ -243,19 +243,6 @@ database, and using that as your source. A C is a stored SQL query, which can be accessed similarly to a table, see your database documentation for details. -=item .. search using greater-than or less-than and database functions? - -To use functions or literal SQL with conditions other than equality -you need to supply the entire condition, for example: - - my $interval = "< now() - interval '12 hours'"; - ->search({last_attempt => \$interval}) - -and not: - - my $interval = "now() - interval '12 hours'"; - ->search({last_attempt => { '<' => \$interval } }) - =item .. search with an SQL function on the left hand side? To use an SQL function on the left hand side of a comparison: diff --git a/t/95sql_maker.t b/t/95sql_maker.t index c4a65a2..629eed6 100644 --- a/t/95sql_maker.t +++ b/t/95sql_maker.t @@ -7,11 +7,9 @@ use Test::Exception; use lib qw(t/lib); use DBIC::SqlMakerTest; -plan tests => 4; - use_ok('DBICTest'); -my $schema = DBICTest->init_schema(); +my $schema = DBICTest->init_schema(no_deploy => 1); my $sql_maker = $schema->storage->sql_maker; @@ -49,9 +47,33 @@ my $sql_maker = $schema->storage->sql_maker; ); } +# make sure the cookbook caveat of { $op, \'...' } no longer applies +{ + my ($sql, @bind) = $sql_maker->where({ + last_attempt => \ '< now() - interval "12 hours"', + next_attempt => { '<', \ 'now() - interval "12 hours"' }, + created => [ + { '<=', \ '1969' }, + \ '> 1984', + ], + }); + is_same_sql_bind( + $sql, + \@bind, + 'WHERE + (created <= 1969 OR created > 1984 ) + AND last_attempt < now() - interval "12 hours" + AND next_attempt < now() - interval "12 hours" + ', + [], + ); +} + # Make sure the carp/croak override in SQLA works (via SQLAHacks) my $file = __FILE__; $file = "\Q$file\E"; throws_ok (sub { $schema->resultset ('Artist')->search ({}, { order_by => { -asc => 'stuff', -desc => 'staff' } } )->as_query; }, qr/$file/, 'Exception correctly croak()ed'); + +done_testing;