
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class DateDstTest
{
	@Test public void testIt() throws SQLException
	{
		try(
			Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/testdb", "user", "password");
			Statement st = connection.createStatement())
		{
			final DatabaseMetaData meta = connection.getMetaData();
			System.out.println(meta.getDatabaseProductName());
			System.out.println(meta.getDatabaseProductVersion());
			System.out.println(meta.getDriverName());
			System.out.println(meta.getDriverVersion());

			st.execute("DROP TABLE IF EXISTS tab");
			st.execute("CREATE TABLE tab (a date, b date, x date)");

			st.execute("DELETE FROM tab");
			st.execute("INSERT INTO tab (a,b) VALUES ({d'2007-04-26'},{d'2007-04-29'})");

			try(ResultSet rs = st.executeQuery(
					"SELECT a, b, COALESCE(a,b), LEAST(a,b), GREATEST(a,b), "
					+ "CASE WHEN a<b THEN a ELSE b END FROM tab"))
			{
				rs.next();
				System.out.println("a        = " + toString(rs.getDate(1)));
				System.out.println("b        = " + toString(rs.getDate(2)));
				System.out.println("COALESCE = " + toString(rs.getDate(3)));
				System.out.println("LEAST    = " + toString(rs.getDate(4)));
				System.out.println("GREATEST = " + toString(rs.getDate(5)));
				System.out.println("CASE     = " + toString(rs.getDate(6)));
			}

			st.execute("DROP TABLE IF EXISTS tab");
		}
	}

	@SuppressWarnings("deprecation")
	private static String toString(final Date d)
	{
		return d + "  " + d.getYear() + "/" + d.getMonth() + "/" + d.getDate();
	}


	static
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
		}
		catch(final ClassNotFoundException e)
		{
			try
			{
				Class.forName("org.mariadb.jdbc.Driver");
			}
			catch(final ClassNotFoundException e1)
			{
				throw new RuntimeException(e1);
			}
		}
	}
}
