From 32743bc26062e30f071bed146b34d234356a97c0 Mon Sep 17 00:00:00 2001 From: zhangting Date: Fri, 19 Jul 2024 11:11:02 +0800 Subject: [PATCH] =?UTF-8?q?timestamp=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=94=AF=E6=8C=81between=20and=E7=9A=84=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postgresql/jdbc/PgPreparedStatement.java | 3 ++ .../test/dolphintest/TimestampTest.java | 53 ++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/pgjdbc/src/main/java/org/postgresql/jdbc/PgPreparedStatement.java b/pgjdbc/src/main/java/org/postgresql/jdbc/PgPreparedStatement.java index 7db6c5c..85ccc04 100644 --- a/pgjdbc/src/main/java/org/postgresql/jdbc/PgPreparedStatement.java +++ b/pgjdbc/src/main/java/org/postgresql/jdbc/PgPreparedStatement.java @@ -1354,6 +1354,9 @@ class PgPreparedStatement extends PgStatement implements PreparedStatement { } int oid = Oid.UNSPECIFIED; + if (connection.isDolphin()) { + oid = Oid.TIMESTAMP; + } // Use UNSPECIFIED as a compromise to get both TIMESTAMP and TIMESTAMPTZ working. // This is because you get this in a +1300 timezone: diff --git a/pgjdbc/src/test/java/org/postgresql/test/dolphintest/TimestampTest.java b/pgjdbc/src/test/java/org/postgresql/test/dolphintest/TimestampTest.java index 2c4d828..2159d81 100644 --- a/pgjdbc/src/test/java/org/postgresql/test/dolphintest/TimestampTest.java +++ b/pgjdbc/src/test/java/org/postgresql/test/dolphintest/TimestampTest.java @@ -54,4 +54,55 @@ public class TimestampTest extends BaseTest4 { TestUtil.dropTable(con, "test_timeZone"); } -} \ No newline at end of file + + @Test + public void testTimeRange() throws Exception { + TestUtil.createTable(con, "test_TimeRange", "id int, c2 timestamp"); + String sql = "INSERT INTO test_TimeRange VALUES (?, ?)"; + java.util.Date start = new java.util.Date(); + try (PreparedStatement pstmt = con.prepareStatement(sql)) { + pstmt.setInt(1, 1); + pstmt.setTimestamp(2, new Timestamp(start.getTime() - 100000)); + pstmt.execute(); + + pstmt.setInt(1, 2); + pstmt.setTimestamp(2, new Timestamp(start.getTime())); + pstmt.execute(); + + pstmt.setInt(1, 3); + pstmt.setTimestamp(2, new Timestamp(start.getTime() + 500000)); + pstmt.execute(); + + pstmt.setInt(1, 4); + pstmt.setTimestamp(2, new Timestamp(start.getTime() + 1000000000)); + pstmt.execute(); + } + + String selectSql = "select id, c2 from test_TimeRange where c2 between ? and ?;"; + try (PreparedStatement pstmt2 = con.prepareStatement(selectSql)) { + pstmt2.setTimestamp(1, new Timestamp(start.getTime()-5000)); + pstmt2.setTimestamp(2, new Timestamp(start.getTime() + 800000)); + try (ResultSet rs = pstmt2.executeQuery()) { + assertTrue(rs.next()); + assertEquals(2, rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(3, rs.getInt(1)); + } + } + + String selectSql2 = "select id, c2 from test_TimeRange where c2 >= ? and c2 <= ?;"; + try (PreparedStatement pstmt2 = con.prepareStatement(selectSql2)) { + pstmt2.setTimestamp(1, new Timestamp(start.getTime()-5000)); + pstmt2.setTimestamp(2, new Timestamp(start.getTime() + 800000)); + try (ResultSet rs = pstmt2.executeQuery()) { + assertTrue(rs.next()); + assertEquals(2, rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(3, rs.getInt(1)); + } + } + + TestUtil.dropTable(con, "test_TimeRange"); + } +} + -- Gitee