Re: Inconsistent casting with literal vs parameter - Mailing list pgsql-jdbc

From Matthew Bellew
Subject Re: Inconsistent casting with literal vs parameter
Date
Msg-id 43E9344C.2060805@bellew.net
Whole thread Raw
In response to Re: Inconsistent casting with literal vs parameter  (Matthew Bellew <matthew@bellew.net>)
Responses Re: Inconsistent casting with literal vs parameter  (Kris Jurka <books@ejurka.com>)
List pgsql-jdbc
I wrote the following code

        Properties props = new Properties();
        props.put("user", "postgres");
        props.put("password", "****");
        props.put("stringtype", "unspecified");
        Connection conn =
DriverManager.getConnection("jdbc:postgresql://localhost/cpas", props);
        DatabaseMetaData md = conn.getMetaData();
        System.out.println("Server URL:               " + md.getURL());
        System.out.println("Database Product Name:    " +
md.getDatabaseProductName());
        System.out.println("Database Product Version: " +
md.getDatabaseProductVersion());
        System.out.println("JDBC Driver Name:         " +
md.getDriverName());
        System.out.println("JDBC Driver Version:      " +
md.getDriverVersion());

Unfortunately, it gives the same result.

    Server URL:               jdbc:postgresql://localhost/cpas
    Database Product Name:    PostgreSQL
    Database Product Version: 8.1.0
    JDBC Driver Name:         PostgreSQL Native Driver
    JDBC Driver Version:      PostgreSQL 8.1 JDBC3 with SSL (build 404)

So, does this mean this parameter is not properly respected in the driver?

Matt

Matthew Bellew wrote:

> Fantastic, thanks for the pointer this parameter.  I would argue that
> the expected behavior would be that these two cases are semantically
> equivalent.  The fact that this is configurable is great, but my gripe
> would be that the default setting results in 'wrong' answers for a
> very unobvious reason.
>
> Again thanks,
> Matt
>
> Kris Jurka wrote:
>
>>
>>
>> On Tue, 7 Feb 2006, Matthew Bellew wrote:
>>
>>> I have an example here where replacing a string literal with a
>>> string parameter in the same query yields different results.  See
>>> Java code below, and note that this example works with int as well
>>> as float.  In one case the comparisions are done as numbers in the
>>> other they are done as strings. The explanation I received from Tom
>>> Lane is that in stmtA with (x < '100'), '100' is an untyped literal,
>>> in stmtB and stmtC (x < ?), the parameter is treated as typed, and
>>> thus the coercion occurs differently.   I'm afraid someone is going
>>> to answer "it works this way because..."  I'm more interested to
>>> know if anyone else thinks it is a problem that these two statements
>>> return different results. I seems to me that these queries
>>> reasonably have to be considered the same, and should return the
>>> same answer..
>>
>>
>>
>> I don't think these queries are the same, consider
>> SELECT '12' < '2', 12 < 2;
>>
>> In the first case the server considers it text and the second it
>> considers it numeric.  Now when considering the mixed case the server
>> has to decide what to do.  When you say 12 < '2' you aren't
>> conclusively stating what type '2' is and it gets coerced to numeric,
>> but when you say setString you are explicitly telling it that it is a
>> text data type and a text comparison should be done.  When you say
>> setObject with a String object you also say that it is text data.  If
>> you want it interpreted as numeric data use setFloat or similar.
>>
>> The 8.2 driver has an option to allow setString data to passed to the
>> server without a type and you will get the result you desire.  See
>> the stringtype parameter here:
>>
>> http://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters
>>
>>
>> Kris Jurka
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 6: explain analyze is your friend
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: explain analyze is your friend


pgsql-jdbc by date:

Previous
From: Carlos Correia
Date:
Subject: Re: Statement has been closed (only in Windows)
Next
From: Kris Jurka
Date:
Subject: Re: Inconsistent casting with literal vs parameter