Thread: float4 or real in function parameter -> PSQLException: ERROR function in_test4(double precision) does not exist

Hi,

We use database functions in our application.

Today I want to use a float4/real Parameter for the first time. You can
see a sample in in_test4.
Float8/double-parameters run fine.

The test.sql creates a small test database.
The Float4Test.java contains the code sample, which throws the following
exception.

| Hint: No function matches the given name and argument types. You
| might need to add explicit type casts.
|   Position: 8
|         at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
|         at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
|         at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
|         at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
|         at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367)
|         at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:360)
|         at Float4Test.main(Float4Test.java:24)


If I call

|  Select in_test4(0.4) ;

in psql, everything runs fine.

Is it a bug in the JDBC-driver?

I use postgres 8.4.0 and driver postgresql-8.4-701.jdbc4.jar.


Ciao

Michael

Attachment
Hi,

Michael Schwipps a écrit :
 > Hi,
 >
 > We use database functions in our application.
 >
 > Today I want to use a float4/real Parameter for the first time. You can
 > see a sample in in_test4.
 > Float8/double-parameters run fine.
 >
 > in psql, everything runs fine.
 >
 > Is it a bug in the JDBC-driver?

I have my nose just on it: in AbstractJdbc2Statement.java float
parameters are passed as FLOAT8 (just like in setDouble):
 >     public void setFloat(int parameterIndex, float x) throws SQLException
 >     {
 >         checkClosed();
 >         bindLiteral(parameterIndex, Float.toString(x), Oid.FLOAT8);
 >     }

I'm new here, but I think it should be a FLOAT4. Try to change it in the
source code of the driver to see if it works after that.


Best regards,
Sylvain Leroux