db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Deepa Remesh (JIRA)" <derby-...@db.apache.org>
Subject [jira] Updated: (DERBY-680) In ij, executing a prepared statement with numeric/decimal parameter fails with NullPointerException in J2ME/CDC/FP
Date Wed, 14 Dec 2005 22:31:48 GMT
     [ http://issues.apache.org/jira/browse/DERBY-680?page=all ]

Deepa Remesh updated DERBY-680:

    Attachment: derby-680.diff

Attaching a patch 'derby-680.diff'. This patch removes the check "ps.getMetaData().getColumnType(c)"
from org.apache.derby.impl.tools.ij.util.java. This was checking ResultSetMetaData, whereas
the actual check should be for ParameterMetaData. But ParameterMetaData is not available in
JSR169. So currently, get/set String has to be used for all types. With this change, lang/cast.sql
does not give NPE. I have added a new master for ejbql.sql. This test was passing because
coincidentally ResultSetMetaData and ParameterMetaData were of same type in the statements

With this patch, I ran derbyall with Sun JDK1.4.2 and j9_foundation vm in IBM WCTME5.7. No
new failures. Please review/commit this patch.

> In ij, executing a prepared statement with numeric/decimal parameter fails with NullPointerException
> -------------------------------------------------------------------------------------------------------------------
>          Key: DERBY-680
>          URL: http://issues.apache.org/jira/browse/DERBY-680
>      Project: Derby
>         Type: Bug
>   Components: Tools
>     Versions:
>  Environment: j9_foundation VM in IBM WCTME 5.7
>     Reporter: Deepa Remesh
>     Assignee: Deepa Remesh
>  Attachments: derby-680.diff, derby-680.status
> NPE is thrown in ij when executing prepared statement which 
> - has numeric/decimal parameters
> - does not return any result set
> Repro for this problem is the test lang/cast.sql. This test currently fails in CDC/FP.
> The following lines in the test throw NPE:
> execute q10 using 'values 123456.78';
> execute q11 using 'values 123456.78';
> where q10 is "prepare q10 as 'insert into t1 (num) values cast(? as numeric(18))';"
> and q11 is "prepare q11 as 'insert into t1 (dc) values cast(? as decimal(18))';"
> The stack trace for failure is:
> java.lang.NullPointerException
>         at org.apache.derby.impl.tools.ij.util.DisplayMulti(util.java:666)
>         at org.apache.derby.impl.tools.ij.utilMain.displayResult(utilMain.java:398)
>         at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:290)
>         at org.apache.derby.impl.tools.ij.Main.go(Main.java:203)
>         at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:169)
>         at org.apache.derby.impl.tools.ij.Main.main(Main.java:75)
>         at org.apache.derby.tools.ij.main(ij.java:56)
> This happens in the following code. Since the above prepared statements do not return
result sets, call to getMetaData() will return null. But in the code, no check is done to
see if getMetaData() returns null before calling getColumnType.
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 						// In J2ME there is no object that represents
> 						// a DECIMAL value. By default use String to
> 						// pass values around, but for integral types
> 						// first convert to a integral type from the DECIMAL
> 						// because strings like 3.4 are not convertible to
> 						// an integral type.
> 						switch (ps.getMetaData().getColumnType(c))
> 						{
> 						case Types.BIGINT:
> 							ps.setLong(c, rs.getLong(c));
> 						    break;
> 						case Types.INTEGER:
> 						case Types.SMALLINT:
> 						case Types.TINYINT:
> 							ps.setInt(c, rs.getInt(c));
> 							break;
> 						default:
> 							ps.setString(c,rs.getString(c));
> 						    break;
> 						}			
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message