mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-02 17:41:25 +02:00
Applied patch from Kim Ho @ redhat.com to make support for setObject() more
spec complient with regards to various data/time/timestamp objects Modified Files: jdbc/org/postgresql/errors.properties jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
This commit is contained in:
parent
f207718b0c
commit
6896bfa86c
@ -100,3 +100,6 @@ postgresql.call.wrongrtntype:A CallableStatement Function was executed and the r
|
|||||||
postgresql.input.fetch.gt0:Fetch size must be a value greater than or equal to 0.
|
postgresql.input.fetch.gt0:Fetch size must be a value greater than or equal to 0.
|
||||||
postgresql.input.query.gt0:Query Timeout must be a value greater than or equal to 0.
|
postgresql.input.query.gt0:Query Timeout must be a value greater than or equal to 0.
|
||||||
postgresql.input.rows.gt0:Maximum number of rows must be a value greater than or equal to 0.
|
postgresql.input.rows.gt0:Maximum number of rows must be a value greater than or equal to 0.
|
||||||
|
postgresql.format.baddate:The date given: {0} does not match the format required: {1}.
|
||||||
|
postgresql.format.badtime:The time given: {0} does not match the format required: {1}.
|
||||||
|
postgresql.format.badtimestamp:The timestamp given {0} does not match the format required: {1}.
|
||||||
|
@ -25,7 +25,7 @@ import java.sql.Timestamp;
|
|||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.26 2003/06/30 21:10:55 davec Exp $
|
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.27 2003/07/09 05:12:04 barry Exp $
|
||||||
* This class defines methods of the jdbc1 specification. This class is
|
* This class defines methods of the jdbc1 specification. This class is
|
||||||
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
|
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
|
||||||
* methods. The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
|
* methods. The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
|
||||||
@ -1488,13 +1488,31 @@ public abstract class AbstractJdbc1Statement implements BaseStatement
|
|||||||
setString(parameterIndex, x.toString());
|
setString(parameterIndex, x.toString());
|
||||||
break;
|
break;
|
||||||
case Types.DATE:
|
case Types.DATE:
|
||||||
|
if (x instanceof java.sql.Date)
|
||||||
setDate(parameterIndex, (java.sql.Date)x);
|
setDate(parameterIndex, (java.sql.Date)x);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
java.sql.Date tmpd = (x instanceof java.util.Date) ? new java.sql.Date(((java.util.Date)x).getTime()) : dateFromString(x.toString());
|
||||||
|
setDate(parameterIndex, tmpd);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Types.TIME:
|
case Types.TIME:
|
||||||
setTime(parameterIndex, (Time)x);
|
if (x instanceof java.sql.Time)
|
||||||
|
setTime(parameterIndex, (java.sql.Time)x);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
java.sql.Time tmpt = (x instanceof java.util.Date) ? new java.sql.Time(((java.util.Date)x).getTime()) : timeFromString(x.toString());
|
||||||
|
setTime(parameterIndex, tmpt);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Types.TIMESTAMP:
|
case Types.TIMESTAMP:
|
||||||
setTimestamp(parameterIndex, (Timestamp)x);
|
if (x instanceof java.sql.Timestamp)
|
||||||
|
setTimestamp(parameterIndex ,(java.sql.Timestamp)x);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
java.sql.Timestamp tmpts = (x instanceof java.util.Date) ? new java.sql.Timestamp(((java.util.Date)x).getTime()) : timestampFromString(x.toString());
|
||||||
|
setTimestamp(parameterIndex, tmpts);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Types.BIT:
|
case Types.BIT:
|
||||||
if (x instanceof Boolean)
|
if (x instanceof Boolean)
|
||||||
@ -2032,6 +2050,112 @@ public abstract class AbstractJdbc1Statement implements BaseStatement
|
|||||||
return m_useServerPrepare;
|
return m_useServerPrepare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private java.sql.Date dateFromString (String s) throws SQLException
|
||||||
|
{
|
||||||
|
int timezone = 0;
|
||||||
|
long millis = 0;
|
||||||
|
long localoffset = 0;
|
||||||
|
int timezoneLocation = (s.indexOf('+') == -1) ? s.lastIndexOf("-") : s.indexOf('+');
|
||||||
|
//if the last index of '-' or '+' is past 8. we are guaranteed that it is a timezone marker
|
||||||
|
//shortest = yyyy-m-d
|
||||||
|
//longest = yyyy-mm-dd
|
||||||
|
try
|
||||||
|
{
|
||||||
|
timezone = (timezoneLocation>7) ? timezoneLocation : s.length();
|
||||||
|
millis = java.sql.Date.valueOf(s.substring(0,timezone)).getTime();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new PSQLException("postgresql.format.baddate",s , "yyyy-MM-dd[-tz]");
|
||||||
|
}
|
||||||
|
timezone = 0;
|
||||||
|
if (timezoneLocation>7 && timezoneLocation+3 == s.length())
|
||||||
|
{
|
||||||
|
timezone = Integer.parseInt(s.substring(timezoneLocation+1,s.length()));
|
||||||
|
localoffset = java.util.Calendar.getInstance().getTimeZone().getOffset(millis);
|
||||||
|
if (s.charAt(timezoneLocation)=='+')
|
||||||
|
timezone*=-1;
|
||||||
|
}
|
||||||
|
millis = millis + timezone*60*60*1000 + localoffset;
|
||||||
|
return new java.sql.Date(millis);
|
||||||
|
}
|
||||||
|
|
||||||
|
private java.sql.Time timeFromString (String s) throws SQLException
|
||||||
|
{
|
||||||
|
int timezone = 0;
|
||||||
|
long millis = 0;
|
||||||
|
long localoffset = 0;
|
||||||
|
int timezoneLocation = (s.indexOf('+') == -1) ? s.lastIndexOf("-") : s.indexOf('+');
|
||||||
|
//if the index of the last '-' or '+' is greater than 0 that means this time has a timezone.
|
||||||
|
//everything earlier than that position, we treat as the time and parse it as such.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
timezone = (timezoneLocation==-1) ? s.length() : timezoneLocation;
|
||||||
|
millis = java.sql.Time.valueOf(s.substring(0,timezone)).getTime();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new PSQLException("postgresql.format.badtime",s, "HH:mm:ss[-tz]");
|
||||||
|
}
|
||||||
|
timezone = 0;
|
||||||
|
if (timezoneLocation != -1 && timezoneLocation+3 == s.length())
|
||||||
|
{
|
||||||
|
timezone = Integer.parseInt(s.substring(timezoneLocation+1,s.length()));
|
||||||
|
localoffset = java.util.Calendar.getInstance().getTimeZone().getOffset(millis);
|
||||||
|
if (s.charAt(timezoneLocation)=='+')
|
||||||
|
timezone*=-1;
|
||||||
|
}
|
||||||
|
millis = millis + timezone*60*60*1000 + localoffset;
|
||||||
|
return new java.sql.Time(millis);
|
||||||
|
}
|
||||||
|
|
||||||
|
private java.sql.Timestamp timestampFromString (String s) throws SQLException
|
||||||
|
{
|
||||||
|
int timezone = 0;
|
||||||
|
long millis = 0;
|
||||||
|
long localoffset = 0;
|
||||||
|
int nanosVal = 0;
|
||||||
|
int timezoneLocation = (s.indexOf('+') == -1) ? s.lastIndexOf("-") : s.indexOf('+');
|
||||||
|
int nanospos = s.indexOf(".");
|
||||||
|
//if there is a '.', that means there are nanos info, and we take the timestamp up to that point
|
||||||
|
//if not, then we check to see if the last +/- (to indicate a timezone) is greater than 8
|
||||||
|
//8 is because the shortest date, will have last '-' at position 7. e.g yyyy-x-x
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (nanospos != -1)
|
||||||
|
timezone = nanospos;
|
||||||
|
else if (timezoneLocation > 8)
|
||||||
|
timezone = timezoneLocation;
|
||||||
|
else
|
||||||
|
timezone = s.length();
|
||||||
|
millis = java.sql.Timestamp.valueOf(s.substring(0,timezone)).getTime();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new PSQLException("postgresql.format.badtimestamp", s, "yyyy-MM-dd HH:mm:ss[.xxxxxx][-tz]");
|
||||||
|
}
|
||||||
|
timezone = 0;
|
||||||
|
if (nanospos != -1)
|
||||||
|
{
|
||||||
|
int tmploc = (timezoneLocation > 8) ? timezoneLocation : s.length();
|
||||||
|
nanosVal = Integer.parseInt(s.substring(nanospos+1,tmploc));
|
||||||
|
int diff = 8-((tmploc-1)-(nanospos+1));
|
||||||
|
for (int i=0;i<diff;i++)
|
||||||
|
nanosVal*=10;
|
||||||
|
}
|
||||||
|
if (timezoneLocation>8 && timezoneLocation+3 == s.length())
|
||||||
|
{
|
||||||
|
timezone = Integer.parseInt(s.substring(timezoneLocation+1,s.length()));
|
||||||
|
localoffset = java.util.Calendar.getInstance().getTimeZone().getOffset(millis);
|
||||||
|
if (s.charAt(timezoneLocation)=='+')
|
||||||
|
timezone*=-1;
|
||||||
|
}
|
||||||
|
millis = millis + timezone*60*60*1000 + localoffset;
|
||||||
|
java.sql.Timestamp tmpts = new java.sql.Timestamp(millis);
|
||||||
|
tmpts.setNanos(nanosVal);
|
||||||
|
return tmpts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static final String PG_TEXT = "text";
|
private static final String PG_TEXT = "text";
|
||||||
private static final String PG_INTEGER = "integer";
|
private static final String PG_INTEGER = "integer";
|
||||||
|
Loading…
Reference in New Issue
Block a user