;
}
-{
- my %part_map = (
- month => 'm',
- day_of_month => 'd',
- year => 'Y',
- );
-
- sub _datetime_sql { "STRFTIME('$part_map{$_[1]}', $_[2])" }
-}
+sub _datetime_sql { die 'date part extraction not implemented for this database' }
-sub _datetime_diff_sql {
- my ($self, $part, $left, $right) = @_;
- '(' .
- $self->_datetime_sql($part, $left)
- . ' - ' .
- $self->_datetime_sql($part, $right)
- . ')'
-}
+sub _datetime_diff_sql { die 'date diffing not implemented for this database' }
sub _where_op_GET_DATETIME {
my ($self) = @_;
# Disable it here
sub _lock_select () { '' };
+
+{
+ my %part_map = (
+ month => 'm',
+ day_of_month => 'd',
+ year => 'Y',
+ );
+
+ sub _datetime_sql { "STRFTIME('%$part_map{$_[1]}', $_[2])" }
+}
+
+sub _datetime_diff_sql {
+ my ($self, $part, $left, $right) = @_;
+ if ($part eq 'day') {
+ return "(JULIANDAY($left) - JULIANDAY($right))"
+ } elsif ($part eq 'second') {
+ return "(STRFTIME('%s',$left) - STRFTIME('%s',$right))"
+ } else {
+ die "part $part is not supported by SQLite"
+ }
+}
+
1;
{ -op => [ '=', 12, { -dt_month => { -ident => 'artist.when_began' } } ] },
{ -op => [ '=', 2010, { -dt_get => [year => \'artist.when_began'] } ] },
{ -op => [ '=', 14, { -dt_get => [day_of_month => \'artist.when_began'] } ] },
- { -op => [ '=', 10, { -dt_diff => [year => { -ident => 'artist.when_began' }, \'artist.when_ended'] } ] },
+ { -op => [ '=', 10, { -dt_diff => [second => { -ident => 'artist.when_began' }, \'artist.when_ended'] } ] },
]
} ) ],
"SELECT *
FROM artist
WHERE ( (
- ( ? = STRFTIME('m', artist.when_began) ) AND
- ( ? = STRFTIME('Y', artist.when_began) ) AND
- ( ? = STRFTIME('d', artist.when_began) ) AND
- ( ? = ( STRFTIME('Y', artist.when_began) - STRFTIME('Y', artist.when_ended)))
+ ( ? = STRFTIME('%m', artist.when_began) ) AND
+ ( ? = STRFTIME('%Y', artist.when_began) ) AND
+ ( ? = STRFTIME('%d', artist.when_began) ) AND
+ ( ? = ( STRFTIME('%s', artist.when_began) - STRFTIME('%s', artist.when_ended)))
) )
",
[