So maybe you are running tests using an H2 database with your MySQL-based application, and you just got the message that the MySQL function UNIX_TIMESTAMP(value) is missing from the H2 database? No worries. With an H2 database, you can build your own UNIX_TIMESTAMP (or any other function you might need). I’m here going to show you one way to do it:
First, we need to create a class on the classpath of the application that connects to the H2 database, this is normally the application you are testing:
package h2;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class H2UserDefined {
public static Long UNIX_TIMESTAMP(String d) throws ParseException {
DateFormat dateFormat
= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date dateresult = dateFormat.parse(d);
return dateresult.getTime()/1000;
}
}
Now we need to tell H2 that we have a new function to use. To do this we need some SQL to run against the H2 database:
CREATE ALIAS UNIX_TIMESTAMP FOR "h2.H2UserDefined.UNIX_TIMESTAMP";
Here we tell the H2 database that there is a new alias called UNIX_TIMESTAMP that can be used and that it is located in the package ‘h2’ with the path ‘H2UserDefines’ and a function name UNIX_TIMESTAMP. Quite simple 🙂
Tested on Play Framework 2.3.6, H2 v1.4