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