From 2843a13e512d1d1deda4f9b6fe504db8d640c91a Mon Sep 17 00:00:00 2001 From: Barry Lind Date: Tue, 15 Jan 2002 07:37:33 +0000 Subject: [PATCH] Applied patch submitted by Ryouichi Matsuda (r-matuda@sra.co.jp) that fixed a problem with leading zeros being lost on fractional seconds when setting a timestamp value on a PreparedStatement. --- .../org/postgresql/jdbc1/PreparedStatement.java | 13 ++++++++++++- .../org/postgresql/jdbc2/PreparedStatement.java | 12 +++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/PreparedStatement.java b/src/interfaces/jdbc/org/postgresql/jdbc1/PreparedStatement.java index 1da1da6711..31bbaf2eec 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/PreparedStatement.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/PreparedStatement.java @@ -388,8 +388,19 @@ public class PreparedStatement extends Statement implements java.sql.PreparedSta { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df.setTimeZone(TimeZone.getTimeZone("GMT")); + + // Make decimal from nanos. + StringBuffer decimal = new StringBuffer("000000000"); // max nanos length + String nanos = String.valueOf(x.getNanos()); + decimal.setLength(decimal.length() - nanos.length()); + decimal.append(nanos); + if (! connection.haveMinimumServerVersion("7.2")) { + // Because 7.1 include bug that "hh:mm:59.999" becomes "hh:mm:60.00". + decimal.setLength(2); + } + StringBuffer strBuf = new StringBuffer("'"); - strBuf.append(df.format(x)).append('.').append(x.getNanos() / 10000000).append("+00'"); + strBuf.append(df.format(x)).append('.').append(decimal).append("+00'"); set(parameterIndex, strBuf.toString()); } } diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java b/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java index d5418bd1be..49c5f2da80 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java @@ -412,11 +412,21 @@ public class PreparedStatement extends Statement implements java.sql.PreparedSta tl_tsdf.set(df); } + // Make decimal from nanos. + StringBuffer decimal = new StringBuffer("000000000"); // max nanos length + String nanos = String.valueOf(x.getNanos()); + decimal.setLength(decimal.length() - nanos.length()); + decimal.append(nanos); + if (! connection.haveMinimumServerVersion("7.2")) { + // Because 7.1 include bug that "hh:mm:59.999" becomes "hh:mm:60.00". + decimal.setLength(2); + } + // Use the shared StringBuffer synchronized (sbuf) { sbuf.setLength(0); - sbuf.append("'").append(df.format(x)).append('.').append(x.getNanos() / 10000000).append("+00'"); + sbuf.append("'").append(df.format(x)).append('.').append(decimal).append("+00'"); set(parameterIndex, sbuf.toString()); } -- GitLab