Re: [HACKERS] JDBC drivers and streaming content

From: Dave Cramer <Dave(at)micro-automation(dot)net>
To: Chris Smith <cdsmith(at)twu(dot)net>
Cc: "pgsql-jdbc(at)postgresql(dot)org" <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: [HACKERS] JDBC drivers and streaming content
Date: 2003-01-24 19:33:42
Message-ID: 1043436822.21734.81.camel@inspiron.cramers
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-jdbc

Chris,

You will have much better luck on jdbc list, and I have forwarded it
there.

There is no problem with making it jdk1.4 only as long as you only
change the code in the jdbc3 packages. The way the build works they will
only be built if the driver is being build by jdk 1.4.

As far as runtime testing for objects goes, I would try to get this
running first by doing that, then by wrapping the statements. Again, if
you are going to make it jdk 1.4 specific, you can only play in the
jdbc3 package

Dave

On Fri, 2003-01-24 at 11:56, Chris Smith wrote:
> I'm about to start implemention streaming of queries to the server in the
> pgsql jdbc drivers when PreparedStatement is used with setBinaryStream...
> but before I get started, since I've never contributed before, I wanted to
> run it by everyone.
>
> I'm planning on making the following changes:
>
> 1. In QueryExecutor.sendQuery, if an object in m_binds is a java.io.Reader,
> then instead of calling toString and sending that, I'll read and send the
> contents in 16K increments.
>
> 2. In AbstractJdbc1Statement.setBinaryStream, instead of delegating to
> setBytes, I'll call bind directly, but send a custom java.io.Reader subclass
> (which adds the quotes and properly escapes the bytes and such) as the
> object.
>
> A couple questions:
>
> - There are a few constants that could probably be tuned for performance
> (ie, the size of the buffer used for streaming, and a threshold to avoid the
> streaming overhead for very short streams). Is there a fairly standard way
> to handle this stuff in the JDBC drivers? Should it be made configurable to
> the user? Read from a properties file? Stored in any specific class as a
> constant?
>
> - It seems to be quite a pain that org.postgresql.core.Encoding works only
> with String, and can't copy into a provided char[] -- this will mean
> creating a large number of String objects during the streaming. I could fix
> this easily with java.nio.CharsetEncoder, but it would make the code
> dependent on JDK 1.4. Not desired?
>
> - If there's a general dislike for runtime testing of object classes among
> the developer community, then I could, instead of special-casing Reader in
> sendQuery, wrap *all* PreparedStatement parameters in an interface that has
> a getReader method, and provide a default non-streaming implementation that
> uses StringReader. This is more intrusive, but I'll go whichever way makes
> it more likely for the patch to be committed.
>
> - Am I missing anything? Is this harder than it seems? Seems like someone
> would have done it already...
>
> --
> www.designacourse.com
> The Easiest Way to Train Anyone... Anywhere.
>
> Chris Smith - Lead Software Developer/Technical Trainer
> MindIQ Corporation
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
--
Dave Cramer <Dave(at)micro-automation(dot)net>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Hannu Krosing 2003-01-24 20:35:39 Re: Postgresql source
Previous Message Josh Berkus 2003-01-24 19:20:14 Mount options for Ext3?

Browse pgsql-jdbc by date

  From Date Subject
Next Message pgsql-bugs 2003-01-24 23:46:26 Bug #886: jdbc "update row" can mess up other columns
Previous Message Mykola Dudar 2003-01-24 19:00:28 Re: jdbc connection