Thread: 42.2.3 regression in fn timestampadd(SQL_TSI_MINUTE)

42.2.3 regression in fn timestampadd(SQL_TSI_MINUTE)

From
Adam Rauch
Date:
Simple Java 8 test case below outputs different results when run against the 42.2.2 driver vs. the just released 42.2.3 driver:

PostgreSQL JDBC Driver 42.2.2
PostgreSQL 10.4 database "labkey2"
SQL_TSI_SECOND: 2003-01-01 00:00:03.0
SQL_TSI_MINUTE: 2003-01-01 00:03:00.0
SQL_TSI_HOUR: 2003-01-01 03:00:00.0

PostgreSQL JDBC Driver 42.2.3
PostgreSQL 10.4 database "labkey2"
SQL_TSI_SECOND: 2003-01-01 00:00:03.0
SQL_TSI_MINUTE: 2003-01-01 00:00:03.0
SQL_TSI_HOUR: 2003-01-01 03:00:00.0

SQL_TSI_MINUTE seems to be acting like SQL_TSI_SECOND in 42.2.3.

Thanks,
Adam

import java.sql.*;

public class PGTest
{   public static void main(String[] args) throws SQLException   {       try (Connection conn = (3 == args.length ? DriverManager.getConnection(args[0], args[1], args[2]) : DriverManager.getConnection("jdbc:postgresql://" + args[0] + ":" + args[1] + "/" + args[2], args[3], args[4])))       {           DatabaseMetaData dmd = conn.getMetaData();           System.out.println(dmd.getDriverName() + " " + dmd.getDriverVersion());           System.out.println(dmd.getDatabaseProductName() + " " + dmd.getDatabaseProductVersion() + " database \"" + conn.getCatalog() + "\"");
           testTimestampAdd("SQL_TSI_SECOND", conn);           testTimestampAdd("SQL_TSI_MINUTE", conn);           testTimestampAdd("SQL_TSI_HOUR", conn);
           System.out.flush();           System.out.close();       }   }
   private static void testTimestampAdd(String interval, Connection conn) throws SQLException   {       String sql = "SELECT {fn timestampadd(" + interval + ", 3, CAST('01 Jan 2003' AS TIMESTAMP))} AS ThreeMinutes";       try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql))       {           while (rs.next())               System.out.println(interval + ": " + rs.getTimestamp(1));       }   }
}

Re: 42.2.3 regression in fn timestampadd(SQL_TSI_MINUTE)

From
Vladimir Sitnikov
Date:
Adam, thanks for the prompt report.

Please feel free to review a suggested fix: https://github.com/pgjdbc/pgjdbc/pull/1250 

Vladimir

Re: 42.2.3 regression in fn timestampadd(SQL_TSI_MINUTE)

From
Adam Rauch
Date:
Vladimir, thanks for the prompt fix!

I've confirmed that 42.2.4 works correctly with our unit tests (which 
exercise timestampadd using all the standard constants)... i.e., fix 
looks great.

Minor issue: I believe there's a typo in the 42.2.3 known issues section 
of the changelogs (/CHANGELOG.md and 
/docs/_posts/2018-07-12-42.2.3-release.md): I think "SQL_TSI_MINUTE is 
treated as minute" should be "SQL_TSI_MINUTE is treated as second".

Thanks!
Adam

On 7/14/2018 3:06 AM, Vladimir Sitnikov wrote:
> Adam, thanks for the prompt report.
>
> Please feel free to review a suggested fix: 
> https://github.com/pgjdbc/pgjdbc/pull/1250
>
> Vladimir