Re: Java Studio Creator Fix/Hack

Lists: pgsql-jdbc
From: Pucky Loucks <ploucks(at)h2st(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Java Studio Creator Fix/Hack
Date: 2004-12-10 22:09:26
Message-ID: 27935D81-4AF8-11D9-BF6C-000D9344294E@h2st.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-jdbc

Hi everyone, I noticed at TODO for getMetaData() on the 8.0 and figured
I'd give this task a try. I now am able to use Java Studio Creator
with Postgresql 7.4.6.

couldn't access the postgresql sites for the past couple of days so I
posted my hack on the Sun Software Forums.
http://swforum.sun.com/jive/thread.jspa?threadID=50150&tstart=15

here is was I posted:

Ok so I've noticed that there have been a few of us Postgres people
trying to use JSC with our favourite Database. I am posting the fix
here because i can't get access to the Postgresql websites(very odd).

if you check out the postgres jdbc code from their cvs change
org.postgresql.jdbc2.AbstractJdbc2Statement.getMetaData() to the
following.
===========START OF CODE HACK===============

public ResultSetMetaData getMetaData() throws SQLException
{ ResultSet rs = null;
checkClosed();
rs = getResultSet();

if(rs == null)
{
// the following code hack has not been fully tested, therefor use at
your own risk.
/// by Pucky Loucks of How2share Technologies (creators of PiXPO)

StatementResultHandler handler = new StatementResultHandler();

connection.getQueryExecutor().execute(preparedQuery,
preparedParameters,
handler,
0,
0,
QueryExecutor.QUERY_ONESHOT);
rs = handler.getResults().getResultSet();
}

return rs.getMetaData();
}
===================END OF CODE HACK=====
then run ant for pgjdbc and use the postgresql.jar that is in the jar
directory, and volia.

Enjoy.

Pucky Loucks
Senior Systems Architect
How2Share Technologies Inc.


From: Oliver Jowett <oliver(at)opencloud(dot)com>
To: Pucky Loucks <ploucks(at)h2st(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Java Studio Creator Fix/Hack
Date: 2004-12-11 00:45:35
Message-ID: 41BA432F.2020607@opencloud.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-jdbc

Pucky Loucks wrote:

> org.postgresql.jdbc2.AbstractJdbc2Statement.getMetaData() to the following. [...]

> connection.getQueryExecutor().execute(preparedQuery,
> preparedParameters,
> handler,
> 0,
> 0,
> QueryExecutor.QUERY_ONESHOT);
> rs = handler.getResults().getResultSet();
> }

Danger, danger. This actually *executes* the query.
Statement.getMetaData() isn't meant to do that!

-O


From: Kris Jurka <books(at)ejurka(dot)com>
To: Pucky Loucks <ploucks(at)h2st(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Java Studio Creator Fix/Hack
Date: 2004-12-11 01:53:55
Message-ID: Pine.BSO.4.56.0412102043320.31603@leary.csoft.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-jdbc

On Fri, 10 Dec 2004, Pucky Loucks wrote:

> Hi everyone, I noticed at TODO for getMetaData() on the 8.0 and figured
> I'd give this task a try. I now am able to use Java Studio Creator
> with Postgresql 7.4.6.
>
> public ResultSetMetaData getMetaData() throws SQLException
> { ResultSet rs = null;
> checkClosed();
> rs = getResultSet();
>
> if(rs == null)
> {
> // the following code hack has not been fully tested, therefor use at
> your own risk.
> /// by Pucky Loucks of How2share Technologies (creators of PiXPO)
>
> StatementResultHandler handler = new StatementResultHandler();
>
> connection.getQueryExecutor().execute(preparedQuery,
> preparedParameters,
> handler,
> 0,
> 0,
> QueryExecutor.QUERY_ONESHOT);
> rs = handler.getResults().getResultSet();
> }
>
> return rs.getMetaData();
> }
> ===================END OF CODE HACK=====

This patch doesn't really work. It assumes that the PreparedStatement
doesn't have side effects and that all parameters have been set.

Consider:

PreparedStatement pst = con.prepareStatement("UPDATE tab SET x=x+1");
pst.getMetaData();
pst.execute();

Now all of a sudden x = x+2. Actually your patch will throw a
NullPointerException, but that's a simple code issue.

Consider:

PreparedStatement pst = con.prepareStatement("SELECT * FROM t WHERE x=?");
pst.getMetaData();

Fails with: org.postgresql.util.PSQLException: No value specified for
parameter 1.

The planned way to implement this feature is with the V3 protocol issuing
Parse/Bind/Describe/ClosePortal without ever executing it.

Kris Jurka


From: Pucky Loucks <ploucks(at)h2st(dot)com>
To: Kris Jurka <books(at)ejurka(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Java Studio Creator Fix/Hack
Date: 2004-12-11 17:35:58
Message-ID: 1E96BBA8-4B9B-11D9-888E-000393CE25C2@h2st.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-jdbc

I should have only said HACK not fix... :) Totally understand that
there is a better way to do it, I just need to get something working,
(this is not for production use) therefore hitting the database is fine
for me right now, and all statements are "select * from tablename"
again this is specific hack for Java Studio Creator.

Can't wait till a real JDBC Developer attacks the problem.

Thanks for the awesome work you guys do!

Pucky Loucks
How2Share Technologies Inc.

On 10-Dec-04, at 5:53 PM, Kris Jurka wrote:I s

>
>
> On Fri, 10 Dec 2004, Pucky Loucks wrote:
>
>> Hi everyone, I noticed at TODO for getMetaData() on the 8.0 and
>> figured
>> I'd give this task a try. I now am able to use Java Studio Creator
>> with Postgresql 7.4.6.
>>
>> public ResultSetMetaData getMetaData() throws SQLException
>> { ResultSet rs = null;
>> checkClosed();
>> rs = getResultSet();
>>
>> if(rs == null)
>> {
>> // the following code hack has not been fully tested, therefor use at
>> your own risk.
>> /// by Pucky Loucks of How2share Technologies (creators of PiXPO)
>>
>> StatementResultHandler handler = new StatementResultHandler();
>>
>> connection.getQueryExecutor().execute(preparedQuery,
>> preparedParameters,
>> handler,
>> 0,
>> 0,
>> QueryExecutor.QUERY_ONESHOT);
>> rs = handler.getResults().getResultSet();
>> }
>>
>> return rs.getMetaData();
>> }
>> ===================END OF CODE HACK=====
>
>
> This patch doesn't really work. It assumes that the PreparedStatement
> doesn't have side effects and that all parameters have been set.
>
> Consider:
>
> PreparedStatement pst = con.prepareStatement("UPDATE tab SET x=x+1");
> pst.getMetaData();
> pst.execute();
>
> Now all of a sudden x = x+2. Actually your patch will throw a
> NullPointerException, but that's a simple code issue.
>
> Consider:
>
> PreparedStatement pst = con.prepareStatement("SELECT * FROM t WHERE
> x=?");
> pst.getMetaData();
>
> Fails with: org.postgresql.util.PSQLException: No value specified for
> parameter 1.
>
> The planned way to implement this feature is with the V3 protocol
> issuing
> Parse/Bind/Describe/ClosePortal without ever executing it.
>
> Kris Jurka
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faqs/FAQ.html
>
>