[CDBI] Using scalar functions with AbstractSearch

Bill Moseley moseley at hank.org
Thu Feb 2 04:16:27 GMT 2006


On Thu, Feb 02, 2006 at 02:41:57AM +0100, Rhesa Rozendaal wrote:
> >$ perl -MData::Dumper -MSQL::Abstract -le "print Dumper 
> >[SQL::Abstract->new->where( { foo => 'bar', start => {'<', 'now()'}, end 
> >=> { '>=', 'now()'} } )]"
> >$VAR1 = [
> >          ' WHERE ( end >= ? AND foo = ? AND start < ? )',
> >          'now()',
> >          'bar',
> >          'now()'
> >        ];
> 
> Close, but no sigar ;)

> That way makes the "now()" just a plain string, whereas I was looking for 
> the database function now() [might be mysql specific]. The resulting SQL 
> would be:
> 
>  WHERE ( end >= 'now()' AND foo = 'bar' AND start < 'now()' )
> 
> which is different from
> 
>  WHERE ( end >= now() AND foo = 'bar' AND start < now() )


You must be smoking different cigars:

(or using a different DBD)


test=> \d times
                                     Table "public.times"
 Column |            Type             |                       Modifiers                       
--------+-----------------------------+-------------------------------------------------------
 id     | integer                     | not null default nextval('public.times_id_seq'::text)
 name   | text                        | 
 time   | timestamp(0) with time zone | 
Indexes:
    "times_pkey" primary key, btree (id)

test=> select * from times;
 id | name  |          time          
----+-------+------------------------
  1 | hello | 2006-02-01 20:10:53-08
(1 row)


$ cat now.pl
package DB;
use base 'Class::DBI::Sweet';
DB->connection('dbi:Pg:dbname=test');

package DB::Time;
use base 'DB';
__PACKAGE__->table('times');
__PACKAGE__->columns(All => qw/id time name/);


package main;
use strict;
use warnings;


my $foo = DB::Time->search( {
    time => { '<=', 'now()' },
})->first;

print $foo->time;

$ perl -l now.pl
2006-02-01 20:10:53-08


-- 
Bill Moseley
moseley at hank.org





More information about the ClassDBI mailing list