22b0bec48d501ee5ec669dfcd254a387adbad16b
[dbsrgits/DBIx-Class.git] / t / sqlmaker / op_dt.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 use lib qw(t/lib);
7 use DBIC::SqlMakerTest;
8 use DateTime;
9
10 use_ok('DBICTest');
11
12 my $schema = DBICTest->init_schema();
13
14 my $sql_maker = $schema->storage->sql_maker;
15
16 my $date = DateTime->new(
17    year => 2010,
18    month => 12,
19    day   => 14,
20    hour  => 12,
21    minute => 12,
22    second => 12,
23 );
24
25 my $date2 = $date->clone->set_day(16);
26
27 is_same_sql_bind (
28   \[ $sql_maker->select ('artist', '*', { 'artist.when_began' => { -dt => $date } } ) ],
29   "SELECT *
30     FROM artist
31     WHERE artist.when_began = ?
32   ",
33   [['artist.when_began', '2010-12-14 12:12:12']],
34 );
35
36 is_same_sql_bind (
37   \[ $sql_maker->update ('artist',
38     { 'artist.when_began' => { -dt => $date } },
39     { 'artist.when_ended' => { '<' => { -dt => $date2 } } },
40   ) ],
41   "UPDATE artist
42     SET artist.when_began = ?
43     WHERE artist.when_ended < ?
44   ",
45   [
46    ['artist.when_began', '2010-12-14 12:12:12'],
47    ['artist.when_ended', '2010-12-16 12:12:12'],
48   ],
49 );
50
51 is_same_sql_bind (
52   \[ $sql_maker->select ('artist', '*', {
53     -and => [
54        { -op => [ '=', 12, { -dt_month => { -ident => 'artist.when_began' } } ] },
55        { -op => [ '=', 2010, { -dt_get => [year => \'artist.when_began'] } ] },
56        { -op => [ '=', 14, { -dt_get => [day_of_month => \'artist.when_began'] } ] },
57        { -op => [ '=', 10, { -dt_diff => [second => { -ident => 'artist.when_began' }, \'artist.when_ended'] } ] },
58     ]
59   } ) ],
60   "SELECT *
61      FROM artist
62      WHERE ( (
63        ( ? = STRFTIME('%m', artist.when_began) ) AND
64        ( ? = STRFTIME('%Y', artist.when_began) ) AND
65        ( ? = STRFTIME('%d', artist.when_began) ) AND
66        ( ? = ( STRFTIME('%s', artist.when_began) - STRFTIME('%s', artist.when_ended)))
67      ) )
68   ",
69   [
70    ['', 12],
71    ['', 2010],
72    ['', 14],
73    ['', 10],
74   ],
75 );
76
77 done_testing;