Here's an update on how I'm progressing with this. I took the second approach from my initial post and added the following code to my script.
#This is a function to override SQLites DATETIME('NOW').
sub my_fake_time {
# gmtime() normally returns the current time but it is overriden b
+y Test::MockTime to give a fake time.
# Actually I am using the version of gmtime() from Time::gmtime as
+ it has a nicer interface. As this too overrides
# Perls core gmtime() function it must be use'd after Test::MockTi
+me so all the overrides occur in the right order.
my $t = gmtime;
# return the fake date in the same format as SQLite returns.
return sprintf '%04d-%02d-%02d %02d:%02d:%02d', $t->year + 1900,
$t->mon + 1, $t->mday, $t->hour, $t->min, $t->sec;
};
...
# This works. DATETIME('NOW') in my SQL now returns a fake time.
$dbh->sqlite_create_function(
'DATETIME', 1, \&my_fake_time
);
# However CURRENT TIMESTAMP still doesn't work even though from what I
+'ve read it is implemented in terms of DATETIME('NOW')
#
# I tried this but it doesn't work.
$dbh->sqlite_create_function(
'CURRENT TIMESTAMP', 1, \&my_fake_time
);
# Any other ideas?